Feature: Implement sops-nix for Traefik, send stacks:

- Init stack.nix files.
  - Delete .env files, move into stack.nix.
  - Rotate traefik's secrets.env.
This commit is contained in:
Joey Hafner 2025-01-30 15:02:34 -08:00
parent 83028ffd79
commit 7d506a74fd
Signed by: Jafner
GPG Key ID: 6D9A24EF2F389E55
6 changed files with 60 additions and 54 deletions

View File

@ -1 +0,0 @@
DOCKER_DATA=/mnt/iscsi/barbarian/send

View File

@ -0,0 +1,16 @@
{ sys, ... }: let stack = "send"; in {
home-manager.users."${sys.username}".home.file = {
"${stack}" = {
enable = true;
recursive = true;
source = ./.;
target = "stacks/${stack}/";
};
"${stack}/.env" = {
enable = true;
text = ''DOCKER_DATA=${sys.dockerData}'';
target = "stacks/${stack}/.env";
};
};
#home-manager.users."${sys.username}".systemd.user.services."${stack}" = {};
}

View File

@ -1 +0,0 @@
DOCKER_DATA=/home/admin/data/traefik

View File

@ -18,7 +18,7 @@ services:
- $DOCKER_DATA/acme.json:/acme.json - $DOCKER_DATA/acme.json:/acme.json
- $DOCKER_DATA/acme-dns01.json:/acme-dns01.json - $DOCKER_DATA/acme-dns01.json:/acme-dns01.json
env_file: env_file:
- path: ./secrets.env - path: /run/secrets/traefik
required: true required: true
networks: networks:

View File

@ -1,60 +1,22 @@
{ {
"CLOUDFLARE_DNS_API_TOKEN": "ENC[AES256_GCM,data:SzH8xKkDNnFkuTTTnxZL25lett7w6xzA16UXEKHhIDCU5exOQ8pUBQ==,iv:ADAVsoUNfDXlCS3dP9uMWRzhJhnnB3sv3mpxW2+Qhug=,tag:Xe9Nr0/3iCp5cZd6P4XX7A==,type:str]", "CLOUDFLARE_DNS_API_TOKEN": "ENC[AES256_GCM,data:DYBR3w6UEypTD1gjnH7033bXI6IBDYtaQjd11VyyjkikYKRo8Cc1vA==,iv:q/5ET+wiXj67DyV7JSZzkth3Tkbbuhq71UPSedL1aHA=,tag:fRTIiV8YcBnktd+KKpAVtA==,type:str]",
"sops": { "sops": {
"shamir_threshold": 2,
"key_groups": [
{
"hc_vault": null,
"age": [
{
"recipient": "age1zswcq6t5wl8spr3g2wpxhxukjklngcav0vw8py0jnfkqd2jm2ypq53ga00",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzUmdKYmlhQklLbHNTNVZH\nUGxEWDcycDh2WUUxUlhOaEdvWi9LaTdpNFJnCm9QRzRLbVJyNzcvSUlzMjJSbElV\nZ0dZNC8yc2VJZ1d2Q0JQRHdjYXZyYncKLS0tIDFhY0k2eGd0YVBZS1JzOW54cTV0\nUHdHdVFpYy95OUdXdEcwSWNlUUZxdGsKNn0yEjupv/F87C1PuFAUcUPIOrD4ofmP\nHPW2KKLYRETT/DdVvgeKSOY1BaFcsp4Yq8qtSQwuM6fE3TLc6VSC0bw=\n-----END AGE ENCRYPTED FILE-----\n"
}
]
},
{
"hc_vault": null,
"age": [
{
"recipient": "age1zswcq6t5wl8spr3g2wpxhxukjklngcav0vw8py0jnfkqd2jm2ypq53ga00",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFRnJnaHFIVGp1dnVndExk\na3gxZFNMUHQ2VC9UQ09JZDNNa0M5d1JWRHdZCldVWVl4RWMvdFRBTlBEYmI5YlZ1\nME1ySnhFYmRCOE1SeGxaWnpvYWJIZ1EKLS0tIGRiMmJacmI5Ly94TVJHU0NrNGQx\naFdva3F3alJWczhoM1p2QjJKMTdBRUkKBipt8gcSIHIyDztXlZUMLtnRCs9tCx5e\nNGVceOAKz/7bNrBZGktDcXhZhRYCRGe+N/nsJv9ZXIe6PCfqPzZZAXI=\n-----END AGE ENCRYPTED FILE-----\n"
}
]
},
{
"hc_vault": null,
"age": [
{
"recipient": "age193t908fjxl8ekl77p5xqnpj4xmw3y0khvyzlrw22hdzjduk6l53q05spq3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxdmdGUTY5Mlpjb1J6Lzd3\nczBHSmVuLzV1SHBlOUxUaTd3NkZtMTdNU3dNCkZ2dTBCQzlSV1NxYnNxYlJuZHlr\nRzdGNVRXeXRIbi9uOHJZZXBmd3pXSkkKLS0tIDl6ejJzTUNNSE5rWW1sZXNEVi9R\nTTBWVmZoZnkwbEdKSmVDOFd4dFM4dE0KlzV3ZFPhboBAaO9BasR8+YaYsTOJwdvJ\nPVU68jqTyXXJ2gp27GafUFeAXbriEUH4W2PTUbn2TePdPYubLFeV8I0=\n-----END AGE ENCRYPTED FILE-----\n"
}
]
},
{
"hc_vault": null,
"age": [
{
"recipient": "age13prhyye2jy3ysa6ltnjgkrqtxrxgs0035d86jyn4ltgk3wxtqgrqgav855",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzK0c4TitEVFNLSUtTR3hi\nM2pCMHEvWng1ZnB5c3U0UGNUN1dQSXMwZ2pFCllqRG9GQTJwbDZ5WHhpMkRDN0NZ\nVHRKUElySjd2dHZaSlViRWtEeS85WTgKLS0tIHJpVnM3azJzalp0cG96a3JESVZs\nbWVZbURIR1B1ajlrRFJ4UThuSk56S00KKystxd83yLUM6TGrN5Z7Oh7yFvx479DJ\nFWlc306/LRGUooopc1GNidokk6DKybumTxbwUcHmgc3DlgJrhG4Mv04=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1n20krynrj75jqfy2muvhrygvzd4ee8ngamljqavsrk033zwx0ses2tdtfe",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6NHhUMTFUYTlzaFU3c1F4\neHZSTXhmbFpNNmZKWm0rQk1XdTllZ1EyeDM4CnBDRkZxRENOcDdjR0dRS1B4OTU1\naVd6eG9aTXQ0aFlhK1czdklDZm9Pak0KLS0tIHBrbU1lNjhkMlNhSCt0Qk1mWlho\nV2JRVmZqbTRkNXNkeWlvM0FzdVUzRWcKVtmlpyVvQSObTIg+Ih4rQ56lEFMVAVK1\nK2TJPMICIMzY+7qjpn5JqNvteVkgYEvSgEzspc5e5MqX65mOjVevrKo=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1m0jpnk4t7hph5tdva3y9ap7scl8vfly9ufazr0h3cuwpcytlsulqjrt58y",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaQTQ1TnNJUDhrbmJRblFU\nV1FNSXQ5eFBMWjRKQmxqaG5KTGJQTWdaalI4CjM1aElKbjdsV0x1QTdiTnhHRUpp\nemJMR09jUmtSYWJqUmRHZzU3ZTJJSlEKLS0tIGFScUdvYkZ0R0lHRHh6SnRNTERN\nODc2MXFLMGtUb2VXamljU0pIdGt0Z2MKzjgZ4YR7nOKvGoXHvI9CaYGENd0Rlh9Q\nz0zbCNMY0s2boNiYA5B1xgs/JHgRoOAqTYJI6+PtVGO19VH8d9NSksc=\n-----END AGE ENCRYPTED FILE-----\n"
}
]
}
],
"kms": null, "kms": null,
"gcp_kms": null, "gcp_kms": null,
"azure_kv": null, "azure_kv": null,
"hc_vault": null, "hc_vault": null,
"age": null, "age": [
"lastmodified": "2025-01-27T07:51:11Z", {
"mac": "ENC[AES256_GCM,data:k65tv1ICZgoEWYsvU3RJaTWjlfkWCmop85kmolJTDJ9IaQUifooVdXGcCPyyFWbKoOrT/GxZony6Atr1DTAorauc+6iG8KUQq25WmM2eIMB8uPpqcoWeJazMwoxc+6l43iWwIrrV3tYiiQQSoEgssAp+EQaQx63IQqI/1blyq0s=,iv:sgK6aWS2j3qQQaKD3z2/Ym1+9N4tcVTITW+7rzoM/kY=,tag:4Z7Clv8cBDjAyHE8b3+fYw==,type:str]", "recipient": "age1v5wy7epv5mm8ddf3cfv8m0e9w4s693dw7djpuytz9td8ycha5f0sv2se9n",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyU01POWhYTUFZYzM5MVQ2\nV1hGS2Q3dER5ZjBFWWlpL08zalM3ek9BSzNNClFhK2tsWVY2dVJKYUllaWIyKzlx\nd0YxbDI5WFVGdWVmbmlONEoydGhHWnMKLS0tIE1uV3Ztb1Fnb0pWQlJkcHhGdUU1\nMWVYdHpISGNkRlJyVnNSdnlGR0NkdXcK0I2RYSAFcfjeoCyU7sx+KtZGrczfReBc\n/fvfWx9CrA1BgCV7OPgYrF/ewzYNY2ZNBzFGuiHnCzNGyXcf+ec9xw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1zswcq6t5wl8spr3g2wpxhxukjklngcav0vw8py0jnfkqd2jm2ypq53ga00",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMK1Uvc0ZJTXpRNTZwQ29D\nOTRSblJTc3pPRTdVUG8yMFl3UWFiUUhOWEVJCmhUdHNsM1RtRUlKNUNtZHgyZU5u\nZlpYNUd2ck1NSkJ3OEVneUZwenFEb1EKLS0tIFN2R3ROaDMvUENlK3U1ZFhQb29B\nL09xV1IvKy9pbW1RNHZqL3RFQThSRzAK3GyvcjCiIBOCKpZgZ2DReVBatY3/jYRl\nuXm7PyGM8JH9EeVfKlHxVtBJ0mWN2gfqIu7t8sn70y1x95Hr3GTEvw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-01-30T21:36:05Z",
"mac": "ENC[AES256_GCM,data:RFlLGMrLm7vwGXiApW5ba7snC8mF0gfElHCyDVQLCeJMfR0Y/CqMXY7zEIsOo7xA60Fa6DrXMu9ZCm17yErNh8PhucZfdhYGR/VwP0Nl5ouyleh2CF2o9gwptPMnhFJHndCLdqmaJLNYk7ncktrsbxX642jFw9UBehiWad8+xWM=,iv:Cj7oxW9rRKaIv923cNZVgeaKw40gXjjuxCgdImBxMX8=,tag:WC6F/K8UucFYLo0/7/6nWQ==,type:str]",
"pgp": null, "pgp": null,
"unencrypted_suffix": "_unencrypted", "unencrypted_suffix": "_unencrypted",
"version": "3.9.2" "version": "3.9.2"

View File

@ -0,0 +1,30 @@
{ sys, inputs, ... }: let stack = "traefik"; in {
home-manager.users."${sys.username}".home.file = {
"${stack}" = {
enable = true;
recursive = true;
source = ./.;
target = "stacks/${stack}/";
};
"${stack}/.env" = {
enable = true;
text = ''DOCKER_DATA=${sys.dockerData}'';
target = "stacks/${stack}/.env";
};
};
imports = [ inputs.sops-nix.nixosModules.sops ];
sops.secrets."${stack}" = {
sopsFile = ./secrets.env;
key = "";
mode = "0440";
owner = sys.username;
# Access this secrets file in Nix expressions via:
# config.sops.secrets.traefik.path
# Or in sops-nix templates via:
# config.sops.placeholder.traefik.path
# Or in the shell via:
# cat /run/secrets/traefik
};
#home-manager.users."${sys.username}".systemd.user.services."${stack}" = {};
}