Backup Automatisierung mit Paperless-ngx und rclone

Bereit für die ultimative Backup-Lösung? Wie du Paperless-ngx und rclone nutzt, um deine Dokumente automatisiert und verschlüsselt in der Cloud zu speichern.

Zuletzt aktualisiert: 26. Apr. 2024

13 min Lesezeit

Backups sind ein Muss!

Das regelmäßige Anlegen von Backups in deinem papierlosen Büro, besonders wenn du Paperless-ngx verwendest, ist aus mehreren Gründen unersetzlich:

  • Datensicherung: Alle deine Dokumente, inklusive wichtige Verträge, Rechnungen und persönliche Aufzeichnungen, sind digital gespeichert. Regelmäßige Backups schützen vor Datenverlust durch Hardwaredefekte, Softwareprobleme und versehentliches Löschen. Im Fall von Naturkatastrophen, Diebstahl oder Cyberattacken, bist du in der Lage schnell deine Daten wiederherzustellen und deine Geschäftsprozesse aufrechtzuerhalten.
  • Rechtliche Voraussetzungen: Eventuell bist du rechtlich dazu verpflichtet einige Dokumente über eine gewisse Dauer aufzubewahren. Durch Backups stellst du sicher, dass du bei rechtlichen Prozessen oder Prüfungen die Dokumente verfügbar hast.
  • Versionskontrolle: Mit regelmäßigen Backups kannst du ein zeitliches Archiv deiner Dokumente anlegen. Das ermöglicht dir den Zugriff auf ältere Versionen deiner Dokumente, was nützlich ist um Änderungen zu tracken.

Die 3-2-1 Backup Regel

Vielleicht hast du bereits von der 3-2-1 Backup Regel gehört. Es handelt sich um eine empfohlene Strategie, Backups anzulegen und eine hohe Datensicherheit zu gewährleisten. Die Regel ist simpel aber effektiv.

Die drei Kriterien:

  • 3 Kopien deiner Daten: Erstelle mindestens drei separate Kopien deiner Daten. Das beinhaltet deine Originaldaten in Paperless und zwei zusätzliche Backups. Falls ein Backup Fehler wirft, hast du noch eine andere Option deine Daten wiederherzustellen.
  • 2 verschiedene Geräte: Speicher diese Backups auf mindestens zwei verschiedenen Geräten. Das können Festplatten oder Cloud-Speicher sein. Verschiedene Speichertechnologien haben verschiedene Schwachstellen und das Diversifizieren auf mehrere Typen schützt dich vor gerätespezifischen Risiken.
  • 1 externer Standort: Mindestens eins der Backups solltest du an einem anderen Ort aufbewahren. Das schützt deine Daten im Fall von Naturkatastrophen oder Diebstahl in deinem Hauptbüro. Für externe Backups werden gerne Cloud-Speicher verwendet, weil du von überall darauf zugreifen kannst.

Die 3-2-1 Backup Regel zu implementieren, hilft dir effektiv deine Daten zu schützen, weil du auf mehrere Speichertypen und Orte diversifizierst.

Vorüberlegung: Wo willst du deine Daten sichern?

Wenn du die 3-2-1 Backup Regel befolgen möchtest, kannst du dir jetzt überlegen, wo du deine Daten sichern möchtest.

Ich zeige dir exemplarisch die Einrichtung einer Paperless Backup Automatisierung von Linux auf Google Drive unter Verwendung des Open-Source-Tools rclone.

Auf den meisten NAS oder VPS läuft eine Linux Distribution. Deswegen sollten die Schritte geräteunabhängig ziemlich ähnlich sein.

Was ist rclone?

Rclone ist ein Programm für die Erstellung von Backups auf Cloud Speichern, läuft unter Linux, macOS und Windows, und unterstützt über 70 Cloud-Anbieter (Google Drive, OneDrive, Dropbox, Amazon S3 etc.)

Rclone spiegelt deine Daten von deinem Server auf den Cloud-Speicher. Somit muss nicht bei jeder Änderung alles neu hochgeladen werden. Damit der Cloud-Anbieter deine Daten nicht auslesen kann, werden wir zusätzlich das Backup mit rclone verschlüsseln.

Voraussetzungen

Voraussetzung für diese Anleitung ist, dass du Paperless-ngx bereits erfolgreich installiert und mit ein paar Dokumenten gefüttert hast. Außerdem brauchst du ein Konto bei einem Cloud-Anbieter. Ich nutze hier Google Drive. Die nachfolgenden Schritte sind aber sehr ähnlich und teilweise einfacher für andere Cloud-Anbieter.

Paperless Document Exporter

Es gibt verschiedene Wege Paperless-ngx Backups zu machen. Ich empfehle dir den nativen “Paperless Document Exporter” & “Importer” zu verwenden, anstatt einfach deinen gesamten Paperless Ordnern zu kopieren. Da Paperless bei dir wahrscheinlich in Docker läuft, kann es sein, dass ein Teil der Daten in Docker Volumes liegt. Den Document Exporter kannst du mit nur einem Befehl ausführen und es exportiert nicht nur alle Dateien, sondern auch jegliche Konfigurationen, Benutzerkonten, Tags und alles was der Algorithmus gelernt hat.

Schritt 1: rclone installieren

Logge dich per SSH in deinen Server ein und führe den Befehl aus für die Installation von rclone über snap:

sudo snap install rclone

Der snapstore deamon muss dafür installiert sein (ist in der Regel auf Ubuntu vorinstalliert). Falls der Befehl oben fehlschlägt, installiere vorher den snapstore deamon:

sudo apt update
sudo apt install snapd

Für diese Anleitung ist es wichtig, dass rclone auf einem Gerät mit Webbrowser (zusätzlich) installiert ist, um einen Token für die Verbindung mit dem Cloud-Anbieter abrufen zu können (siehe Schritt 3).

Da ich einen VPS ohne Webbrowser nutze, installiere ich rclone zusätzlich auf meinem Mac. Dazu verwende ich den Paketmanager homebrew:

brew install rclone

Downloads für andere Betriebssysteme findest du hier.

Schritt 2: Google Client-ID erstellen

Logge dich in die Google API Konsole ein . Es muss dasselbe Konto sein, über das du Google Drive verwenden möchtest.

Wähle ein Projekt aus oder erstelle ein neues Projekt.

Google Projekt erstellen

Google Projekt erstellen

Unter APIs und Dienste klicke auf + APIS UND DIENSTE AKTIVIEREN und suche nach Drive und aktiviere die Google Drive API.

Google Drive API auswählen

Google Drive API auswählen

Google Drive API aktivieren

Google Drive API aktivieren

Klicke in der linken Seitenleiste auf Anmeldedaten und dann auf ZUSTIMMUNGSBILDSCHIRM KONFIGURIEREN.

Zustimmungsbildschirm konfigurieren

Zustimmungsbildschirm konfigurieren

Wähle Extern und klicke auf ERSTELLEN. Dann gib einen Anwendungsnamen ein, die Nutzersupport-E-Mail (deine eigene E-Mail ist ok) und Kontaktdaten des Entwicklers (deine eigene E-Mail ist ok). Klicke auf SPEICHERN UND FORTFAHREN (alle anderen Daten sind optional).

Anwendungsinformationen hinzufügen

Anwendungsinformationen hinzufügen

Klicke auf BEREICHE HINZUFÜGEN ODER ENTFERNEN. Füge die Bereiche mit dem Umfang .../auth/docs, .../auth/drive und .../auth/drive.metadata.readonly hinzu, damit du Dateien mit rclone bearbeiten, erstellen und löschen kannst. Klicke danach auf AKTUALISIEREN und dann SPEICHERN UND FORTFAHREN.

Zugangsbereiche hinzufügen

Zugangsbereiche hinzufügen

Füge dein eigenes Konto als Testnutzer hinzu. Dann klicke auf SPEICHERN UND FORTFAHREN.

Klicke dann in der linken Seitenleiste wieder auf Anmeldedaten. Klicke auf + ANMELDEDATEN ERSTELLEN und wähle OAuth-Client-ID.

Anmeldedaten erstellen

Anmeldedaten erstellen

Wähle als Anwendungstyp Desktopanwendung aus und klicke auf ERSTELLEN.

OAuth-Client-ID erstellen

OAuth-Client-ID erstellen

Jetzt siehst du die Client-ID und den Clientschlüssel. Kopiere dir beide! Wir brauchen diese in Schritt 3 für rclone.

Client-ID und Clientschlüssel für die Authentifizierung

Client-ID und Clientschlüssel für die Authentifizierung

Klicke in der linken Seitenleiste auf OAuth-Zustimmungsbildschirm und klicke dann auf ANWENDUNG VERÖFFENTLICHEN und bestätige.

Schritt 3: rclone mit Google Drive verbinden

Gehe zurück in dein Terminal und lege eine neue Remote-Verbindung mit rclone an. Der Befehl dazu lautet:

rclone config
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>

Gib n ein, um ein neues Remote anzulegen. Dann gib einen Namen für das Remote ein (z. B. gdrive).

Anschließend wählst du den Cloud-Anbieter aus. Dazu gibst du die richtige Nummer ein (17 für Google Drive).

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
...
17 / Google Drive
   \ (drive)
...
Storage> 17

Danach fügst du die Client-ID aus Schritt 2 ein:

Option client_id.
Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a value. Press Enter to leave empty.
client_id> meine-client-id

Danach fügst du den Clientschlüssel aus Schritt 2 ein:

Option client_secret.
OAuth Client Secret.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_secret> mein-client-secret

Wähle die Zugangsrechte für rclone durch Eingabe einer Zahl aus (damit das Backup funktioniert reicht Nummer 3).

Option scope.
Comma separated list of scopes that rclone should use when requesting access from drive.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
 1 / Full access all files, excluding Application Data Folder.
   \ (drive)
 2 / Read-only access to file metadata and file contents.
   \ (drive.readonly)
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
   \ (drive.file)
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ (drive.appfolder)
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ (drive.metadata.readonly)
scope> 3

Den nächsten Schritt kannst du leer lassen durch Eingabe von ENTER.

Option service_account_file.
Service Account Credentials JSON file path.
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.
Enter a value. Press Enter to leave empty.
service_account_file>

Danach wählst du den Default durch Eingabe von ENTER.

Edit advanced config?
y) Yes
n) No (default)
y/n>

Falls dein Server keinen Webbrowser hat, gib n ein.

Use web browser to automatically authenticate rclone with remote?
 * Say Y if the machine running rclone has a web browser you can use
 * Say N if running rclone on a (remote) machine without web browser access
If not sure try Y. If Y failed, try N.
y) Yes (default)
n) No
y/n> n

Kopiere dir die gesamte Zeile, die mit rclone authorize "drive" startet und führe sie auf deinem Computer aus. Öffne dazu einen neuen Tab in deinem Terminal. Dein Webbrowser sollte starten und du kannst dich in dein Google-Konto einloggen. Dann kopierst du dir den Token und fügst ihn in deinem Server Terminal wieder ein.

Option config_token.
For this to work, you will need rclone available on a machine that has
a web browser available.
For more help and alternate methods see: https://rclone.org/remote_setup/
Execute the following on the machine with the web browser (same rclone
version recommended):
	rclone authorize "drive" "sehr-langer-code"
Then paste the result.
Enter a value.
config_token> mein-token

Wähle den Default durch Eingabe von ENTER:

Configure this as a Shared Drive (Team Drive)?
y) Yes
n) No (default)
y/n> n

Du bekommst eine Zusammenfassung deiner Konfiguration angezeigt. Drücke ENTER.

Keep this "gdrive" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y

Damit ist die Verbindung zu deinem Google Drive Konto hergestellt.

Schritt 4: rclone crypt Remote erstellen

Wir erstellen jetzt ein weiteres Remote. Dieses Remote bildet eine Verschlüsselungsebene über dem Cloud-Speicher Remote, das wir eben erstellt haben. Wenn du das Backup nicht verschlüsseln möchtest, kannst du diesen Schritt überspringen und mit Schritt 5 fortfahren. Der Vorteil eines unverschlüsselten Backups ist, dass du die Google Drive OCR Suche verwenden kannst, um auch in Google Drive schnell deine Dokumente zu finden.

Starte die Konfiguration wieder mit rclone config und erstelle ein neues Remote (n). Du kannst es z. B. gdrive_encrypted nennen.

Danach wählst du aus der Liste der Anbieter crypt aus durch Eingabe der Nummer 13.

Im Anschluss gibst du den Namen des Google Drive Remote an mitsamt dem gewünschten Pfad, wo das Backup gespeichert werden soll. Mein Remote heißt gdrive und ich möchte das Backup in einem Ordner mit der Bezeichnung paperless_backup_encrypted ablegen. Also gebe ich gdrive:paperless_backup_encrypted ein:

Option remote.
Remote to encrypt/decrypt.
Normally should contain a ':' and a path, e.g. "myremote:path/to/dir",
"myremote:bucket" or maybe "myremote:" (not recommended).
Enter a value.
remote> gdrive:paperless_backup_encrypted

Danach wählst du die Verschlüsselung der Dateinamen aus. Ich nehme den Default durch Eingabe von ENTER:

Option filename_encryption.
How to encrypt the filenames.
Choose a number from below, or type in your own string value.
Press Enter for the default (standard).
   / Encrypt the filenames.
 1 | See the docs for the details.
   \ (standard)
 2 / Very simple filename obfuscation.
   \ (obfuscate)
   / Don't encrypt the file names.
 3 | Adds a ".bin", or "suffix" extension only.
   \ (off)
filename_encryption> 1

Danach wählst du die Verschlüsselung der Ordnernamen aus. Ich nehme wieder den Default:

Option directory_name_encryption.
Option to either encrypt directory names or leave them intact.
NB If filename_encryption is "off" then this option will do nothing.
Choose a number from below, or type in your own boolean value (true or false).
Press Enter for the default (true).
 1 / Encrypt directory names.
   \ (true)
 2 / Don't encrypt directory names, leave them intact.
   \ (false)
directory_name_encryption> 1

Danach setzt du zwei Passwörter für die Verschlüsselung. Ich lasse mir die Passwörter mit der maximalen Länge generieren:

Option password.
Password or pass phrase for encryption.
Choose an alternative below.
y) Yes, type in my own password
g) Generate random password
y/g> g
Password strength in bits.
64 is just about memorable
128 is secure
1024 is the maximum
Bits> 1024
Your password is: dCGprYdlIOtBGa5ozP7H2VM6uXRp_KlwH5OfEoufl-IOgJKXXSWNVKR92K0vf72u1oj3MM9CoEuEgnKTEyxh2na8LtGn-X6v3EGzNkr-UXrBg38pxrijclE0_jtOz1q0ldJe0X9Z918Fd0ZxDmAwT3IqjyTEXhs9bJMedYhyk9w
Use this password? Please note that an obscured version of this
password (and not the password itself) will be stored under your
configuration file, so keep this generated password in a safe place.
y) Yes (default)
n) No
y/n> y
Option password2.
Password or pass phrase for salt.
Optional but recommended.
Should be different to the previous password.
Choose an alternative below. Press Enter for the default (n).
y) Yes, type in my own password
g) Generate random password
n) No, leave this optional password blank (default)
y/g/n> g
Password strength in bits.
64 is just about memorable
128 is secure
1024 is the maximum
Bits> 1024
Your password is: XuL0KVb8vQWnIodgem7qWTlD6vrZKt18dgUmMAK61v1coMUt7DCc6EMPww4viD7YcQDcE78miAKBg9L9Qm8mx2kXiyquMUXrvND-BC9qcJMp95cJsPrsocVxQ26b1aU7aXa3glZre69phmqICZVb6ijfo_-61KRiOsBNCt-QKkA
Use this password? Please note that an obscured version of this
password (and not the password itself) will be stored under your
configuration file, so keep this generated password in a safe place.
y) Yes (default)
n) No
y/n> y
Edit advanced config?
y) Yes
n) No (default)
y/n> n
Configuration complete.

Kopiere dir die Passwörter und speichere sie an einem sicheren Ort. Damit ist die Konfiguration des Crypt-Remote abgeschlossen. Bestätige mit ENTER und schließe den Prozess mit STRG+C.

Schritt 5: Backup Skript erstellen

Ich zeige dir jetzt wie du ein Skript erstellst, das beim Ausführen ein Backup für dich anlegt. Gehe in den Ordner, wo du das Skript speichern möchtest. In meinem Fall gehe ich in den paperless-ngx Ordner:

cd paperless-ngx

Dann erstelle eine neue Datei:

sudo nano backup.sh

Dann fügst du das Skript ein. Mein Skript ist bewusst sehr simpel gehalten. Du kannst es übernehmen, musst jedoch den absoluten Pfad zu deiner docker-compose.yml Datei und zu deinem Export-Ordner anpassen:

#!/bin/bash
# Pfad zu deiner docker-compose.yml
cd /home/tobias
# führe den Paperless Document Exporter aus
# speichere das Backup in dem export Ordner
docker compose exec -T webserver document_exporter ../export
# rclone Befehl, um das Backup zu verschlüsseln und mit der Cloud zu synchronisieren
/snap/bin/rclone sync /home/tobias/paperless-ngx/export gdrive_encrypted:

Speichere und schließe die Datei danach mit STRG+C, Y und ENTER.

Schritt 6: Backup Skript ausführbar machen und testen

Damit du das Skript ausführen kannst, gibst du diesen Befehl ein:

chmod +x backup.sh

Teste jetzt, ob dein Skript funktioniert, indem du es über die Befehlszeile ausführst:

./backup.sh

Je nachdem wie groß das Backup ist, kann es einige Minuten in Anspruch nehmen. Der Prozess sollte sich automatisch beenden.

100%|██████████| 265/265 [00:00<00:00, 332.70it/s]

Wenn du jetzt Google Drive in deinem Webbrowser öffnest, solltest du einen neuen Ordner in deiner Ablage finden. In diesem Ordner befinden sich die verschlüsselten Daten aus Paperless.

Google Drive Ordner mit verschlüsseltem Backup

Google Drive Ordner mit verschlüsseltem Backup

Schritt 7: Backup automatisieren mit Cronjob

Jetzt legen wir einen neuen Cronjob an, der das Skript zu einem definierten Zeitpunkt automatisch ausführt:

crontab -e

Wenn das Skript z. B. täglich um 3:00 Uhr morgens ausgeführt werden soll, füge folgende Zeile am Ende der Datei ein:

0 3 * * * /home/tobias/paperless-ngx/backup.sh >> /home/tobias/paperless-ngx/backup.log 2>&1

Hier musst du den absoluten Pfad zu deinem Backup Skript angeben und den Pfad wo die Log-Datei angelegt werden soll. Speichere und schließe die Datei. Wenn du crontab -l ausführst, solltest du eine Liste deiner Cronjobs inklusive der hinzugefügten Zeile sehen.

Wie du Paperless mit einem Backup wiederherstellst

Zunächst solltest du unbedingt die Passwörter für die Backup-Verschlüsselung sicher aufbewahren. Denn falls dein Server nicht mehr erreichbar sein sollte, bringt dir das Backup nichts mehr, da du es nicht entschlüsseln kannst.

Falls dein Server ausgefallen ist und du keinen Snapshot hast, musst du prinzipiell rclone und Paperless neu auf deinem Server installieren. Dazu befolgst du die gleichen Schritte und wählst dann kein neues Passwort für das Crypt-Remote, sondern fügst die bisherigen Passwörter ein. Damit kann rclone dein Backup wieder entschlüsseln.

Führe danach den rclone sync Befehl aus, um das Backup zu importieren:

rclone sync gdrive_encrypted: /home/tobias/paperless-ngx/export

Sobald dein Paperless Export-Ordner wieder befüllt ist, kannst du deine Paperless Instanz mit dem Document Importer wiederherstellen:

docker compose exec webserver document_importer ../export

Abschließende Bemerkungen

Die vorgestellte Paperless Backup Automatisierung, kannst du ähnlich mit anderen Cloud Anbietern modellieren. In der Regel reicht ein API-Schlüssel oder Client-ID mit Clientschlüssel für die Authentifizierung aus.

Wenn du den Document Exporter ausführst, enthält der Export-Ordner in deinem Paperless Verzeichnis alles, um deine Instanz wiederherzustellen.

Wenn du Backups auf lokale Festplatten machen möchtest, kannst du einfach den Inhalt des Export-Ordners kopieren. Dazu kannst du Tools wie rsync verwenden gepaart mit einem Cronjob. Manche NAS Betriebssysteme haben bereits lokale Backup Funktionen integriert.

🛠️ Paperless-ngx IT-Support 🛠️

Du benötigst Unterstützung bei der Installation oder Konfiguration von Paperless-ngx? Ich helfe dir gerne weiter! Schreib mir einfach eine Mail an: hello@digitizerspace.com

Hinterlasse einen Kommentar

Deine E-Mail Adresse wird nicht veröffentlicht.