Paperless-ngx, Teil 8: Exportfunktion nutzen

Paperless-ngx läuft rund und macht, was es soll? Prima! Dann wird es Zeit, sich über Backup-Strategien Gedanken zu machen. Schließlich wurde viel Arbeit in den Aufbau und die Organisation der Unterlagen gesteckt – das soll nicht alles „weg“ sein, wenn der Sohnemann mit seinem Lego-Laster ein Regal umwirft oder Blitz die Elektrik zum Erliegen bringt. Heute soll es um den ersten Schritt einer umfassenden Backup-Strategie gehen.

Umfangreiche Exportfunktion nutzen

Bei dem Wort „Export“ denkt man zunächst nur an das Speichern der Dokumente. Die Funktion, die Paperless-ngx eingebaut hat, ist aber viel umfangreicher: Datenbankinhalte, Metadaten, Einstellungen, Nutzer-Accounts – sogar Passwörter für die einzelnen Account: all dies wird mit einem einzigen Befehl gesichert. Mehr noch: Paperless-ngx überprüft auch Änderungen zum letzten durchgeführten Export und passt die Sicherung entsprechend an. Und noch mehr: Die Sicherung kann auf ein anderes Gerät übertragen werden. Wenn dort ebenfalls Paperless-ngx installiert ist, so hat man – nach einem kurzen Import – auch in dieser anderen Installation ein 1:1-Abbild seines Archivs.

Mit anderen Worten, man muss sich keine Gedanken um irgendwelche (Docker-)Pfade, Datenbanken usw. usw. machen. Man führt den Befehl aus, wartet ein paar Sekunden und hat – je nach Einstellung – alles in einem ZIP-Archiv oder auf einem Export-Pfad liegen.

1 Zeile genügt

Zunächst wird die Kommandozeile aufgerufen. Dann hangelt man sich zu seinem Paperless-ngx-Ordner hin, also z.B.

cd /home/pi/paperless-ngx

Dort fügt man den Export-Befehl ein:

sudo docker-compose exec webserver document_exporter ../export

Jetzt ein paar Sekunden warten – danach wurde ein Unterpfad „export“ mit allen Dateien angelegt.

(Screenshot von Benutzer „a“ – im Text verwende ich den Standardnutzer „pi“.)

Neben den Datenbank-Einträgen (1) sind damit auch die Vorschau-Bilder (2), die Archiv-Version (3) und die Original-Version (4) des Dokuments gespeichert.

Mit dem zusätzlichen Parameter „-z“ am Ende der Zeile wird von Paperless-ngx alles in ein ZIP-Archiv gepackt:

Hinweise für den Import

Möchte man später die Dokumente in eine Neu-Installation von Paperless-ngx aufnehmen oder zieht man beispielsweise vom Raspberry Pi zu einem Synology-NAS um, so gibt man auf dem Paperless-ngx-Pfad fast den gleichen Befehl ein:

sudo docker-compose exec webserver document_importer ../export

Natürlich müssen zuvor die gesicherten Dateien in den Unterpfad „export“ kopiert werden.

sudo docker-compose exec webserver document_exporter ../export -z

Vorgehen bei Versions-Updates

Das beschriebene Vorgehen klappt problemlos, sofern es sich um die gleiche Paperless-ngx-Version handelt. Aktuell wird gerade Version 2 ausgerollt. Hat man ein reguläres Update von der vorherigen Version (1.17.4) vorgenommen, so wurden automatisch alle Daten übernommen und angepasst. Anschließend kann man mit diesen Dokumenten einen Export vornehmen und ist damit während der 2-er-Generation auf der sicheren Seite. War kein reguläres Update mit vorhandenen Daten möglich, so sollte man zunächst die ältere Paperless-ngx-Version installieren (hier also 1.17.4). Danach die Dateien auf dem Export-Pfad importieren. Und dann erst das Update von 1.17.4 auf 2 vornehmen.

Zeitsteuerung für den Export einrichten (Cronjob)

Wenn das vollständige Archiv erstmalig gesichert wurde, muss man danach nicht ständig den Export anwerfen. Oft wandern die Woche nur 2 bis 10 neue Dokumente ins Archiv – dann genügt es, wenn man beispielsweise auf der Todoliste einen Eintrag hat „Freitag, 15:00 Uhr, Export, wöchentlich“ einträgt.

Oder man nutzt für den Befehl das Texterweiterungstool Espanso, über das ich in einem früheren Artikel berichtet habe.

Eleganter ist es natürlich, wenn unser kleiner Raspberry Pi die Arbeit für uns erledigt. Dazu richten wir einen „Cronjob“ ein. Damit wird der Export z.B. immer nachts um 4:00 Uhr durchgeführt, während wir noch schlummern.

Vorarbeit: Export-Befehl in Datei schreiben

Ein kleines Skript nimmt die Befehle auf, die wir sonst mit der Hand eingeben. Keine Sorge – das ist in 20 Sekunden erledigt. Der Name der Skript-Datei ist gleichgültig, im Beispiel nennen wir sie „ex.sh“. Die wird über den Texteditor Nano erzeugt. Also: Kommandozeile aufrufen und „nano ex.sh“ eingeben:

nano ex.sh

Jetzt öffnet sich eine leere Datei. Die erste Zeile beginnt bei solchen Skripten immer mit „#!/bin/bash“ – danach werden die oben erwähnten Befehle eingetragen:

#!/bin/bash
cd /home/pi/paperless-ngx
sudo docker-compose exec -T webserver document_exporter ../export -z

So sieht die Datei im Nano-Editor aus:

Gespeichert wird mit „Strg + O“, Dateinamen bestätigen, „Strg + X“ für das Schließen des Editors.

Das Skript muss nun noch als ausführbare Datei gekennzeichnet werden. Das geschieht mit diesem Befehl:

chmod +x ex.sh

Cronjob anlegen

Die eben erzeugte Datei starten wir über einen Cronjob. Hier kommt wieder der Texteditor Nano ins Spiel. Zunächst auf der Kommandozeile eingeben

crontab -e

Falls bisher noch von keinem anderen Programm ein Cronjob eingetragen wurde, erfolgt kurz eine Abfrage, ob man Nano verwenden möchte – die angezeigt Ziffer (in der Regel „1“) eingeben. Es muss nun nur eine einzige Zeile eingetragen werden. Diese besteht aus der Zeitangabe und dem Aufruf unserer vorher angelegten Skript-Datei. Die Art der Zeitangabe erkläre ich gleich näher, aber hier direkt mal ein Beispiel:

Mit der Zeile „* 4 * * * /home/pi/ex.sh“ wird der Export von Paperless-ngx täglich morgens um 4:00 Uhr ausgeführt. Aber da man ja neugierig ist, ob alles klappt, richten wir kurz eine „1-Minuten-Sicherung“ ein. Dafür werden als Zeitangabe 5 Sternchen mit Leerraum gesetzt, also:

* * * * * /home/pi/ex.sh

Wieder mit Strg-O/Dateinamen bestätigen/Strg-X speichern und beenden.

Nun mit dem Dateimanager den Export-Pfad aufrufen und schauen, ob da nach einer Minute die Export-Datei generiert wird. Wenn alles korrekt ist, so wird die Datei angelegt und erhält minütlich eine neue Version. Das ist natürlich überflüssig, daher noch einmal mit „crontab -e“ die Zeitsteuerung aufrufen. Und jetzt jene Sicherungsabstände eintragen, die man haben möchte.

Zeiteintrag bestimmen

Die fünf Punkte stehen für „Minute“, „Stunde“, „Tag des Monats“, „Monat“ und „Wochentag“. Das klingt kompliziert, man hat den Bogen aber rasch raus. Ich übernehme hier einfach das Beispiel von Wikipedia:

Aufbau der Zeitangabe

Für die Ausführung an jedem Samstag um 23:45 Uhr muss der Vorspann also lauten:

45 23 * * 6 /home/pi/ex.sh

Mit einem „/“ an der jeweiligen Stelle kann eine Angabe wie „führe alle x Minuten oder Stunden etwas aus. Also etwa „/10 * * * *“ für „alle 10 Minuten oder „* /6 * * *“ für „alle 6 Stunden“.

4 Uhr morgens ist eine gute Zeit, denn der Vorschlag in der nächsten Folge wird sein, um 4:30 Uhr über ein anderes Tool eine verschlüsselte Komplettsicherung einzurichten. Die zeitliche Automatisierung wird dabei von dem Backup-Tool vorgenommen – wir müssen also keine weiteren Cronjobs mehr „von Hand“ anlegen.

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: …
Teil 10: …

4 Kommentare

  • Wolfgang

    Hallo Herbert,
    danke für die sehr hilfreiche paperless-ngx-Reihe 🙂
    Mit der Anleitung (Teil 8) hat es bei mir zunächst nicht geklappt. Du hast am Anfang den Benutzer ‚pi‘, dann kommen aber zwei Screenshots und den Angaben für ex.sh mit User ‚a‘. ‚pi‘ hatte ich immer brav ersetzt, aber ‚a‘? Einfach brav kopiert. Es hat eine Weile gedauert, bis ich es verstanden habe.
    Ich habe die Datei für den Cronjob auch zuerst im Verzeichnis paperless-ngx angelegt, das hat dann nicht geklappt. Beim genaueren Hinsehen (Screenshot paperless9_6.png ) habe ich dann erst gesehen, dass ich wieder ins Benutzerverzeichnis zurückwechseln muss. Vielleicht könnte hier ein kleiner Hinweis ergänzt werden – für Leute wie mich 😉
    Liebe Grüße
    Wolfgang

Eine Antwort schreiben

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