From c736aadf1e1527361b4d05a280643a0f3ce12134 Mon Sep 17 00:00:00 2001 From: Micha Date: Thu, 30 Apr 2026 11:27:06 +0200 Subject: [PATCH] Use file secret for Grafana InfluxDB token Use file secret for Grafana InfluxDB token --- docs/MIGRATION_LOG.md | 2 +- docs/RESTORE_MATRIX.md | 2 +- docs/ROLLBACK.md | 2 +- docs/SECRETS_MAP.md | 3 ++- ops/grafana-influxdb/README.md | 7 ++++++- ops/grafana-influxdb/docker-compose.yml | 8 +++++++- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/docs/MIGRATION_LOG.md b/docs/MIGRATION_LOG.md index ec5e1ba..86fb19c 100644 --- a/docs/MIGRATION_LOG.md +++ b/docs/MIGRATION_LOG.md @@ -74,7 +74,7 @@ Dieses Dokument ist nur noch ein historischer Verlauf. Der aktuelle operative Ab - `ops/grafana-influxdb` als neuer Monitoring-Stack vorbereitet, aber noch nicht deployed. - Grafana wird hinter Traefik + Authelia unter `grafana.kaleschke.info` geplant. - InfluxDB 3 Core bleibt intern im Compose-Netz und wird ueber eine provisionierte Grafana-Datenquelle angebunden. -- Secrets fuer Grafana-Admin-Passwort, InfluxDB-Admin-Token und Grafana-Datasource-Token sind dokumentiert, aber muessen vor dem ersten Deploy auf dem Host bzw. in Komodo angelegt werden. +- Secrets fuer Grafana-Admin-Passwort, InfluxDB-Admin-Token und Grafana-Datasource-Token sind als Host-Dateien unter `/mnt/user/appdata/secrets/` dokumentiert und muessen vor dem ersten Deploy angelegt werden. --- diff --git a/docs/RESTORE_MATRIX.md b/docs/RESTORE_MATRIX.md index c3b8710..262c980 100644 --- a/docs/RESTORE_MATRIX.md +++ b/docs/RESTORE_MATRIX.md @@ -65,7 +65,7 @@ Sie ist die fachliche Ergaenzung zu `docs/DISASTER_RECOVERY.md`. | Scrutiny | Teilweise rebuildbar | `/mnt/user/appdata/scrutiny` falls gewuenscht | InfluxDB bewusst nicht Teil des Critical-Scope | keine | Traefik, Authelia | UI startet, Laufwerke sichtbar | | Speedtest Tracker | Share | `/mnt/user/appdata/speedtest-tracker/config` | SQLite im App-Pfad | `APP_KEY`, `ADMIN_PASSWORD` | Traefik, Authelia | UI startet | | BentoPDF | Rebuildbar | keine kritische Persistenz; alte Stirling-PDF-Daten unter `/mnt/user/appdata/stirling-pdf` bis zur Abnahme behalten | keine | keine separaten Secret-Dateien dokumentiert | Traefik, Authelia | UI startet, PDF-Tools verfuegbar, Office-Konvertierung ueber HTTPS funktioniert | -| Grafana | Share | `/mnt/user/appdata/grafana` | SQLite im App-Pfad | `grafana_admin_password.txt`, `GRAFANA_INFLUXDB_TOKEN` | Traefik, Authelia, InfluxDB 3 Core | UI startet, InfluxDB-Datenquelle testet erfolgreich | +| Grafana | Share | `/mnt/user/appdata/grafana` | SQLite im App-Pfad | `grafana_admin_password.txt`, `grafana_influxdb_token.txt` | Traefik, Authelia, InfluxDB 3 Core | UI startet, InfluxDB-Datenquelle testet erfolgreich | | InfluxDB 3 Core | Share | `/mnt/user/appdata/influxdb3/data`, `/mnt/user/appdata/influxdb3/plugins` | dateibasierter Object Store | `influxdb3_admin_token.json` | internes `grafana_influx_internal` Netz | `homelab`-Datenbank vorhanden, Grafana kann SQL-Abfrage ausfuehren | | ddns-updater | Rebuildbar | geringe Persistenzrelevanz | keine | Provider-Zugang ueber Stack ENV | Internetzugang | Update-Job laeuft | diff --git a/docs/ROLLBACK.md b/docs/ROLLBACK.md index aee4c03..ba417d0 100644 --- a/docs/ROLLBACK.md +++ b/docs/ROLLBACK.md @@ -91,7 +91,7 @@ Nach einem Deploy: 1. `ops/grafana-influxdb` in Komodo stoppen oder den letzten Git-Stand ohne diesen Stack deployen 2. Persistenz unter `/mnt/user/appdata/grafana` und `/mnt/user/appdata/influxdb3` unangetastet lassen -3. Secrets unter `/mnt/user/appdata/secrets/grafana_admin_password.txt` und `/mnt/user/appdata/secrets/influxdb3_admin_token.json` nur nach bewusstem Entscheid entfernen +3. Secrets unter `/mnt/user/appdata/secrets/grafana_admin_password.txt`, `/mnt/user/appdata/secrets/grafana_influxdb_token.txt` und `/mnt/user/appdata/secrets/influxdb3_admin_token.json` nur nach bewusstem Entscheid entfernen 4. Grafana-Domain und InfluxDB-Zugriff testen, bis klar ist, dass keine produktiven Dashboards oder Writer mehr davon abhaengen --- diff --git a/docs/SECRETS_MAP.md b/docs/SECRETS_MAP.md index 64b64ac..aa5d4d0 100644 --- a/docs/SECRETS_MAP.md +++ b/docs/SECRETS_MAP.md @@ -45,7 +45,7 @@ Dieses Dokument listet sensible Daten, deren Ablageorte und die vorgesehene Einb | Hermes Agent | SSH-Runner Private Key | `/mnt/user/appdata/secrets/hermes_runner_id_ed25519` -> `/root/.ssh/id_ed25519` | neu | | Grafana | Admin Password | `/mnt/user/appdata/secrets/grafana_admin_password.txt` -> `GF_SECURITY_ADMIN_PASSWORD__FILE` | vorbereitet | | InfluxDB 3 Core | Admin Token JSON | `/mnt/user/appdata/secrets/influxdb3_admin_token.json` -> Docker Secret `/run/secrets/influxdb3_admin_token` | vorbereitet | -| Grafana -> InfluxDB | Datasource Token | Stack ENV `${GRAFANA_INFLUXDB_TOKEN}` | vorbereitet | +| Grafana -> InfluxDB | Datasource Token | `/mnt/user/appdata/secrets/grafana_influxdb_token.txt` -> Docker Secret `/run/secrets/grafana_influxdb_token` | vorbereitet | --- @@ -75,6 +75,7 @@ Dieses Dokument listet sensible Daten, deren Ablageorte und die vorgesehene Einb |-- postgres_password.txt |-- redis_password.txt |-- grafana_admin_password.txt +|-- grafana_influxdb_token.txt |-- influxdb3_admin_token.json `-- vaultwarden_admin_token.txt ``` diff --git a/ops/grafana-influxdb/README.md b/ops/grafana-influxdb/README.md index 3517e0e..10b7492 100644 --- a/ops/grafana-influxdb/README.md +++ b/ops/grafana-influxdb/README.md @@ -9,6 +9,7 @@ Vorbereiteter Monitoring-Stack. Noch nicht deployen, bis die Secrets und der ers - Grafana wird ueber Traefik + `authelia@file,secure-headers@file` unter `grafana.kaleschke.info` veroeffentlicht. - InfluxDB bleibt ohne direkten Host-Port und ohne Traefik-Route im internen Compose-Netz `grafana_influx_internal`. - Grafana provisioning legt eine SQL-Datenquelle fuer InfluxDB 3 Core mit der Datenbank `homelab` an. +- Der Grafana-Datasource-Token liegt als Secret-Datei auf dem Host und wird beim Containerstart nur containerintern in die fuer Grafana-Provisioning noetige Environment-Variable geladen. ## Vor dem ersten Deploy @@ -30,7 +31,11 @@ Vorbereiteter Monitoring-Stack. Noch nicht deployen, bis die Secrets und der ers Pfad: `/mnt/user/appdata/secrets/influxdb3_admin_token.json`, Rechte `600`. -3. In Komodo fuer den Stack `GRAFANA_INFLUXDB_TOKEN` setzen. Fuer den Start kann das derselbe Token aus `influxdb3_admin_token.json` sein; sauberer ist spaeter ein eigener Read-Token fuer Grafana. +3. Grafana-Datasource-Token anlegen. Fuer den ersten Start kann der Token aus `influxdb3_admin_token.json` verwendet werden; sobald ein eingeschraenkter Read-Token existiert, diesen hier eintragen: + + ```bash + install -m 600 /dev/null /mnt/user/appdata/secrets/grafana_influxdb_token.txt + ``` 4. Nach dem ersten Start die Datenbank anlegen: diff --git a/ops/grafana-influxdb/docker-compose.yml b/ops/grafana-influxdb/docker-compose.yml index c13b887..f02b153 100644 --- a/ops/grafana-influxdb/docker-compose.yml +++ b/ops/grafana-influxdb/docker-compose.yml @@ -9,12 +9,16 @@ services: GF_SECURITY_ADMIN_PASSWORD__FILE: /run/secrets/grafana_admin_password GF_USERS_ALLOW_SIGN_UP: "false" GF_AUTH_ANONYMOUS_ENABLED: "false" - GRAFANA_INFLUXDB_TOKEN: ${GRAFANA_INFLUXDB_TOKEN} + entrypoint: ["/bin/sh", "-ec"] + command: > + export GRAFANA_INFLUXDB_TOKEN="$$(cat /run/secrets/grafana_influxdb_token)" + && exec /run.sh volumes: - /mnt/user/appdata/grafana:/var/lib/grafana - ./provisioning:/etc/grafana/provisioning:ro secrets: - grafana_admin_password + - grafana_influxdb_token networks: - frontend_net - grafana_influx_internal @@ -63,6 +67,8 @@ secrets: file: /mnt/user/appdata/secrets/grafana_admin_password.txt influxdb3_admin_token: file: /mnt/user/appdata/secrets/influxdb3_admin_token.json + grafana_influxdb_token: + file: /mnt/user/appdata/secrets/grafana_influxdb_token.txt networks: frontend_net: