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

5 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.

Eine Antwort schreiben

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