Root-.env-Referenz (Secrets-Inventar + Ops-Wissen)
Zweck dieser Doku: Die Repo-Wurzel-
.env(gitignored) trägt 25 Secrets alsNAME=WERTplus denFOUNDATION_KEY-Handeintrag. Bisher stand das Betriebs-Wissen (Generierung, „niemals rotieren"-Warnungen, Restore-Pflichten) nur als Kommentare in der.envselbst. Mit der Foundation-Secrets-Naht (FOUND-13/14) wird die.envzur bloßen Materialisierung des Vaults — undsecrets-pull.sh --writeregeneriert sie sortiert + kommentarfrei. Damit dieses Wissen den Cutover überlebt, ist es hier festgehalten.Niemals Werte hier eintragen — nur Namen + Bedeutung. Quelle der Wahrheit für die Werte ist nach dem Cutover der Foundation-Vault (
naht-secrets.md).
Verwandt: Naht-Vertrag Secrets (Foundation-Repo) · Off-Site-Backup-Runbook.
Secrets-Inventar (25 + Handeintrag)
Domain & TLS
DOMAIN— Basis-Domain (silverscale.dennisfisch.de). Wird in Compose + OIDC-Redirect referenziert.LETSENCRYPT_EMAIL— Kontakt für Let's-Encrypt-Benachrichtigungen.CLOUDFLARE_DNS_API_TOKEN— Cloudflare-Token mitZone:DNS:Editaufdennisfisch.defür die DNS-01-Challenge (Traefik). Erzeugen: https://dash.cloudflare.com/profile/api-tokens.
Pocket ID (OIDC) — wird beim ersten Start initialisiert
POCKET_ID_URL— Issuer-URL der Pocket-ID-Instanz.POCKET_ID_ENCRYPTION_KEY— ⚠️ NIEMALS ROTIEREN (CLAUDE.md). Pflicht, 32-Byte-Random. Erzeugen:openssl rand -base64 32.OIDC_CLIENT_ID— in Pocket ID unter Applications anlegen, Redirect-URI =https://${DOMAIN}/(mit trailing slash), Client-Type: Public (PKCE).
VAPID — Web Push (iOS-PWA-Benachrichtigungen, ADR-17)
VAPID_PUBLIC_KEY,VAPID_PRIVATE_KEY,VAPID_SUBJECT— einmalig generieren mit:cd services && mvn -pl web-api -q package -DskipTests java -cp web-api/target/web-api-*.jar \ de.dennisfisch.silverscale.webapi.config.VapidKeyGen
KI (OpenRouter, ADR-37)
OPENROUTER_API_KEY— Key für alternative AI zuclaude -p(Bild-KI Nano Banana 2, ai_jobs-Fallback).SUMMARY_MODEL— Modell-ID für Zusammenfassungs-Jobs.
Interner Zugriff
INTERNAL_API_TOKEN— Host-Worker (ai_jobs, dish_ai, Cron-curls) umgehen damit die OIDC-Auth (X-Internal-Token). Mehrere Cron-Jobs lesen ihn direkt pergrep "^INTERNAL_API_TOKEN=" .env— der Name muss erhalten bleiben.
eGYM
EGYM_CRED_KEY— Fernet-Key zur Entschlüsselung des DB-abgelegten eGYM-Passworts (egym.pyliest ihn nur, schreibt nie). ⚠️ Niemals rotieren ohne Re-Login der Profile — sonst sind diecreds.encnicht mehr lesbar.
APNs (Bestell-Liste B1.1, Token-based Push)
APNS_TEAM_ID,APNS_KEY_ID,APNS_KEY_PATH— Team-Scoped Auth-Key. Die.p8-Datei liegt gitignored unterapp/data/apns/(in den Container gemountet); nur IDs/Pfad stehen in der.env.
Agent-Bus & PM
BUS_TOKEN— Scoped Token NUR für den Agent-Bus (/api/bus*); darf auf den Mac (least privilege).BUS_PEER_WAKE_URL— Wake-Ping-Ziel: MacClaudes/wake-Listener.PLANE_API_TOKEN,PLANE_API_BASE,PLANE_WORKSPACE— Plane-PM (pm.sh). (Der rotierendePLANE_COOKIEliegt NICHT hier, sondern inapp/pm/.env— eigener Scope.)POCKET_ID_API_KEY— API-Key gegen die Pocket-ID-Instanz.
Off-Site-Backup (SILV-185)
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY— bestehende HiDrive-S3-Creds (Strato).RESTIC_PASSWORD— restic-Repo-Passwort (neu generiert 11.06.). ⚠️ MUSS zusätzlich off-VPS liegen (Dennis' Passwort-Manager) — sonst bei VPS-Tod kein Restore.backrestexpandiert${VAR}aus dieser Env (nicht im Passwort-Feld selbst, s. Backup-Runbook).
Foundation-Naht (Handeintrag)
FOUNDATION_KEY— der EINE Handeintrag der Domäne (FOUND-13). Bearer gegen den Foundation-Secrets-Broker (127.0.0.1:8400). Bleibt bei--writeerhalten, wird nie aus dem Vault materialisiert. Rotation: Terra-Revier.
Selbst-rotierende Werte (NICHT im Root-.env)
Wichtig für die Foundation-Naht: Die Root-.env enthält 0 selbst-rotierende
Secrets (alle 25 sind statisch — verifiziert FOUND-14, kein Code-Pfad schreibt
in die Root-.env). Die rotierenden Werte liegen in separaten, eigenen
Scopes und werden erst beim jeweiligen Onboarding gevaultet (Push-Naht
secrets-push.sh, FOUND-15):
| Scope (Datei) | Rotierende Werte | Schreiber |
|---|---|---|
lidl-grocy/.env |
LIDL_REFRESH_TOKEN, LIDL_PKCE_VERIFIER |
lidl.py:_write_env |
app/data/hf-refresh-token.txt |
HelloFresh-Refresh-Token (ADR-22) | hellofresh.py |
app/pm/.env |
PLANE_COOKIE (SILV-171) |
pm.py:_write_env_cookie |
Deshalb ist der Root---write-Cutover ohne Push-Verdrahtung sicher: kein
Preflight kann hier einen frisch rotierten Wert überschreiben.