Hallo,
als Ersteller und nach einiger Abstinzen klinke ich mich auch nochmal kurz ein. Mein System lief nun zwei Jahre, aber ich habe mich zuletzt mal wieder intensiver damit befasst und mittlerweile vieles verstanden.
Lösungen für das Problem "Backup" sind hier ja schon zahlreiche genannt. Ich fasse mal kurz aus meinen Augen und nach meiner neusten Erfahrung zusammen.
- Die Datenbank: Es macht zunächst einen Unterschied, ob man MariaDB oder eine eigens für Paperless generierte Postgresql-Datenbank im Conteiner nutzt. MariadB wird als Anwendung im Hyperbackup gesichtert, Postgres über den zugehörigen Ordner, wo auch der Rest der Anwendung für Paperless drin lokal gespeichert wird.
- Alles zusammen: Im Falle von eigener Postgres-Datenbank hat man quasi alles gesichert, sofern man den im Container gemounteten Ordner für Paperless und seine Bestandteile sichert (media, db, etc.). Stellt man diesen wieder her UND erzeugt den Paperless-Container mit identischer Konfiguration, werden diese alten Daten genutzt, sprich wiederhergestellt. Dazu ist es äußerst hilfreich, den Paperless-Container über eine Docker-compose, bzw. Portainer mit Konfigurationsdatei erstellt zu haben. Diese kann man dann einfach wieder verwenden.
- Alles (mit MariaDB) wird es ähnlich gehen, nur das man zusätzlich die Datenbank mit möglichst dem selben Stand wie die Daten im Ordner als HyperBackup gesichert haben muss, bzw. wiederherstellen muss
- Die allereinfachste und sicherste Backup-Lösung: Die Container-Daten zu kopieren ist sinnvoll, ein wiederherstellen aber nur möglich, wenn man die ursprüngliche Container-Konfiguration noch kennt und auch die passende Datenbank (falls keine integrierte Postgres genutzt wurde) hat. Eine robustere Variante ist daher die Verwendung der Export-Funktion (ich denke das meinen hier viele als "Dump!?).
Die Export-Funktion extrahiert sämtliche Daten, Dokumente, Einstellungen/Tags, etc. aus dem Container+Datenbank. Mit der Import-Funktion kann man diese dann bei Bedarf in einen neuen Container+Datenbank zurückspielen, dabei ist selbst ein Versionsupdate von Paperless oder Wechsel der Datenbank, z.B. von Postgres zu MariaDB kein Problem. Das Ganze lässt sich automatisieren. Es muss nur ein Ordner für den Export im Container gemountet sein.
Anleitung zur automatisierten Sicherung über Export
(vorher Daten sichern - auf eigene Gefahr falls ihr euch vertippt oder so
)
1. Export-Aufgabe im Aufgabenplaner erstellen
"DSM >>> Systemsteuerung >>> Aufgabenplaner" neue "geplante Aufgabe" mit "benutzerdefiniertem Script" erstellen. Besitzersollte "root" ausgewählt werden (Warnungen bestätigen). Namen vergeben und Zeitplan definieren. Und als Script folgendes einfügen:
# Paperless-Containername für den Webserver, ggf. anpassen
CONTAINER="paperless-webserver"
# Export-Befehl ausführen
docker exec "$CONTAINER" document_exporter ../export -c -f
2. Aufgabe zum Leeren des alten Export-Ordners erstellen
Analog zur vorherigen Aufgabe eine zweite erstellen, welche den alten Stand löscht, damit ein neuer angelegt werden kann. Scripttext:
# Pfad zum Zielordner, hier muss euer gemounteter Export-Ordner stehen
TARGET_DIR="/volume1/docker/paperless/export"
# Löscht alle Dateien und Unterordner im Zielordner, Achtung: Export selbst bleibt erhalten, löscht nur alles darunter!
find "$TARGET_DIR" -mindepth 1 -delete
3. Die exportierten Daten sichern
Jetzt müsst ihr noch die exportierten Daten, bzw. den Ordner "../export" sichern, z.B. per Hyperbackup.
4. WICHTIG: Zeitliche Abläufe richtig einstellen!
Ihr müsst für die Aufgaben 1 - 3 die richtige zeitliche Abfolge für eure Sicherung einstellen. Ihr wollt ja immer den aktuellsten Dump sichern, also sollten eure Aufgaben zeitlich zuerst den alten Export löschen, dann den neuen Anlegen und danach sichern.
Noch ein wichtiger Hinweis: die rohen Exportdaten liegen unverschlüsselt im export-Ordner, er sollte also entsprechend unzugänglich für andere sein. Idealerweise löscht man den zuletzt gesicherten Export-Ordner auch direkt nachdem er gesichert wurde. Das bedeutet für 4. in enger zeitlicher Folge: Export erstellen, Sicherung durchführen und danach Export direkt löschen (aber sicherstellen, das die Sicherungsaufgabe genug Zeit hat).
5. Wiederherstellung
Zur Wiederherstellung legt ihr lokal die notwendigen Ordner (leer, bis auf "export") an und erzeugt einen neuen Paperless-Container (Passwörter, etc. können hier abweichen, ihr seid nicht auf die alte Konfiguration angewiesen.). Die gesicherten Export-Daten müssen in den export-Ordner des neuen Paperless-Containers kopiert werden.
WICHTIG: Loggt euch nocht nicht ein! Ihr müsst erst den Datenimport laufen lassen. Ich bin mir nicht sicher wie es bei der Postgres-Datenbank aussieht, für MariaDB habe ich vorher einen Benutzer + blanko-Datenbank für den Container erzeugt. Habt ihr euch bereits im Container angemeldet, werden darin erste Daten generiert, welche den Import verhindern. Dann muss die Datnebank blanko neu erstellt werden.