website: caddy cloudflare package

This commit is contained in:
ooks-io 2024-12-02 18:55:35 +11:00
parent c096dc295a
commit a9ef09a8a4
5 changed files with 95 additions and 25 deletions

View file

@ -24,7 +24,10 @@ in {
}; };
webserver = { webserver = {
caddy.enable = mkEnableOption ""; caddy = {
enable = mkEnableOption "";
cloudflare.enable = mkEnableOption "";
};
}; };
database = { database = {
postgresql.enable = mkEnableOption ""; postgresql.enable = mkEnableOption "";

View file

@ -15,7 +15,10 @@
}; };
in { in {
config = mkIf (elem "website" services) { config = mkIf (elem "website" services) {
ooknet.server.webserver.caddy.enable = true; ooknet.server.webserver.caddy = {
enable = true;
cloudflare.enable = true;
};
systemd.tmpfiles.settings.websiteDirs = { systemd.tmpfiles.settings.websiteDirs = {
"/var/www"."d" = websitePermissions; "/var/www"."d" = websitePermissions;
"/var/www/ooknet.org"."d" = websitePermissions; "/var/www/ooknet.org"."d" = websitePermissions;
@ -45,29 +48,31 @@ in {
}; };
# using caddy because it makes my life easy # using caddy because it makes my life easy
services.caddy.virtualHosts = { services.caddy = {
"ooknet.org".extraConfig = virtualHosts = {
# sh "ooknet.org".extraConfig =
'' # sh
encode zstd gzip ''
encode zstd gzip
header { header {
Strict-Transport-Security "max-age=31536000;" Strict-Transport-Security "max-age=31536000;"
X-XSS-Protection "1; mode=block" X-XSS-Protection "1; mode=block"
X-Frame-Options "DENY" X-Frame-Options "DENY"
X-Content-Type-Options "nosniff" X-Content-Type-Options "nosniff"
-Server -Server
Referrer-Policy: no-referrer Referrer-Policy "no-referrer"
} }
root * /var/www/ooknet.org/ root * /var/www/ooknet.org/
file_server file_server
'';
"www.ooknet.org".extraConfig = ''
redir https://ooknet.org{uri} permanent
''; '';
"www.ooknet.org".extraConfig = '' };
redir https://ooknet.org{uri}
'';
}; };
}; };
} }

View file

@ -1,16 +1,31 @@
{ {
config, config,
lib, lib,
self',
... ...
}: let }: let
inherit (lib) mkIf; inherit (lib) mkIf mkMerge;
inherit (config.ooknet.server.webserver) caddy; inherit (config.ooknet.server.webserver) caddy;
in { in {
config = mkIf caddy.enable { config = mkIf caddy.enable {
users.groups.www = {}; users.groups.www = {};
services.caddy = { services.caddy = mkMerge [
enable = true; {
group = "www"; enable = true;
}; group = "www";
}
(mkIf caddy.cloudflare.enable {
package = self'.packages.caddy-with-cloudflare;
globalConfig = ''
servers {
trusted_proxies cloudflare {
interval 12h
timeout 15s
}
}
'';
})
];
}; };
} }

View file

@ -0,0 +1,46 @@
{
buildGoModule,
cacert,
go,
lib,
stdenv,
xcaddy,
caddy,
}:
caddy.override {
buildGoModule = args:
buildGoModule (args
// {
src = stdenv.mkDerivation rec {
pname = "caddy-using-xcaddy-${xcaddy.version}";
inherit (caddy) version;
dontUnpack = true;
dontFixup = true;
nativeBuildInputs = [cacert go];
plugins = [
"github.com/WeidiDeng/caddy-cloudflare-ip"
];
configurePhase = ''
export GOCACHE=$TMPDIR/go-cache
export GOPATH="$TMPDIR/go"
export XCADDY_SKIP_BUILD=1
'';
buildPhase = ''
${xcaddy}/bin/xcaddy build "${caddy.src.rev}" ${
lib.concatMapStringsSep " " (plugin: "--with ${plugin}") plugins
}
cd buildenv*
go mod vendor
'';
installPhase = ''
cp -r --reflink=auto . $out
'';
outputHash = "sha256-O3QWqgQtLOifsibyB0/UKricEGAx/3NhSjGbgu8+qgY=";
outputHashMode = "recursive";
};
subPackages = ["."];
ldflags = ["-s" "-w"];
vendorHash = null;
});
}

View file

@ -8,6 +8,7 @@
repopack = callPackage ./repopack {}; repopack = callPackage ./repopack {};
live-buds-cli = callPackage ./live-buds-cli {}; live-buds-cli = callPackage ./live-buds-cli {};
website = callPackage ./website {}; website = callPackage ./website {};
caddy-with-cloudflare = callPackage ./caddy-with-cloudflare {};
ook-vim = mkNeovim pkgs [ook-vim-config]; ook-vim = mkNeovim pkgs [ook-vim-config];
}; };