From 6fe4bced45be6ce735e172432f68817a9abece28 Mon Sep 17 00:00:00 2001 From: lew Date: Tue, 7 Apr 2026 23:05:56 +0100 Subject: [PATCH] feat(site): generate Caddy virtualHosts for preview sites --- modules/site.nix | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/modules/site.nix b/modules/site.nix index 456e65e..957dcc3 100644 --- a/modules/site.nix +++ b/modules/site.nix @@ -110,6 +110,7 @@ let }); cfg = lib.filterAttrs (_: site: site.enable) config.services.site; + previewCfg = lib.filterAttrs (_: site: site.enable && site.preview.enable) config.services.site; webhookPort = 4323; @@ -134,7 +135,7 @@ in }; config = { - services.caddy.virtualHosts = mkMerge (mapAttrsToList (name: site: + services.caddy.virtualHosts = mkMerge ((mapAttrsToList (name: site: { ${site.domain}.extraConfig = if site.static then '' root * ${site.dataDir}/repo/${site.buildOutputDir} @@ -151,7 +152,35 @@ in redir https://${site.domain}{uri} permanent ''; }) site.redirectDomains) - ) cfg); + ) cfg) ++ (mapAttrsToList (name: site: + let previewDataDir = "/srv/${name}-preview"; in { + ${site.preview.domain}.extraConfig = if site.static then '' + @health path /health-ping + handle @health { + root * ${previewDataDir}/repo/${site.buildOutputDir} + try_files {path} /index.html + file_server + } + handle { + import tinyauth + root * ${previewDataDir}/repo/${site.buildOutputDir} + encode zstd gzip + try_files {path} /index.html + file_server + } + '' else '' + @health path /health-ping + handle @health { + reverse_proxy localhost:${toString site.preview.port} + } + handle { + import tinyauth + reverse_proxy localhost:${toString site.preview.port} + encode zstd gzip + } + ''; + } + ) previewCfg)); systemd.services = mkMerge ((mapAttrsToList (name: site: let h = siteHelpers name site; in {