{moduleWithSystem, ...}: { flake.nixosModules.containerN8N = moduleWithSystem ({pkgs, ...}: { virtualisation.oci-containers.containers."n8n-n8n" = { image = "docker.n8n.io/n8nio/n8n"; environment = { "GENERIC_TIMEZONE" = ""; "N8N_HOST" = "."; "N8N_PORT" = "5678"; "N8N_PROTOCOL" = "https"; "N8N_SECURE_COOKIE" = "false"; "NODE_ENV" = "production"; "WEBHOOK_URL" = "https://./"; }; volumes = [ "/containers/n8n/local-files:/files:rw" "/containers/n8n/n8n-data:/home/node/.n8n:rw" ]; ports = [ "0.0.0.0:5678:5678/tcp" ]; labels = { "traefik.enable" = "false"; "traefik.http.middlewares.n8n.headers.SSLHost" = ""; "traefik.http.middlewares.n8n.headers.SSLRedirect" = "true"; "traefik.http.middlewares.n8n.headers.STSIncludeSubdomains" = "true"; "traefik.http.middlewares.n8n.headers.STSPreload" = "true"; "traefik.http.middlewares.n8n.headers.STSSeconds" = "315360000"; "traefik.http.middlewares.n8n.headers.browserXSSFilter" = "true"; "traefik.http.middlewares.n8n.headers.contentTypeNosniff" = "true"; "traefik.http.middlewares.n8n.headers.forceSTSHeader" = "true"; "traefik.http.routers.n8n.entrypoints" = "web,websecure"; "traefik.http.routers.n8n.middlewares" = "n8n@docker"; "traefik.http.routers.n8n.rule" = "Host(`.`)"; "traefik.http.routers.n8n.tls" = "true"; "traefik.http.routers.n8n.tls.certresolver" = "mytlschallenge"; }; log-driver = "journald"; extraOptions = [ "--network-alias=n8n" "--network=n8n_default" ]; }; systemd.services."podman-n8n-n8n" = { serviceConfig = { Restart = pkgs.lib.mkOverride 90 "always"; }; after = [ "podman-network-n8n_default.service" ]; requires = [ "podman-network-n8n_default.service" ]; partOf = [ "podman-compose-n8n-root.target" ]; wantedBy = [ "podman-compose-n8n-root.target" ]; }; # Networks systemd.services."podman-network-n8n_default" = { path = [pkgs.podman]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; ExecStop = "podman network rm -f n8n_default"; }; script = '' podman network inspect n8n_default || podman network create n8n_default ''; partOf = ["podman-compose-n8n-root.target"]; wantedBy = ["podman-compose-n8n-root.target"]; }; # Root service # When started, this will automatically create all resources and start # the containers. When stopped, this will teardown all resources. systemd.targets."podman-compose-n8n-root" = { unitConfig = { Description = "Root target generated by compose2nix."; }; wantedBy = ["multi-user.target"]; }; }); }