Files

12 KiB

Secrets Map - Homelab

Dieses Dokument listet sensible Daten, deren Ablageorte und die vorgesehene Einbindungsart.

Grundregeln

  • Secrets liegen niemals im Git-Repository
  • Standardspeicherort ist /mnt/user/appdata/secrets/
  • dokumentierte Ausnahmen mit dienstspezifischen Pfaden sind erlaubt
  • Berechtigungen: chmod 600
  • Nutzung in Docker ueber _FILE, direkte Secret-Datei-Mounts oder Komodo Stack Environment Variables

Aktive Secrets

Service Secret Datei / Methode Status
Vaultwarden ADMIN_TOKEN /mnt/user/appdata/secrets/vaultwarden_admin_token.txt -> ADMIN_TOKEN_FILE aktiv
Vaultwarden SMTP Password /mnt/user/appdata/secrets/homelab_smtp_password.txt -> SMTP_PASSWORD_FILE fuer Einladungen/Benachrichtigungen aktiv
Traefik Cloudflare DNS API Token /mnt/user/appdata/traefik/secrets/cloudflare_dns_api_token -> Docker Secret cloudflare_dns_api_token aktiv
PostgreSQL 18 DB Password /mnt/user/appdata/secrets/postgres_password.txt -> POSTGRES_PASSWORD_FILE aktiv
Redis Passwort /mnt/user/appdata/secrets/redis_password.txt -> Datei-Mount + Startkommando in infra/redis/docker-compose.yml aktiv
Mealie DB Password /mnt/user/appdata/secrets/mealie_postgres_password.txt -> nicht versionierte Stack-.env ${MEALIE_POSTGRES_PASSWORD} -> POSTGRES_PASSWORD aktiv
mealie-postgres DB Password /mnt/user/appdata/secrets/mealie_postgres_password.txt -> POSTGRES_PASSWORD_FILE aktiv
Paperless-ngx DB Password Stack ENV ${PAPERLESS_DBPASS} aktiv
Paperless-ngx Redis URL Stack ENV ${PAPERLESS_REDIS} aktiv
Paperless-GPT OpenAI API Key Stack ENV ${OPENAI_API_KEY}; nicht im Repo, nicht in Logs aktiv
code-server Passwort /mnt/user/appdata/code-server/secrets/password -> FILE__PASSWORD aktiv
Filebrowser Admin Password /mnt/user/appdata/secrets/filebrowser_admin_password.txt -> initialisierte SQLite-DB aktiv
Immich (server) DB Password Stack ENV ${IMMICH_DB_PASSWORD} aktiv
immich-postgres DB Password /mnt/user/appdata/secrets/immich_postgres_password.txt -> POSTGRES_PASSWORD_FILE aktiv
mail-archiver DB Connection Stack ENV ${MAILARCHIVER_DB_CONNECTION} aktiv
mail-archiver Auth Password Stack ENV ${MAILARCHIVER_AUTH_PASSWORD} aktiv
Authelia JWT Secret /mnt/user/appdata/secrets/authelia_jwt_secret.txt -> AUTHELIA_JWT_SECRET_FILE aktiv
Authelia Session Secret /mnt/user/appdata/secrets/authelia_session_secret.txt -> AUTHELIA_SESSION_SECRET_FILE aktiv
Authelia SMTP Password /mnt/user/appdata/secrets/authelia_smtp_password.txt -> Host-Secret fuer SMTP-Notifier aktiv
Authelia Storage Encryption Key /mnt/user/appdata/secrets/authelia_storage_encryption_key.txt -> AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE aktiv
Authelia Postgres Password /mnt/user/appdata/secrets/authelia_postgres_password.txt -> AUTHELIA_STORAGE_POSTGRES_PASSWORD_FILE aktiv
Komodo Mongo Root Password /mnt/user/appdata/secrets/komodo_mongo_password.txt -> MONGO_INITDB_ROOT_PASSWORD_FILE aktiv
Komodo Core App Secrets Stack ENV ${KOMODO_SECRET_KEY}, ${KOMODO_WEBHOOK_SECRET}, ${KOMODO_JWT_SECRET}, ${KOMODO_MONGO_PASSWORD}, ${KOMODO_PERIPHERY_PASSKEY} aktiv
Gitea Push Mirror GitHub fine-grained PAT fuer michaelkaleschke-spec/homelab-infra Gitea Repository Mirror Settings, persistent in /mnt/user/services/gitea/data; kein Datei-Secret im Repo aktiv
Glance Community Widget API Tokens Stack ENV ${GLANCE_IMMICH_API_KEY}, ${GLANCE_ADGUARD_USERNAME}, ${GLANCE_ADGUARD_PASSWORD}, ${GLANCE_SPEEDTEST_API_KEY} aktiv
speedtest-tracker App Key / Admin-Zugang Stack ENV ${APP_KEY}, ${ADMIN_PASSWORD} aktiv
Nextcloud Admin User /mnt/user/appdata/secrets/nextcloud_admin_user.txt -> NEXTCLOUD_ADMIN_USER_FILE neu
Nextcloud Admin Password /mnt/user/appdata/secrets/nextcloud_admin_password.txt -> NEXTCLOUD_ADMIN_PASSWORD_FILE neu
nextcloud-postgres DB Password /mnt/user/appdata/secrets/nextcloud_postgres_password.txt -> POSTGRES_PASSWORD_FILE neu
Borg UI / Borg Admin-Login, SECRET_KEY, SSH-Keys, Repo-Credentials persistent unter /mnt/user/appdata/borg-ui/data/ aktiv
Borg Repo Borg-Passphrase fuer Restore-Tests und Notfallzugriff /mnt/user/appdata/secrets/borg_repo_passphrase.txt -> Host-Secret-Datei, nicht im Repo aktiv
Unraid Flash Backup Boot-/Array-/Share-/Plugin-Konfiguration, ggf. Hashes/Keys/Templates /mnt/user/backups/borg/dumps/latest/unraid-flash-config.tar.gz, via Borg/Hetzner gesichert aktiv; wie Secret-Material behandeln
Hermes Agent Provider-Keys, Bot-Tokens, API-Server-Key /mnt/user/appdata/hermes-agent/data/.env VM-seitig offen
Hermes Agent SSH-Runner Private Key /mnt/user/appdata/secrets/hermes_runner_id_ed25519 -> /root/.ssh/id_ed25519 VM-seitig offen
InfluxDB 3 Core Admin Token JSON /mnt/user/appdata/secrets/influxdb3_admin_token.json -> Docker Secret /run/secrets/influxdb3_admin_token aktiv
Monitoring Grafana Admin Password /mnt/user/appdata/secrets/monitoring_grafana_admin_password.txt -> Docker Secret /run/secrets/monitoring_grafana_admin_password -> GF_SECURITY_ADMIN_PASSWORD__FILE aktiv
Monitoring Grafana -> InfluxDB Datasource Token /mnt/user/appdata/secrets/monitoring_grafana_influxdb_token.txt -> Docker Secret /run/secrets/monitoring_grafana_influxdb_token aktiv
Home Assistant -> InfluxDB HA InfluxDB Token /homeassistant/secrets.yaml -> influxdb3_homeassistant_token geplant
Renovate Bot Gitea Service-Account PAT /mnt/user/appdata/secrets/renovate_token.txt -> Host-Datei (chmod 600), gelesen von ops/renovate/run-renovate.sh und an Renovate-Container als RENOVATE_TOKEN weitergegeben aktiv nach Operator-Setup (siehe docs/RENOVATE.md)

Historisch entfernte Secrets

Dienst Frueherer Secret-Pfad / Mechanismus Status
Gotify gotify_password.txt / GOTIFY_DEFAULTUSER_PASS_FILE Dienst nicht mehr aktiv
diun Stack ENV Container entfernt
Uptime Kuma uptime_kuma_admin_password.txt Dienst am 2026-05-25 entfernt; nur fuer Alt-Appdata/Archiv behalten
Grafana Altstand grafana_admin_password.txt, grafana_influxdb_token.txt Compose-Pfad aus aktivem Repo entfernt; nur fuer Git-Historie-/Rollback-Fall behalten

Pfadstruktur

/mnt/user/appdata/secrets/
|-- authelia_jwt_secret.txt
|-- authelia_postgres_password.txt
|-- authelia_session_secret.txt
|-- authelia_smtp_password.txt
|-- authelia_storage_encryption_key.txt
|-- immich_postgres_password.txt
|-- komodo_mongo_password.txt
|-- mealie_postgres_password.txt
|-- monitoring_grafana_admin_password.txt
|-- monitoring_grafana_influxdb_token.txt
|-- nextcloud_admin_password.txt
|-- nextcloud_admin_user.txt
|-- nextcloud_postgres_password.txt
|-- postgres_password.txt
|-- redis_password.txt
|-- borg_repo_passphrase.txt
|-- influxdb3_admin_token.json
|-- filebrowser_admin_password.txt
|-- homelab_smtp_password.txt
`-- vaultwarden_admin_token.txt

Weitere dokumentierte Secret-Pfade:

  • /mnt/user/appdata/code-server/secrets/password
  • /mnt/user/appdata/secrets/hermes_runner_id_ed25519
  • /mnt/user/appdata/traefik/secrets/cloudflare_dns_api_token
  • Borg UI verwaltet Session-Secret, Admin-Login, SSH-Keys und Repo-Credentials in seiner persistenten /data-Struktur. Diese Daten liegen nicht im Git, muessen aber gesichert werden.
  • Die Borg-Repo-Passphrase liegt zusaetzlich als Host-Secret-Datei fuer Restore-Tests und Notfallzugriff vor. Der Wert ist laut Operator-Bestaetigung vom 2026-05-26 offline gesichert; Ablageort und Wert werden nicht im Repo dokumentiert.
  • Gitea verwaltet den GitHub-Push-Mirror-PAT in den Repository-Mirror-Settings. Der Wert wird nicht dokumentiert und nicht in Dateien unter docs/ oder core/gitea/ geschrieben.
  • paperless-ngx ist eine bewusste Ausnahme: DB-Passwort und Redis-URL bleiben aktuell als Komodo Stack Environment Variables hinterlegt, um den stabil laufenden Produktionsstand nicht fuer eine reine Secret-Mechanik-Migration zu riskieren.

Stack-ENV-only Secrets - Restore-Wege

Einige Secrets liegen bewusst nur als Komodo Stack Environment Variables vor, weil das Image kein _FILE unterstuetzt oder ein laufender stabiler Produktionsstand nicht fuer eine reine Mechanik-Migration geopfert werden soll. Diese Werte existieren ausschliesslich an folgenden Stellen:

  1. Komodo Mongo (Runtime und Backup-Dump komodo-mongo.archive.gz unter /mnt/user/backups/borg/dumps/latest/).
  2. Externe Operator-Notiz (analoge Sicherung, vergleichbar mit der Borg-Passphrase).

Bei Komodo-Restore aus kaltem Zustand wird immer in dieser Reihenfolge gesucht. Konkrete Werte werden im Repo, in Logs, in Doku-Kommentaren und in ntfy-Meldungen niemals wiedergegeben.

Stacks und ihre Stack-ENV-only Secrets

Stack Stack-ENV-Variablen Restore-Quelle (Reihenfolge) Folgen bei Verlust aller Quellen
paperless-ngx PAPERLESS_DBPASS, PAPERLESS_REDIS Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz App-DB ist im Postgres-Cluster, Passwort muss in Postgres und Stack-ENV synchron neu gesetzt werden; Redis-URL ist deterministisch rekonstruierbar (Host, Port, Passwort), wenn Redis-Passwort-Datei vorliegt
paperless-gpt PAPERLESS_API_TOKEN, OPENAI_API_KEY Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz Paperless-Token kann in Paperless neu erzeugt werden; OpenAI-Key muss im OpenAI-Projekt rotiert/neu erstellt werden
immich-server IMMICH_DB_PASSWORD Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz analog Paperless: Postgres-User-Passwort in immich_postgres und Stack-ENV gemeinsam zuruecksetzen
mail-archiver MAILARCHIVER_DB_CONNECTION, MAILARCHIVER_AUTH_PASSWORD Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz DB-Connection-String enthaelt Postgres-Pass; App-Auth-Password fuer Web-UI
speedtest-tracker APP_KEY, ADMIN_PASSWORD Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz APP_KEY ist verschluesselungsrelevant; bei echtem Verlust App-State frisch initialisieren
komodo-core KOMODO_SECRET_KEY, KOMODO_WEBHOOK_SECRET, KOMODO_JWT_SECRET, KOMODO_MONGO_PASSWORD, KOMODO_PERIPHERY_PASSKEY Vaultwarden -> externe Notiz (Henne-Ei: Komodo-Mongo-Dump ist hier nicht Restore-Quelle, weil Komodo dafuer schon laufen muesste) siehe docs/SERVICES_RECOVERY.md Komodo-Bootstrap; ohne diese Werte ist der Self-Stack nicht reproduzierbar
hermes-agent HERMES_DASHBOARD_HOST plus Provider-/API-/Home-Assistant-Tokens in Host-.env Vaultwarden -> externe Notiz Stack ist aktuell geparkt (Review 2026-07-25); ohne Werte bleibt der Stack deaktiviert, kein Schaden am Rest
glance GLANCE_IMMICH_API_KEY, GLANCE_ADGUARD_USERNAME, GLANCE_ADGUARD_PASSWORD, GLANCE_SPEEDTEST_API_KEY Provider-UIs (Immich, AdGuard, Speedtest-Tracker) neu erzeugen rebuildbar; Widgets bleiben leer bis Tokens neu erzeugt sind, kein kritischer Datentopf

Komodo-Sonderfall

Komodos eigene Secrets (KOMODO_*) sind die kritischste Untermenge dieser Liste, weil sie nicht aus dem eigenen Mongo-Dump rekonstruierbar sind, solange Komodo nicht laeuft. Sie gehoeren entweder

  • in Vaultwarden (sobald Vaultwarden produktiv ist) und
  • in eine analoge Operator-Notiz neben der Borg-Passphrase.

Details und Bootstrap-Reihenfolge stehen in docs/SERVICES_RECOVERY.md und werden in docs/DISASTER_RECOVERY.md Abschnitt 6.2.1 als Pflicht-Pruefung vor Phase 4 Stufe 4 referenziert.


Regel

Wenn _FILE nicht unterstuetzt wird -> Stack Environment Variable in Komodo verwenden.

Secrets niemals direkt in die Compose-Datei schreiben.

Stack-ENV-Werte niemals im Repo, in Logs oder in Doku-Kommentaren ablegen — nur Variablennamen und Restore-Quellen.