diff options
| author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-07-30 14:05:39 +0200 |
|---|---|---|
| committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-07-30 14:05:39 +0200 |
| commit | c153a351659e4596acfc31f00bf594343cbfcd68 (patch) | |
| tree | a9ed83de07711d6424fbea09aad28891bae5bfe4 /modules/vhack/ng/nginx | |
| parent | hosts/server3: Setup prometheus server in agent mode (diff) | |
| download | nixos-server-c153a351659e4596acfc31f00bf594343cbfcd68.zip | |
modules: Use namespaces
That might make it easier in the future to merge different server
configs together (and thusly facilitate code-reuse.).
Diffstat (limited to 'modules/vhack/ng/nginx')
| -rw-r--r-- | modules/vhack/ng/nginx/module.nix | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/modules/vhack/ng/nginx/module.nix b/modules/vhack/ng/nginx/module.nix new file mode 100644 index 0000000..1317d4d --- /dev/null +++ b/modules/vhack/ng/nginx/module.nix @@ -0,0 +1,83 @@ +{ + lib, + config, + ... +}: let + mkRedirect = _: value: { + forceSSL = true; + enableACME = true; + locations."/".return = "301 ${value}$request_uri"; + }; + + redirects = builtins.mapAttrs mkRedirect cfg.redirects; + + cfg = config.vhack.nginx; +in { + options.vhack.nginx = { + enable = lib.mkEnableOption '' + a default nginx config. + ''; + + redirects = lib.mkOption { + type = lib.types.attrsOf lib.types.str; + default = {}; + description = '' + An attrset of redirects to add. + The keys are the domain that should than be redirected to the url specified as + value. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + vhack = { + persist.directories = [ + "/var/lib/acme" + ]; + + monitoring.prometheus = { + sources = [ + { + name = "nginx"; + target = "127.0.0.1:${toString config.services.prometheus.exporters.nginx.port}"; + } + ]; + }; + }; + + services.prometheus.exporters.nginx = { + enable = true; + port = 9111; + listenAddress = "127.0.0.1"; + scrapeUri = "http://localhost:80/nginx_status"; + }; + + users = { + users.acme = { + uid = config.vhack.constants.ids.uids.acme; + group = "acme"; + }; + groups.acme.gid = config.vhack.constants.ids.gids.acme; + }; + + security.acme = { + acceptTerms = true; + defaults = { + email = "admin@vhack.eu"; + webroot = "/var/lib/acme/acme-challenge"; + }; + }; + + networking.firewall = { + allowedTCPPorts = [80 443]; + }; + services.nginx = { + enable = true; + + # Enable the status page for the prometheus exporter. + statusPage = lib.mkIf config.services.prometheus.enable true; + + virtualHosts = redirects; + }; + }; +} |
