121 lines
3.5 KiB
Markdown
121 lines
3.5 KiB
Markdown
# Vaultwarden Restore Runbook
|
|
|
|
## Vorbedingungen
|
|
|
|
- Borg-Quelle ist verfuegbar
|
|
- Secret-Datei vorhanden: `/mnt/user/appdata/secrets/vaultwarden_admin_token.txt`
|
|
- Borg-Passphrase-Datei vorhanden: `/mnt/user/appdata/secrets/borg_repo_passphrase.txt`
|
|
- Testpfade unter `/mnt/user/backups/restore-lab/` und `/mnt/user/backups/restore-reports/` sind freigegeben
|
|
|
|
## Bestaetigter Host-Stand
|
|
|
|
- `borg` ist im Container `borg-ui` verfuegbar
|
|
- `BORG_BACKUP_PATH` ist im `borg-ui`-Container auf `/backups` gesetzt
|
|
- produktive Vaultwarden-Daten liegen unter `/mnt/user/appdata/vaultwarden`
|
|
- produktives Admin-Token liegt unter `/mnt/user/appdata/secrets/vaultwarden_admin_token.txt`
|
|
- `restore-lab` und `restore-reports` sind auf dem Host vorhanden
|
|
|
|
## Beobachtete Borg-Hinweise
|
|
|
|
- beobachtetes produktives Repo: `ssh://u565255@u565255.your-storagebox.de:23/./hetzner_borg_appdata_critical`
|
|
- beobachtete Archivnamen:
|
|
- `Taegliche-Sicherung-2026-04-16T04:30:02.798`
|
|
- `Taegliche-Sicherung-2026-04-17T04:30:31.660`
|
|
- aeltere manuelle Beispiele:
|
|
- `manual-backup-2026-04-12T17:17:30`
|
|
- `manual-backup-2026-04-12T17:35:17`
|
|
|
|
Hinweis:
|
|
Vor dem ersten echten Restore-Lauf immer das aktuelle Archiv mit `borg list` erneut pruefen.
|
|
|
|
## Platzhalter
|
|
|
|
- `ARCHIVE_NAME`: Borg-Archiv fuer den Restore-Test
|
|
- `REPORT_DATE`: z. B. `2026-05-06`
|
|
- `BORG_REPO`: Host-Borg-Repo, z. B. das produktive `critical_infra`
|
|
- `BORG_PASSPHRASE_FILE`: `/mnt/user/appdata/secrets/borg_repo_passphrase.txt`
|
|
|
|
## Ablauf
|
|
|
|
1. Testpfade vorbereiten
|
|
|
|
```bash
|
|
mkdir -p /mnt/user/backups/restore-lab/vaultwarden/data
|
|
mkdir -p /mnt/user/backups/restore-reports
|
|
rm -rf /mnt/user/backups/restore-lab/vaultwarden/data/*
|
|
```
|
|
|
|
2. Vaultwarden-Daten aus Borg in das Restore-Lab extrahieren
|
|
|
|
Archiv zuerst pruefen:
|
|
|
|
```bash
|
|
export BORG_REPO='...'
|
|
export BORG_PASSPHRASE="$(cat /mnt/user/appdata/secrets/borg_repo_passphrase.txt)"
|
|
borg list "$BORG_REPO"
|
|
```
|
|
|
|
Restore in das Testziel:
|
|
|
|
```bash
|
|
cd /mnt/user/backups/restore-lab/vaultwarden
|
|
borg extract "$BORG_REPO" "::ARCHIVE_NAME" local/appdata/vaultwarden
|
|
mv /mnt/user/backups/restore-lab/vaultwarden/local/appdata/vaultwarden /mnt/user/backups/restore-lab/vaultwarden/data
|
|
rmdir /mnt/user/backups/restore-lab/vaultwarden/local/appdata
|
|
rmdir /mnt/user/backups/restore-lab/vaultwarden/local
|
|
```
|
|
|
|
Wenn das Archiv den Pfad anders ablegt, zuerst mit `borg list "$BORG_REPO" "::ARCHIVE_NAME"` den exakten Eintrag pruefen.
|
|
|
|
Zielpfad nach dem Restore:
|
|
|
|
```text
|
|
/mnt/user/backups/restore-lab/vaultwarden/data
|
|
```
|
|
|
|
3. Testcontainer starten
|
|
|
|
```bash
|
|
docker compose -f /mnt/user/services/homelab/ops/restore-tests/vaultwarden-compose.test.yml up -d
|
|
```
|
|
|
|
4. Smoke-Test
|
|
|
|
```bash
|
|
curl -I http://127.0.0.1:18080
|
|
docker logs restoretest-vaultwarden --tail 50
|
|
```
|
|
|
|
Minimal erfolgreich:
|
|
|
|
- HTTP-Antwort kommt
|
|
- Login-Seite ist erreichbar
|
|
- Vaultwarden-Daten liegen im Restore-Lab vor
|
|
|
|
5. Testcontainer wieder stoppen
|
|
|
|
```bash
|
|
docker compose -f /mnt/user/services/homelab/ops/restore-tests/vaultwarden-compose.test.yml down
|
|
```
|
|
|
|
6. Report schreiben
|
|
|
|
Ziel:
|
|
|
|
```text
|
|
/mnt/user/backups/restore-reports/vaultwarden-REPORT_DATE.md
|
|
```
|
|
|
|
7. Testdaten nach erfolgreichem Lauf bereinigen
|
|
|
|
```bash
|
|
rm -rf /mnt/user/backups/restore-lab/vaultwarden/data
|
|
```
|
|
|
|
## Festgelegte Entscheidungen
|
|
|
|
- Testdaten werden nach erfolgreichem Lauf geloescht.
|
|
- `ntfy` wird nicht im ersten echten Lauf eingebunden.
|
|
- `ntfy` folgt spaeter, wenn der manuelle Basisablauf stabil verifiziert ist.
|
|
- Die Borg-Passphrase wird fuer Restore-Tests aus einer Host-Secret-Datei gelesen, nicht aus Borg-UI-Interna.
|