Heute schauen wir uns mein Backup Skript für Paperless Ngx an.
Im Backup enthalten:
- alle Dokumente
- alle Einstellungen
- alle Thumbnails
- alle OCR Scans
nicht enthalten:
- Docker Einstellungen (Usershares – sind bewusst nicht enthalten da hier ein einspielen in jede neue Paperless NGX Instanz möglich ist und Unraid euch ja die Docker XML sowieso weg sichert
Somit könnt ihr bei einem Systemcrash eure Daten einfach wiederherstellen auf jedem System.
Als erstes müssen wir herausfinden wie unser Paperless Container genau heißt.
docker ps | grep paperless

Hier sehen wir den Dockernamen: „paperless-ngx“ diesen benötigen wir für folgendes Skript
#!/bin/bash # Backup-Script für Paperless # Name des Paperless-Containers mit "docker ps | grep paperless" den richtigen Namen ermitteln CONTAINER_NAME="paperless-ngx" # Zielverzeichnis für das Backup BACKUP_DIR="/mnt/user/Backups/Paperless" # Anzahl der zu behaltenden Sicherungen BACKUP_COUNT=7 ############ keine Bearbeitung mehr unter dieser Zeile ############ # Aktuelles Datum und Uhrzeit im Format YYYY-MM-DD_HH-MM-SS CURRENT_DATE=$(date +"%Y-%m-%d_%H-%M-%S") # Überprüfe, ob das Zielverzeichnis existiert if [ ! -d "$BACKUP_DIR" ]; then echo "Fehler: Das Zielverzeichnis '$BACKUP_DIR' existiert nicht." exit 1 fi # Führe den document_exporter Befehl im Paperless-Container aus docker exec $CONTAINER_NAME document_exporter /usr/src/paperless/export -z -zn "$CURRENT_DATE" # Kopiere das Backup-Archiv aus dem Container in das Backup-Verzeichnis docker cp $CONTAINER_NAME:/usr/src/paperless/export/"$CURRENT_DATE.zip" "$BACKUP_DIR/$CURRENT_DATE.zip" # Lösche die Backup-Datei im Container nach erfolgreichem Kopieren docker exec $CONTAINER_NAME rm -f /usr/src/paperless/export/"$CURRENT_DATE.zip" # Behalte nur die letzten BACKUP_COUNT Backups im Backup-Verzeichnis cd "$BACKUP_DIR" || exit ls -t | grep -E '\.zip$' | tail -n +$(($BACKUP_COUNT + 1)) | xargs -d '\n' rm -f
Sollte dein Zielverzeichnis nicht richtig sein bzw. nicht existieren wirst du dies im Script sehen.

Sollte alles richtig sein wird es kurz dauern bist folgende Anzeige auftaucht:

Dieses Backup braucht etwas wenn Ihr ein paar Daten habt. Etwas Geduld.
Backup Restore
Um einen Restore auszuführen legt ihr die Zip Datei einfach in /mnt/user/appdata/paperless/
Jetzt suchen wir uns wieder den Docker Namen mit:
docker ps | grep paperless
#!/bin/bash # Restore-Script für Paperless # Name des Paperless-Containers mit "docker ps | grep paperless" den richtigen Namen ermitteln CONTAINER_NAME="paperless" # Verzeichnis, in dem die manuelle Backup-Datei abgelegt wird BACKUP_DIR="/mnt/user/appdata/paperless" ############ keine Bearbeitung mehr unter dieser Zeile ############ # Temporäres Verzeichnis auf dem Host zum Entpacken der .zip-Datei UNPACK_DIR="$BACKUP_DIR/restore_temp" # Pfad im Docker-Container, in dem die Dateien verarbeitet werden sollen CONTAINER_EXPORT_DIR="/usr/src/paperless/export" # Überprüfe, ob das Backup-Verzeichnis existiert if [ ! -d "$BACKUP_DIR" ]; then echo "Fehler: Das Backup-Verzeichnis '$BACKUP_DIR' existiert nicht." exit 1 fi # Überprüfe, ob eine .zip-Datei im Backup-Verzeichnis vorhanden ist BACKUP_FILE=$(ls "$BACKUP_DIR" | grep -E '\.zip$' | head -n 1) if [ -z "$BACKUP_FILE" ]; then echo "Fehler: Keine .zip-Datei im Verzeichnis '$BACKUP_DIR' gefunden." exit 1 fi # Erstelle das temporäre Verzeichnis zum Entpacken if [ ! -d "$UNPACK_DIR" ]; then echo "Erstelle das temporäre Verzeichnis '$UNPACK_DIR'..." mkdir -p "$UNPACK_DIR" fi # Entpacke die .zip-Datei in das temporäre Verzeichnis echo "Entpacke die Backup-Datei '$BACKUP_FILE' in '$UNPACK_DIR'..." unzip -o "$BACKUP_DIR/$BACKUP_FILE" -d "$UNPACK_DIR" # Kopiere die entpackten Dateien in den Docker-Container echo "Kopiere die entpackten Dateien in den Docker-Container..." docker cp "$UNPACK_DIR/." "$CONTAINER_NAME:$CONTAINER_EXPORT_DIR/" # Führe den document_importer Befehl im Docker-Container aus echo "Stelle Dokumente aus '$CONTAINER_EXPORT_DIR' wieder her..." if docker exec $CONTAINER_NAME document_importer "$CONTAINER_EXPORT_DIR"; then echo "Wiederherstellung erfolgreich." # Lösche die .zip-Datei auf dem Host echo "Lösche die Backup-Datei '$BACKUP_FILE' auf dem Host..." rm -f "$BACKUP_DIR/$BACKUP_FILE" # Lösche die entpackten Dateien im temporären Verzeichnis echo "Lösche das temporäre Verzeichnis '$UNPACK_DIR'..." rm -rf "$UNPACK_DIR" # Lösche die Dateien im Docker-Container echo "Lösche die Dateien im Docker-Container..." docker exec $CONTAINER_NAME sh -c "rm -rf $CONTAINER_EXPORT_DIR/*" else echo "Fehler: Die Wiederherstellung ist fehlgeschlagen." exit 1 fi echo "Wiederherstellung abgeschlossen!"