84 lines
4.1 KiB
Markdown
84 lines
4.1 KiB
Markdown
# 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
|
|
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
|
|
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 | `configuration.restoretest.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.
|