From 2a343542cd1f1b2ef6c744abc24d6d04acce83d4 Mon Sep 17 00:00:00 2001 From: flowey Date: Tue, 22 Sep 2026 11:11:33 -0500 Subject: [PATCH] meow --- containers/server-n0/git.nix | 4 ++ containers/server-n0/mail.nix | 3 ++ containers/server-n0/maven.nix | 4 ++ containers/server-n0/nginx.nix | 75 +++++++++++++++------------------- 4 files changed, 45 insertions(+), 41 deletions(-) diff --git a/containers/server-n0/git.nix b/containers/server-n0/git.nix index 050812f..adbca87 100644 --- a/containers/server-n0/git.nix +++ b/containers/server-n0/git.nix @@ -53,6 +53,10 @@ in systemd.services.gitea.serviceConfig.FailureAction = "exit-force"; }; net.expose.tcp = [ 3000 ]; + miscProperties.nginx = { + domain = "git.floweytf.com"; + port = 3000; + }; }; ci-runner = diff --git a/containers/server-n0/mail.nix b/containers/server-n0/mail.nix index 0581593..8fad71d 100644 --- a/containers/server-n0/mail.nix +++ b/containers/server-n0/mail.nix @@ -150,6 +150,9 @@ mkContainer { net.access = [ { to = "@internet"; } ]; svc.autoStart = true; + miscProperties.nginx = { + domain = "mail.floweytf.com"; + }; net.forward.tcp = [ 25 993 diff --git a/containers/server-n0/maven.nix b/containers/server-n0/maven.nix index bfa00aa..a0f1563 100644 --- a/containers/server-n0/maven.nix +++ b/containers/server-n0/maven.nix @@ -38,4 +38,8 @@ mkContainer { environment.JAVA_OPTS = "-Xmx128M"; }; net.expose.tcp = [ 8080 ]; + miscProperties.nginx = { + domain = "maven.floweytf.com"; + port = 8080; + }; } diff --git a/containers/server-n0/nginx.nix b/containers/server-n0/nginx.nix index 3c7b71d..68a1b8f 100644 --- a/containers/server-n0/nginx.nix +++ b/containers/server-n0/nginx.nix @@ -7,7 +7,7 @@ ... }: let - inherit (dsl) mkContainer; + inherit (dsl) mkContainer collectContainers; inherit (hostInfo.paths) data; mkNginxConfig = @@ -40,9 +40,6 @@ let defaultLoc = lib.optionalAttrs (upstream != null) { "/" = { proxyWebsockets = websockets; - # avoid startup error when containers aren't registered yet - # proxyPass is left unset for that reason, so recommendedProxySettings - # won't auto-include its headers here - set them manually to match extraConfig = '' set $backend "${upstream.container.name}:${toString upstream.port}"; proxy_pass http://$backend; @@ -157,49 +154,45 @@ let up = container: port: { inherit container port; }; - nginxSetup = - hostAddr: - mkNginxConfig { - email = "floweydev@gmail.com"; - resolver = hostAddr; - vhosts = [ - { - domain = "devenv.floweytf.com"; - upstream = up containers.devenv 8080; - } - { - domain = "maven.floweytf.com"; - upstream = up containers.maven 8080; - } - { - domain = "git.floweytf.com"; - upstream = up containers.git 3000; - } - { - domain = "utils.floweytf.com"; - redirect = false; - listenHttp = true; - extraLocations = { - "/static/" = { - alias = "/usr/share/nginx/static/"; - extraConfig = "autoindex on;"; - }; - }; - } - { - # no upstream, vhost only exists for certs - domain = "mail.floweytf.com"; - } - ]; - }; + discovered = collectContainers "nginx" containers; + + discoveredVhosts = map ( + { container, data }: + { inherit (data) domain; } + // lib.optionalAttrs (data ? port) { upstream = up container data.port; } + // lib.optionalAttrs (data ? websockets) { inherit (data) websockets; } + // lib.optionalAttrs (data ? redirect) { inherit (data) redirect; } + // lib.optionalAttrs (data ? listenHttp) { inherit (data) listenHttp; } + // lib.optionalAttrs (data ? extraLocations) { inherit (data) extraLocations; } + ) discovered; + + extraVhosts = [ + { + domain = "utils.floweytf.com"; + redirect = false; + listenHttp = true; + extraLocations = { + "/static/" = { + alias = "/usr/share/nginx/static/"; + extraConfig = "autoindex on;"; + }; + }; + } + ]; + + upstreamContainers = map (e: e.container) (lib.filter ({ data, ... }: data ? port) discovered); in let - setup = nginxSetup hostAddr; + setup = mkNginxConfig { + email = "floweydev@gmail.com"; + resolver = hostAddr; + vhosts = discoveredVhosts ++ extraVhosts; + }; c = mkContainer { inherit name; net.access = setup.access ++ [ { to = "@internet"; } ]; svc.autoStart = true; - svc.depends = lib.attrVals [ "devenv" "maven" "git" ] containers; + svc.depends = upstreamContainers; net.forward.tcp = [ 80 443