Files
homelab-infra/ops/restore-tests/authelia-runbook.md
T

4.1 KiB

Authelia Restore Runbook

Status

Skript und Test-Compose sind als Scaffold abgelegt. Erstlauf steht noch aus und braucht Operator-Freigabe. Authelia ist Tier-1-kritisch, deshalb startet dieser Test bewusst konservativ: Smoke-Test prueft nur Config-Validate + HTTP-Health, kein vollstaendiger Auth-Flow.

Vorbedingungen

  • Borg-Quelle ist verfuegbar
  • borg-ui-Container laeuft
  • Borg-Passphrase-Datei vorhanden: /mnt/user/appdata/secrets/borg_repo_passphrase.txt
  • borg-ui mountet die Passphrase im Container als /local/secrets/borg_repo_passphrase.txt
  • aktuelles Borg-Archiv enthaelt local/appdata/authelia/config
  • optional: local/borg-dumps/latest/postgresql17-authelia.dump
  • Testpfade unter /mnt/user/backups/restore-lab/ und /mnt/user/backups/restore-reports/ sind freigegeben
  • Port 127.0.0.1:19091 frei
  • freier Speicher unter /mnt/user/backups/restore-lab/authelia (~200 MB reichen)

Bestaetigter Host-Stand (Soll)

  • produktiver Authelia-Container: authelia mit Image authelia/authelia:4.39.20@sha256:1b363e9279e742397966333f364e0876ae02bf5c876de73e83af6d48c57ff51b
  • produktiver Config-Pfad: /mnt/user/appdata/authelia/config
  • produktive Secrets: /mnt/user/appdata/secrets/authelia_*.txt (werden vom Test nicht gebraucht)
  • produktive Storage: shared PostgreSQL 18 (wird vom Test nicht angesprochen)

Erster Lauf - trockene Variante

bash /mnt/user/services/homelab-infra/ops/restore-tests/authelia-restore-test.sh --what-if

Erwartete Ausgabe: nur Plan-Output, kein Docker-Start, kein Borg-Extract.

Erster Lauf - echter Test (Operator-freigegeben)

bash /mnt/user/services/homelab-infra/ops/restore-tests/authelia-restore-test.sh --keep-data

Bei Erfolg:

  • Report unter /mnt/user/backups/restore-reports/authelia-YYYY-MM-DD.md
  • Restore-Lab-Daten bleiben mit --keep-data erhalten
  • ohne --keep-data wird das Restore-Lab geloescht; bei Fehler wird es nach /mnt/user/backups/restore-lab/_failed/authelia-... verschoben

Smoke-Test-Pruefungen

Minimal erwartet im Report:

  • Borg extract of config: ok
  • Test-Postgres healthy
  • authelia config validate: ok
  • HTTP /api/health status: 200

Fehlerfaelle

Symptom Ursache Massnahme
config validate failt mit notifier Block Produktive Notifier-Map wurde nicht sauber aus der Testkonfig entfernt Originalkonfig pruefen unter restore-lab/authelia/config/configuration.yml.original; Strip-Liste oder Test-Block im Skript anpassen
config validate failt mit session.domain aelteres/neueres Schema Test-session:-Block an reales Authelia-Schema anpassen
HTTP-Timeout 120 s Authelia haengt in Postgres-Schema-Migration docker logs --tail 200 restoretest-authelia lesen, ggf. Wartezeit erhoehen
SMTP-Connect im Log Produktiver Notifier-Block wurde nicht sauber entfernt test-config/configuration.yml auf smtp: pruefen und Strip-Liste haerten
pg_restore failt mit Schema-Drift Dump aus 17er-Cluster, 18er Image braucht andere Initialisierung Schritt als optional dokumentiert; Smoke ohne Dump akzeptieren und Issue nachverfolgen

Cleanup

  • bei Erfolg ohne --keep-data: rm -rf /mnt/user/backups/restore-lab/authelia und Extract-Cache
  • bei Fehler: Datenpfad wird via preserve_on_failure nach /mnt/user/backups/restore-lab/_failed/authelia-... umbenannt

Produktive Authelia-Container, produktive Secrets, produktive Postgres-DB und produktiver SMTP-Account werden niemals beruehrt.

Schedule

Aktuell nicht im automatischen Schedule. Vorschlag nach erstem erfolgreichen Lauf: zweimonatlich (2. Samstag in geraden Monaten), damit nicht mit Paperless kollidierend.

Festgelegte Entscheidungen

  • Test-Compose nutzt denselben Image-Digest wie Produktion.
  • Wegwerf-Secrets ausschliesslich im Test-Compose; niemals produktive Authelia-Secrets einsetzen.
  • Test-Postgres ist isoliert; produktive shared PostgreSQL 18 wird nicht angesprochen.
  • Notifier wird auf Filesystem umgebogen; KEIN echter SMTP-Versand.
  • Test-Port nur auf 127.0.0.1:19091, keine LAN-/Traefik-Anbindung.
  • Borg-Passphrase wird aus Host-Secret-Datei gelesen und nirgendwo geloggt.