Entry

NixOS: securely passing environment variables w/ Caddy quickstart

Solution

Nix will - sadly - expose any direct text passed in your nix files. To circumvent this for sensitive data, secret managing schemes can be used.

services.caddy = {
    enable = true;
    package = pkgs.caddy.withPlugins {
      plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ];
      hash = "sha256-YZ4Bq0hfOJpa0C2lKipEY4fqwzJbEFM7ci5ys9S3uAo=";
    };
    globalConfig = ''
        acme_dns porkbun {
            api_key {$CADDY_API_KEY}
            api_secret_key {$CADDY_API_SECRET_KEY}
        }
    '';
    virtualHosts = {
        "example.com".extraConfig = ''
          reverse_proxy 127.0.0.1:5000
        '';
    };
};
systemd.services.caddy.serviceConfig.EnvironmentFile = ["/path/to/.env.caddy"];
# /path/to/.env.caddy
CADDY_API_KEY=YOUR_KEY
CADDY_API_SECRET_KEY=YOUR_OTHER_KEY