about summary refs log tree commit diff
path: root/nixos/modules/services/web-servers/traefik.nix
diff options
context:
space:
mode:
authorSophie Tauchert <sophie@999eagle.moe>2023-03-05 00:12:06 +0100
committerSophie Tauchert <sophie@999eagle.moe>2023-04-25 16:05:28 +0200
commitd568766fc7512947dbb3576eda5e8e69b4d8547e (patch)
treedaefe045eba22a3b3ff7a8e7a3c76e15645f29ae /nixos/modules/services/web-servers/traefik.nix
parent67faa3e9b3e28190b5eadd0f133600e3aa677a50 (diff)
nixos/traefik: add environmentFiles option
Diffstat (limited to 'nixos/modules/services/web-servers/traefik.nix')
-rw-r--r--nixos/modules/services/web-servers/traefik.nix25
1 files changed, 23 insertions, 2 deletions
diff --git a/nixos/modules/services/web-servers/traefik.nix b/nixos/modules/services/web-servers/traefik.nix
index 9e5603e0edc33..42fb95a52200d 100644
--- a/nixos/modules/services/web-servers/traefik.nix
+++ b/nixos/modules/services/web-servers/traefik.nix
@@ -48,6 +48,11 @@ let
     ''
   else
     cfg.staticConfigFile;
+
+  finalStaticConfigFile =
+    if cfg.environmentFiles == []
+    then staticConfigFile
+    else "/run/traefik/config.toml";
 in {
   options.services.traefik = {
     enable = mkEnableOption (lib.mdDoc "Traefik web server");
@@ -127,6 +132,16 @@ in {
       type = types.package;
       description = lib.mdDoc "Traefik package to use.";
     };
+
+    environmentFiles = mkOption {
+      default = [];
+      type = types.listOf types.path;
+      example = [ "/run/secrets/traefik.env" ];
+      description = lib.mdDoc ''
+        Files to load as environment file. Environment variables from this file
+        will be substituted into the static configuration file using envsubst.
+      '';
+    };
   };
 
   config = mkIf cfg.enable {
@@ -139,8 +154,13 @@ in {
       startLimitIntervalSec = 86400;
       startLimitBurst = 5;
       serviceConfig = {
-        ExecStart =
-          "${cfg.package}/bin/traefik --configfile=${staticConfigFile}";
+        EnvironmentFile = cfg.environmentFiles;
+        ExecStartPre = lib.optional (cfg.environmentFiles != [])
+          (pkgs.writeShellScript "pre-start" ''
+            umask 077
+            ${pkgs.envsubst}/bin/envsubst -i "${staticConfigFile}" > "${finalStaticConfigFile}"
+          '');
+        ExecStart = "${cfg.package}/bin/traefik --configfile=${finalStaticConfigFile}";
         Type = "simple";
         User = "traefik";
         Group = cfg.group;
@@ -155,6 +175,7 @@ in {
         ProtectHome = true;
         ProtectSystem = "full";
         ReadWriteDirectories = cfg.dataDir;
+        RuntimeDirectory = "traefik";
       };
     };