Add access to traefik dashboard with basic auth
This commit is contained in:
parent
377c7dd09a
commit
4343a3d231
4 changed files with 38 additions and 5 deletions
8
flake.lock
generated
8
flake.lock
generated
|
|
@ -476,11 +476,11 @@
|
||||||
"secrets": {
|
"secrets": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1781738124,
|
"lastModified": 1784411728,
|
||||||
"narHash": "sha256-fff++SWoSeZJk9wwns/XzCHGU5ZOTDie821At68gH9I=",
|
"narHash": "sha256-gC9WWL9FBGG2wm+cmeeYLuHmhfaj7Py15iSkKkeSWLE=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "fdf7619e52d6bea25224f19da87b6946a6f23cf7",
|
"rev": "2cf90c5c7ad4d13f2116ae7e77febfe64b717850",
|
||||||
"revCount": 41,
|
"revCount": 42,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "ssh://git@git.jfreudenberger.de/JuliusFreudenberger/nix-private.git"
|
"url": "ssh://git@git.jfreudenberger.de/JuliusFreudenberger/nix-private.git"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
services = {
|
services = {
|
||||||
traefik-docker = {
|
traefik-docker = {
|
||||||
enable = true;
|
enable = true;
|
||||||
dashboardUrl = "traefik.netbird.jfreudenberger.de";
|
dashboardUrl = "traefik.srv03.jfreudenberger.de";
|
||||||
dnsChallengeProvider = "inwx";
|
dnsChallengeProvider = "inwx";
|
||||||
dnsSecrets = [
|
dnsSecrets = [
|
||||||
config.age.secrets.inwx
|
config.age.secrets.inwx
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,6 @@
|
||||||
pocket-id.file = "${inputs.secrets}/secrets/srv03/pocket-id";
|
pocket-id.file = "${inputs.secrets}/secrets/srv03/pocket-id";
|
||||||
netbird-server.file = "${inputs.secrets}/secrets/srv03/netbird-server";
|
netbird-server.file = "${inputs.secrets}/secrets/srv03/netbird-server";
|
||||||
netbird-proxy.file = "${inputs.secrets}/secrets/srv03/netbird-proxy";
|
netbird-proxy.file = "${inputs.secrets}/secrets/srv03/netbird-proxy";
|
||||||
|
traefik-basic-auth.file = "${inputs.secrets}/secrets/srv03/traefik-basic-auth";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,13 @@ in {
|
||||||
"traefik"
|
"traefik"
|
||||||
"docker-socket"
|
"docker-socket"
|
||||||
];
|
];
|
||||||
|
labels = {
|
||||||
|
"traefik.enable" = "true";
|
||||||
|
"traefik.http.routers.dashboard.rule" = "Host(`${cfg.dashboardUrl}`)";
|
||||||
|
"traefik.http.routers.dashboard.entrypoints" = "websecure";
|
||||||
|
"traefik.http.routers.dashboard.service" = "api@internal";
|
||||||
|
"traefik.http.routers.dashboard.middlewares" = "auth@file";
|
||||||
|
};
|
||||||
environmentFiles = lib.forEach cfg.dnsSecrets (secret: secret.path);
|
environmentFiles = lib.forEach cfg.dnsSecrets (secret: secret.path);
|
||||||
volumes = let
|
volumes = let
|
||||||
traefik-providers-config = (pkgs.formats.yaml {}).generate "traefik-providers-config" {
|
traefik-providers-config = (pkgs.formats.yaml {}).generate "traefik-providers-config" {
|
||||||
|
|
@ -72,6 +79,7 @@ in {
|
||||||
in [
|
in [
|
||||||
"/var/run/docker.sock:/var/run/docker.sock"
|
"/var/run/docker.sock:/var/run/docker.sock"
|
||||||
"${traefik-providers-config}:/dynamic-config/providers.yaml:ro"
|
"${traefik-providers-config}:/dynamic-config/providers.yaml:ro"
|
||||||
|
"/run/traefik/basicAuth.yaml:/dynamic-config/basicAuth.yaml:ro"
|
||||||
];
|
];
|
||||||
extraOptions = [
|
extraOptions = [
|
||||||
''--mount=type=volume,source=certs,target=/certs,volume-driver=local''
|
''--mount=type=volume,source=certs,target=/certs,volume-driver=local''
|
||||||
|
|
@ -110,6 +118,30 @@ in {
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.services.generate-traefik-config = {
|
||||||
|
description = "Generate Traefik basic auth config";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
before = [ "docker-traefik.service" ];
|
||||||
|
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
set -eu
|
||||||
|
mkdir -p /run/traefik
|
||||||
|
|
||||||
|
BASIC_AUTH="$(cat ${config.age.secrets.traefik-basic-auth.path})"
|
||||||
|
|
||||||
|
cat > /run/traefik/basicAuth.yaml <<EOF
|
||||||
|
http:
|
||||||
|
middlewares:
|
||||||
|
auth:
|
||||||
|
basicAuth:
|
||||||
|
users:
|
||||||
|
- "$BASIC_AUTH"
|
||||||
|
EOF
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
systemd.services."docker-network-traefik" = {
|
systemd.services."docker-network-traefik" = {
|
||||||
path = [ pkgs.docker_29 ];
|
path = [ pkgs.docker_29 ];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue