Paperless-ngx, Teil 21: Die 1-Klick-Sicherung mit allem „Drum und Dran“

In den Teilen 8 – „Exportfunktion nutzen“ – und 10 – „Das Rundum-sorglos-Backup“ – bin ich bereits ausführlich auf Fragen der automatisierten Sicherung eingegangen. Es gibt nun eine sehr elegante Möglichkeit, alle Automatisierungen zu bündeln und über ein Tool zeitgesteuert durchzuführen. Das Backup-Tool Vorta hatte ich zwar schon kurz erwähnt, aber es enthält eine spezielle Funktion, die ideal zur Nutzung unter Paperless-ngx ist.

Backup-Anleitungen im Netz meist zu umständlich

Ich wundere mich immer wieder, wie kompliziert der Umgang mit Paperless-ngx in vielen Web-Beiträgen oder Youtube-Videos dargestellt wird. Container sichern, Datenbanken, Pfade umleiten, Einstellungen und … und … und. Kann man machen, wird auch funktionieren – ist aber aus meiner Sicht unnötig. Der winzige Export-Befehl von Paperless-ngx, den ich in Teil 8 beschrieben habe, sorgt von Haus aus für eine vollständige Sicherung: Dokumente, Einstellungen, Nutzerkonten, Passwörter – all dies kann per Export-Einzeiler gesichert und per Import-Einzeiler wiederhergestellt werden. Bei meinen Tests hat sich dieses vorgehen auch als deutlich stabiler und flexibler bei Umzügen, System- oder Hardwareänderungen erwiesen. Dieser Export-Einzeiler wird gleich noch eine entscheidende Rolle spielen.

Wie ein Borg-Backup mit Vorta zum Kinderspiel wird

Bei dem Wort Borg fallen mir immer die Cyborgs ein, die im Star Trek Universum in würfelförmigen Raumschiffen kollektiv unterwegs sind. In der Linux-Welt steht Borg für eine besonders sichere Backup-Variante, die platzsparend arbeitet, Backups verschlüsselt und überhaupt mit hundert Parametern auf eigene Bedürfnisse zugeschnitten werden kann. Feine Sache, aber für den Nicht-Terminal-gewohnten-Alltags-Anwender zu kompliziert. Wer tippt schon gerne ein: „borg create --stats --verbose -v /path/zu/repository/::{now:%Y-%m-%d_%H-%M} \`/path/zu/backup/ordner/`“?

Vorta ist eine grafische Oberfläche für Borg-Backupvorgänge. Es lässt sich per Klick aus den Paket-Managern der jeweiligen Linux-Variante beziehen, auch unser Raspberry Pi hat das Tool auf Lager:

Vorta bringt auch den ganzen „Unterbau“ mit, man muss also nicht das Borg-Backup zusätzlich installieren. Nach dem Start stellt es einige Reiter für Speicherorte, Zeitplan, Wiederherstellung usw. zur Verfügung:

Nur der erste Reiter „Repository“ klingt etwas ungewohnt. Man kann das aber einfach als Ablageort oder Speicherpfad übersetzen – schon wird die Sache verständlicher. Man kann ein beliebiges Verzeichnis auswählen: eingebaute SSD, Partition, angeschlossener USB-Speicher, NAS oder ein Laufwerk im Heimnetz. In diesem Beispiel wurde einfach eine USB-Festplatte mit 1 TB an den Raspberry Pi gehängt und der entsprechende Pfad in Vorta ausgewählt:

Im zweiten Reiter „Quellen“ wird der Export-Pfad von Paperless-ngx gewählt. Man könnte einzelne Dateien aussuchen, aber bei unserem Vorgehen kann der ganze Ordner „export“ ausgewählt werden:

Auf den Reiter „Zeitplan“ gehe ich nicht weiter ein, da ich bereits in Teil 8 Vorschläge dazu gemacht habe. Man kann es ja für seine erste Testreihe bei den Vorgaben belassen und dann schauen, was man ändern möchte. Vorta geht da sehr ausgeklügelt vor, so dass neuere Sicherungen vermehrt behalten werden, je mehr Zeit vergeht, desto weniger Sicherungen werden behalten, Duplikate werden vermieden, man kann Vorta Backups auch „ausdünnen“ lassen, es wird komprimiert usw. usw. Man erhält also sehr platzsparende Sicherungen, die aber gleichzeitig sogar eine Versionierung erlauben.

Der Clou: Vorta führt den Export-Befehl selbständig aus!

Jetzt kommt unser Export-Einzeiler ins Spiel. Denn bevor Vorta etwas sichern kann, muss ja eine Sicherungsdatei erstellt werden. Der dafür notwendige Befehl wird im Reiter „Zeitplan“, Abschnitt „Shell-Kommandos“ eingetragen:

Der Export-Befehl lautet:

cd /home/a/paperless-ngx && docker compose exec -T webserver document_exporter ../export -z

Mit dem letzten Parameter „-z“ sorgen wir dafür, dass alle Export-Dateien in ein einzelnes Zip-Archiv gepackt werden.

Möchte man noch ein wenig mehr Platz sparen, so kann man den Befehl erweitern und zunächst ein vorhandenes Export-Archiv im Ordner „export“ löschen und erst danach ein neues Archiv erstellen lassen. Der Löschbefehl wird also vorangestellt:

rm -f /home/a/paperless-ngx/export/* ; cd /home/a/paperless-ngx && docker compose exec -T webserver document_exporter ../export -z

Damit ist die Backup-Konfiguration abgeschlossen. Vorta führt zu den angegebenen Zeit den Export durch und sichert das Export-Archiv.

Zwei Möglichkeiten der Wiederherstellung

Backup ist ja nur die eine Seite – wie sieht es denn mit einem Restore aus? Schließlich wird das gesicherte Archiv benötigt, wenn man nach einem Paperless-ngx-Fehler oder nach einem Geräte-Umzug den Import-Befehl ausführen möchte. Nun, das ist sogar noch einfacher. Vorta führt alle Sicherungen im Reiter „Archive“ auf:

Mit dem Button „Entpacken“ wird das gesicherte Zip-Archiv entpackt und wir können zusammen mit dem Import-Befehl Paperless-ngx wieder zum Laufen bringen. Wie gesagt: Es wird der Stand vollständig wiederhergestellt, so, wie er zum Sicherungszeitpunkt vorhanden war.

Vorta bietet alternativ den Button „Einhängen“ an. Damit werden die Archive wie ein zusätzliches Speichermedium im Dateimanager eingeblendet:

Die zweite Möglichkeit bietet für komplexere Backups, wenn man beispielsweise den ganzen „\home“-Ordner sichert, Vorteile. Man kann sich dann wie gewohnt im Dateimanager bewegen und sich einzelne Dateien oder Ordner herauspicken. Für unser Paperless-ngx-Vorhaben ist die erste Methode ausreichend. Aber man kann ja Vorta gleichzeitig für umfangreichere Sicherungen nutzen.

Einmal eingerichtet muss man sich um nichts mehr kümmern. Vorta funktioniert nach meinen Erfahrungen sehr zuverlässig. Im Unterschied zu anderen Linux-Backup-Programmen muss das Ziel-Medium auch nicht in einem Linux-Format wie ext4 formatiert sein, NTFS usw. funktioniert auch. Insgesamt also eine schlanke und unkomplizierte Sache. Und ganz nebenbei hat man vielleicht ein neues Backup-Programm entdeckt, dass man auch für andere Bereiche einsetzen kann.

/

Bisherige Teile der Paperless-ngx-Serie:

Teil 1: Ausführlicher Überblick
Teil 2: Suche & Tags
Teil 3: consume-Ordner – Einsatz von Scannern
Teil 4: Speicherpfade konfigurieren
Teil 5: Installation auf dem Raspberry Pi
Teil 6: Neue Funktionen in Version 2
Teil 7: Dokumente unterwegs über das eigene Modem abrufen
Teil 8: Exportfunktion nutzen
Teil 9: Update durchführen
Teil 10: Das Rundum-sorglos-Backup
Teil 11: Mail-Abruf mit vielen Extras
Teil 12: Mein Alltag mit Paperless-ngx
Teil 13: Ein Quanten-Code für das Papier-Archiv
Teil 14: Automatisierte Ablage auf Speicherpfaden
Teil 15: Neue Funktion für das Verbinden und Trennen von Dokumenten
Teil 16: Dashboard, smarte Widgets und erweiterte Ansichten
Teil 17: Unterordner des consume-Verzeichnisses nutzen
Teil 18: Paperless-ngx auf Synology/NAS ohne Docker nutzen
Teil 19: Praxisbeispiel – kleine Hausverwaltung
Teil 20: Dokumente per Mail aus dem Heimnetz versenden
Teil 21: Die 1-Klick-Sicherung mit allem Drum und Dran

22 Kommentare

  • Qadhegh

    Vielen Dank für die Ausführliche Serie zu Paperless. Auch ich nutze sehr gerne und umfangreich Paperless. Inzwischen konne ich auch schon Kollegen davon überzeugen.

    Zum Thema Backup möchte ich noch etwas ergänzen – als mögliche Idee für andere. Ich habe einen Mini PC für die meisten meiner Docker Container und noch eine Nas (Truenas). Auf dem Mini PC lasse ich via Cron Job 1x am Tag ein Backup Script laufen welches den Export in ein Unterverzeichnis macht. Anschliesend löscht es alle Dateien in dem Backup Verzeichnis die älter sind als 14 Tage – als eine art Versionierung.

    #!/bin/bash
    cd /data/paperless-ngx/
    docker exec paperless-webserver-1 document_exporter ../export –zip
    # Remove all files older than 14 days
    find /data/paperless-ngx/export/ -mtime +14 -type f -delete

    Zusätzlich habe ich Syncthing laufen welches die Änderungen auf meine NAS kopiert. Hierbei sollte man darauf achten das man lediglich ein Push/Pull und kein Sync macht. Auf der NAS dabe ich ein Backup Job eingerichtet welches mir die Daten von Syncthing einmal am Tag auf einen Privaten Cloud Storage überträgt. So halte ich mich auch an die 3-2-1 Regel zum Backup. Dieses Konzept und Vorgehensweise nutze ich auch für andere Daten und Container.

  • Rainer

    Danke für den Artikel. Der Paramter „-z“ zum Exportieren war mir neu.
    Hab dann gerade noch den Parameter „-zn“ entdeckt, sieht dann also bei mir so aus:

    docker-compose exec -T webserver document_exporter ../export -z -zn full-backup

    Da spare ich mir dann das Aufräumen. Das Versionieren übernimmt dann bei mir restic, aber borg kann das ja genauso gut.

  • Johannes

    Hallihallo, ich prügle mich gerade mit ChatGPT und dem Pi5 um einen automatisierten, headless Backup-Plan zu erstellen, der halt ein Backup vom gesamten System macht, sobald man einen USB Stick ansteckt. Wie dem auch sei, ich frage mich, ob das überhaupt nötig ist und ich habe leider auch so gar keine Ahnung von der Materie.

    Wenn ich stattdessen jetzt dieser Anleitung von dir folge, kann ich eigentlich den USB Stick dauerhaft im Pi stecken lassen und dabei sicher sein, dass Borg mir dann nach Zeitplan da immer die Backups draufbügelt?

    UND: ist denn in dem Export Ordner von paperless alles drin? Also Konfiguration (Tags, Pfade etc. inkl Dokumente) oder lediglich die Dokumente und ich muss bei einem Systemausfall dann alles neu konfigurieren bis ich den Export Ordner wieder resume?

    • Herbert

      Wie es im Artikel deutlich steht: Bei der Sicherung mit dem Export-Befehl ist alles enthalten, auch Tags, Pfade usw. – nicht nur die Dokumente. Bei meinen Tests hat auch die beschriebene zeitgesteuerte Borg-Sicherung tadellos funktioniert. Halt einfach mal ausprobieren, würde ich sagen, und von Zeit zu Zeit kontrollieren, ob noch alles so läuft, wie es Deine Absicht ist. Auch mal ein Test-Restore in einer zweiten Paperless-ngx-Instanz machen – das ist in wenigen Minuten erledigt.

  • Joachim

    Hallo Herbert,

    Ich habe das Vorta Bckup aufgesetzt und es scheint auch gut funktioniert zu haben. Ich musste allerdings meinen Pi komplett neu aufsetzen. Beim Installieren vom Paperless gab es wohl einen Systemsprung, so dass der import nach dem Restore nicht mehr klappt. Fehler:
    Database import failed
    Version mismatch: Currently 2.16.2, importing 2.15.3
    Die Lösung wäre wohl auf die 2.15.3 downzugraden. Aber wie?
    Danke 🙂

  • Joachim

    Danke für die schnelle Rückmeldung.
    Ich nutze einen Pi5 mit 8GB und SSD für das Betriebssystem. Debian 12 Bookworm (Pi OS).
    Daran sollte es eigentlic nicht scheitern

      • Joachim

        Ich habe mir die ältere Version mal heruntergelanden.
        Wie kann ich die am besten installieren? Mit dem INstallationsskript würde er doch wieder die aktuelle ziehen, oder? Ich nehme an, einfach die Ordne rauszutauschen funktioniert nicht 😉

        • Herbert

          In der yml musst Du hinter dem Link die Versionsnummer setzen. Kann aber sein, dass auch für Postgres die Daten der alten Version eingesetzt werden muss – habe ich schlicht noch nicht probiert. Ich empfehle Dir, das alles auf einem zweiten Pfad mit neuen Media-Pfad-Einträgen usw. durchzuführen. Vorher den alten Container stoppen und löschen, damit sich nichts in die Quere kommt.

          • Joachim

            Hallo Herbert,
            Danke für Deine Hilfe. Aber alle Bastelei hat mich nicht weiter gebracht. da ich noch ziemlich am Anfang bin, habe ich mich entschieden alle von Grund auf neu aufzusetzten. Dabei kam mir zugute, dass ich meinen paperless-ngx vorher noch einmal manuell weggesichert hatte, so dass ich von dort aus alle Dokumente importieren konnte.
            Es kann also Sinn machen, in ein Backup nicht nur den Ordner Export sondern zumindest noch den Odner originals einzubinden. Das bläht zwar das Backup auf, minimiert aber den Datenverlust, wenn die DB korrupt wird (Ich vermute, dass ist bei mir passiert).

            Den Befehl zum anschließenden Löschen des Exports habe ich übrigens als Post-backup command eingetragen.

            Viele Grüße

  • Herbert

    Prima, dass Du eine Lösung gefunden hast! Mit dem Export-Befehl werden auch die Originale gespeichert, daher nehme ich persönlich da keine gesonderte Sicherung vor. Aber schaden kann es ja nicht. Wenn alles läuft, hat man sein Ziel erreicht 🙂

  • Jochen

    Hallo,

    Danke für den Tipp mit Vorta. Eine Frage/Anregung… Vorta resp. Borg kann ja dedublizieren, also unveränderte Dateien beim Backup auslassen. Es komprimiert auch selber. Wozu lässt du den Export dann in ein ZIP erfolgen. Ist das nicht kontraproduktiv?

    • Herbert

      Danke für den Hinweis! Wahrscheinlich hast Du recht, dass man im Fall einer Sicherung über Vorta auf den ZIP-Parameter verzichten kann. Ich schlage ja unterschiedliche Sicherungsvarianten vor – Back-in-Time usw. -, von daher habe ich das Muster übernommen, das grundsätzlich funktioniert.

  • Chris

    Hallo Herbert,
    Vielen Dank für deine Paperless Beschreibungen & Anleitungen, ich habe gerade ein Problem, ich versuche gerde ein upgrade( von Postgress, 16 auf 17 und paperless von 15.1 auf 16.3 und ev. auch redis von 7 auf 8) durchführen.

    Es klappt aber nicht und ich hab Angst mir mein Paperless zu zerschießen.
    Besteht die Möglichkeit dass du mal einen Artikel darüber machen kannst?

    Vielleicht bin ich ja nicht der einzige der sich das upgrade nicht traut.
    mercy und viele grüße
    Chris

    • Herbert

      Hallo Chris, das ist eigentlich nicht kompliziert. Aber ich mache mal einen Testlauf und habe einen Artikel dazu auf die Todo-Liste gesetzt 🙂

  • Der Supertester von DSM

    Sehr gut erklärt,
    habe vorher so gesichert:
    Paperless läuft bei mir unter VM Ware auf debian 12. Habe jede Woche 30 GB gesichert, also den ganzem VM Ware Ordner, dauert läger, belastet die Festplatte, denn wie jeder weiß: Wöchentlich 30 GB auf SSD Festpaltte kopieren, wird die Lebensdauer der Festplatte im Laufe der Jahre verringern, bis nichts mehr geht. Nichts mehr gesichert werden kann und dann ist das Problem da, Jahre lang gesichert und dann geht nichts mehr und die letzte sicherung erweist sich als zu alt und einige Daten gehen verloren.
    DANKE

    • Herbert

      Freut mich, dass es nun einfacher bei Dir klappt! 30 GB ständig zu sichern, wäre auch deutlich zu viel gewesen. Danke für die nette Rückmeldung!

  • Karl-Heinz

    Nach einem Update von 2.15.3 auf 2.16.x kommt das System nicht mehr hoch.

    Das Problem mit neu installiertem Paperless von 2.15.3 auf 2.16.X bzw. 2.17.1 habe ich auch. Das Einlesen des Backups scheitert.

    An die Logs komme ich nicht ran. Die sind wohl irgendwo im Docker vergraben. Um das zu finden fehlt mir das Wissen dazu.

Eine Antwort schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert