Intro
In meinen Augen ist Paperless Backup/Restore alles andere als trivial für Anfänger ohne Dockererfahrung aber wer will schon seine eingescannten Dokumente etc verlieren.
Wie heißt es immer so schön, kein Backup → kein Mitleid
Solltet Ihr wie ich
- am Anfang von Dockern und Paperless stehen
- Paperless auf der Synology NAS im Container Manager als Docker Projekt installiert haben
- den Notfall oder Datenbank Update durchspielen
- ein Backup/Restore einrichten wollt
Dann helfen Euch diese Notizen ein paar Stunden Irrweg zu sparen.
Anleitungen im Internet funktionieren nur manchmal und es hängt davon ab, wie Paperless installiert wurde.
An alle Profis und Leute mit mehr Erfahrungen: Wie richtet man besten eine automatisiertes Backup von Paperless Datenbank an? Eure Vorschläge sind sehr willkommen. Danke!
Meine Testinstallation heißt:
- “paperless-office”
- und liegt im NAS Pfad “/volume1/docker/paperless-office”
Das ist wichtig, da untere Befehle auf Eure Installation angepaßt werden müssen.
1. Backup & Restore by Hyperbackup
Vorteil:
- Man kann immer auf genau den Stand zurückgreifen inklusive Daten und Container Version.
Beides
- Eventuelle Container Update Spielerein/Tests sind weg.
Restore Nachteile bzw. zu bedenken
- Hyperbackup löscht / überschreibt nicht das Docker Zielverzeichnis!
- Hyperbackup überschreibt nicht das Docker Projekt im Container Manager!
Backup Vorgehensweise erkäre ich hier nicht. Das geht intuitiv.
Restore Vorgehensweise:
a) Container Manager Projekt stoppen
b) Docker\paperless-office alles inklusive der compose.yaml manuell löschen
c) Sofern einer der Container manuell angefaßt wurde (z.B. Update), müssen Container/Images händisch gelöscht werden
d) Hyperbackup Restore durchführen
e) Container Manager
e1) Sofern Projekt noch vorhanden, dann Projekt neu starten
e2) Falls Projekt gelöscht, Projekt neu anlegen mit der wieder hergestellten compose.yaml
2. Backup per SSH
Vorteile:
- Wer auf manuelle Kommandozeilen Befehle steht und sich auskennt, wird es mögen
- Man bekommt direkt Rückmeldung mit ggf. Fehlern
Nachteile:
- Umständlich entweder nach Erinnerung manuell oder automatisiert über Aufgabenmanager
Anlegen eines Datenbank Dumps
a) Ggf. Hyperbackup Backup vorher durchführen falls was schief läuft
b) per ssh admin@192.168.x.xxx anmelden
c) find /volume1/docker -name “*.sql” → findet bereits vorhandene Dumps
d) cd /volume1/docker/paperless-office → wechselt in den Container
e) sudo docker exec paperless-office-postgres bash -c “pg_dump -U paperless > /var/lib/postgresql/data/backup_$(date +%F).sql” → erstellt den Dump
f) Sichere den Dump in ein extra Verzeichnis außerhalb von Docker (falls Du von vorne beginnen mußt und alles löschen mußt und nicht aus Versehen auch den Dump löschst)
Export der Dokumente
a) per ssh admin@192.168.x.xxx anmelden
b) cd /volume1/docker/paperless-office → wechselt in den Container
c) falls nicht vorhanden export Verzeichnis anlegen
d) sudo docker-compose exec webserver document_exporter …/export/
3. Restore per SSH
Vorteile:
- Datenbank und Export können auch bei komplett neuen/aktualisierten Containern eingespielt werden
- Man bekommt direkt Rückmeldung mit ggf. Fehlern
Nachteile:
- Import des Datenbank Dumps geht nur bei leerer Datenbank!
- Fehlermeldungen können irritieren
Import des Datenbank Dumps
a) Im Container Manager Projekt stoppen und löschen (nachprüfen ob Images auch weg sind)
b) Im Zielodner neue Paperless Strucktur anlegen bzw. vorhandene Ordner leeren (compose.yaml muß bleiben)
c) export Ordner zurückspielen (aus Hyperbackup oder manueller voriger Kopie)
d) Datenbank Dump in das postgres Verzeichnis kopieren
e) Im Container Manager Projekt neu erstellen basierend auf compose.yaml
f) per ssh admin@192.168.x.xxx anmelden
g) sudo docker exec -i paperless-office-postgres psql -U paperless < /volume1/docker/paperless-office/postgres/backup_2025-03-29.sql → Import des Dumps (achte auf den richtigen Backup Namen im Postgres Verzeichnis)
- es gibt viele Melungen und Fehler wie
ERROR: relation “account_emailaddress” already exists ALTER TABLE
ERROR: relation “documents_comment_id_seq” already exists
ERROR: relation “documents_correspondent” already exists
ERROR: multiple primary keys for table “documents_workflowaction_remove_change_groups” are not allowed
…Fehler irritieren aber auch logisch
Import der exportierten Dokumente
a) DB Dump, wie oben beschrieben, ist ausgeführt
b) desweiteren sind im Export Ordner die früher exportierten Dokumente
c) per ssh admin@192.168.x.xxx anmelden
d) cd /volume1/docker/paperless-office → wechselt in den Container
e) sudo docker-compose exec webserver document_importer …/export/ → startet den
Checking the manifest
Installed 892 object(s) from 1 fixture(s)
Copy files into paperless…
100%|██████████████████████████████████████████████████████████████████████████████████| 32/32 [00:05<00:00, 5.75it/s]
Updating search index…
100%|██████████████████████████████████████████████████████████████████████████████████| 32/32 [00:02<00:00, 13.61it/s]
Und das wars.
Alles so wie vorher.
EDIT:
Ich bat ChatGPT diesen Post zu prüfen und Verbesserungen vorzuschlagen.
- Klarere Struktur & Übersichtlichkeit vornehmen
- Fehlende Kontextinfos bei Hyper Backup
- Automatisierungspotenzial bleibt etwas vage (das stimmt)
- Restore-Teil: Etwas mehr Tiefgang
- Viel Text ohne Visualisierung – schwer greifbar
Sch… KI
“Sind seine Anleitungen korrekt?”
… fand nirgends einen Widerspruch…aber
" Automatisierte Backups: Für die Automatisierung von Backups auf einer Synology NAS kann der Aufgabenplaner genutzt werden, um Skripte zu festgelegten Zeiten auszuführen. Ein Beispiel für ein solches Skript könnte die regelmäßige Ausführung des document_exporter
-Befehls sein, dessen Ergebnisse dann mit rsync
oder anderen Backup-Tools gesichert werden. Diese Methode wird auch in der Paperless-ngx Community diskutiert und empfohlen."
Wenn keine neuen/besseren Ideen im Post kommen, werde ich es so machen:
Wöchentlich automatisiert:
- Über Aufgabenplanung: DB Dump eine Datei ohne Datum (z.B.Bacardi-dbdump)(*)
- Über Aufgabenplanung: Export der Dokumente
- Danach Hyperbackup (mit Versionsrotation und Verschlüsselung)
(*) Oben im dump habe ich Dateinamen mit Datum erzeugen aber das werde ich wieder wegnehmen weil sich sonst das HyperBackup unnötig aufblähen würde. Eine Versionierung überlasse ich dem HyperBackup.
Monatlich manuell:
Manuell Sicherung des HyperBackup Backups in die Cloud über CloudSync (mache ich heute schon so mit anderen Sicherungen)