4.1 KiB
4.1 KiB
Paperless Restore Runbook
Vorbedingungen
- Borg-Quelle ist verfuegbar
- Borg-Passphrase-Datei vorhanden:
/mnt/user/appdata/secrets/borg_repo_passphrase.txt - aktueller Dump vorhanden:
/mnt/user/backups/borg/dumps/latest/postgresql17-paperless.dump - Testpfade unter
/mnt/user/backups/restore-lab/und/mnt/user/backups/restore-reports/sind freigegeben
Bestaetigter Host-Stand
- produktive Paperless-Daten liegen unter
/mnt/user/appdata/paperless-ngx/data - produktive Medien liegen unter
/mnt/user/documents/paperless - produktiver Exportpfad liegt unter
/mnt/user/documents/paperless/export - produktiver Consume-Pfad liegt unter
/mnt/user/documents/scans_inbox - aktueller Dump
postgresql17-paperless.dumpist vorhanden
Bestaetigter Teststand
- echter Mini-Restore am
2026-05-07erfolgreich gelaufen - Datei-Restore und Dump kamen aus dem produktiven Borg-Archiv
- Testcontainer:
restoretest-paperlessrestoretest-paperless-postgresrestoretest-paperless-redis
- Login-Seite war lokal auf
127.0.0.1:18120erreichbar - Dump-Import in Test-Postgres war erfolgreich
- Test-Datenbank enthielt
25Dokumente - Report liegt unter
/mnt/user/backups/restore-reports/paperless-2026-05-07.md
Platzhalter
ARCHIVE_NAME: Borg-Archiv fuer den Restore-TestREPORT_DATE: z. B.2026-05-07BORG_REPO: Host-Borg-RepoBORG_PASSPHRASE_FILE:/mnt/user/appdata/secrets/borg_repo_passphrase.txt
Ablauf
- Testpfade vorbereiten
mkdir -p /mnt/user/backups/restore-lab/paperless/{data,media,export,consume,postgres}
mkdir -p /mnt/user/backups/restore-reports
rm -rf /mnt/user/backups/restore-lab/paperless/data/*
rm -rf /mnt/user/backups/restore-lab/paperless/media/*
rm -rf /mnt/user/backups/restore-lab/paperless/export/*
rm -rf /mnt/user/backups/restore-lab/paperless/consume/*
rm -rf /mnt/user/backups/restore-lab/paperless/postgres/*
- Paperless-Dateipfade aus Borg in das Restore-Lab extrahieren
export BORG_REPO='...'
export BORG_PASSPHRASE="$(cat /mnt/user/appdata/secrets/borg_repo_passphrase.txt)"
borg list "$BORG_REPO"
cd /mnt/user/backups/restore-lab/paperless
borg extract "$BORG_REPO" "::ARCHIVE_NAME" local/appdata/paperless-ngx/data local/paperless/media local/paperless/export local/paperless/consume
mv /mnt/user/backups/restore-lab/paperless/local/appdata/paperless-ngx/data /mnt/user/backups/restore-lab/paperless/data
mv /mnt/user/backups/restore-lab/paperless/local/paperless/media /mnt/user/backups/restore-lab/paperless/media
mv /mnt/user/backups/restore-lab/paperless/local/paperless/export /mnt/user/backups/restore-lab/paperless/export
mv /mnt/user/backups/restore-lab/paperless/local/paperless/consume /mnt/user/backups/restore-lab/paperless/consume
- Test-Postgres und Test-Redis starten
docker compose -f /mnt/user/services/homelab/ops/restore-tests/paperless-compose.test.yml up -d restoretest-paperless-postgres restoretest-paperless-redis
- Dump in Test-Postgres importieren
docker exec -i restoretest-paperless-postgres pg_restore -U paperless -d paperless < /mnt/user/backups/borg/dumps/latest/postgresql17-paperless.dump
- Testinstanz starten
docker compose -f /mnt/user/services/homelab/ops/restore-tests/paperless-compose.test.yml up -d restoretest-paperless
- Smoke-Test
curl -I http://127.0.0.1:18120
docker logs restoretest-paperless --tail 50
find /mnt/user/backups/restore-lab/paperless/media -type f | head -n 10
Minimal erfolgreich:
- Dump-Import gelingt
- HTTP-Antwort kommt
- Dokumentenpfad ist im Restore-Lab befuellt
- Testcontainer wieder stoppen
docker compose -f /mnt/user/services/homelab/ops/restore-tests/paperless-compose.test.yml down
- Testdaten nach erfolgreichem Lauf bereinigen
rm -rf /mnt/user/backups/restore-lab/paperless
Festgelegte Entscheidungen
- Paperless nutzt fuer Restore-Tests immer isoliertes Test-Postgres und Test-Redis.
- Testdaten werden nach erfolgreichem Lauf geloescht.
ntfywird nicht im ersten echten Lauf eingebunden.- Die Borg-Passphrase wird fuer Restore-Tests aus einer Host-Secret-Datei gelesen, nicht aus Borg-UI-Interna.