Paperless NGX - Backup Skript von Deployn

  • Moin zusammen,

    ich bin beim Vertiefen meines Wissens über dieses Paperless NGX Backup-Skript gestolpert.

    Hier geht es zur Webseite des Entwickers

    Hat Da schon jemand Erfahrungswerte sammeln können? Wäre das auch für die Ugreen umsetzbar?

    Beste Grüße,

    Stefan

    Fritzbox 6660 - Cabel | DXP 4800 Plus | Speicher 1 x Samsung 8 GB & 32 GB Kingston KVR56S46BD8-32 | Raid 1- Vol1; 2 x Kingston SNV3S 2TB | Raid 1- Vol 2; 2 x 4 TB 870 EVO 4TB (2,5")

  • Moin zusammen,

    ich habe mir das jetzt soweit hingefummelt und kann sehr gut damit leben. Für die Nachwelt habe ich das mal kurz zusammengefasst.

    Ich für meinen Teil bin durch mit dem Thema Backup :D

    🏛️ Das Konzept (3-Stufen-Strategie)

    1. Konsistenz (Local Backup): Ein Skript zieht jede Nacht einen sauberen SQL-Dump (pg_dump) und synchronisiert die PDFs (document_exporter) in einen lokalen Backup-Ordner auf dem NAS.
    2. Automation (Cron): Der Linux-Cronjob führt das Skript automatisch aus (Sonntags 03:00 Uhr).
    3. Sicherheit (Duplicati): Ein Duplicati-Container verschlüsselt diesen sauberen Ordner und schiebt ihn auf eine externe USB-Platte (oder Cloud).

    🛠️ Schritt 1: Das Backup-Skript (Der "Dumper")

    Anstatt einfach den Docker-Ordner zu kopieren (Gefahr von korrupten Datenbanken!), nutzen wir die internen Tools von Paperless.

    Pfad: /volume1/docker/paperless-ngx/scripts/paperless-backup.sh

    Das macht das Skript:

    1. Erstellt einen SQL-Dump der laufenden Datenbank.
    2. Exportiert neue Dokumente inkrementell (spart Speicher).
    3. Sichert die docker-compose.yaml.
    4. Rotation: Löscht automatisch alles, was älter als 3 Versionen ist (Keep last 3).

    Bash


    Hinweis: Damit das klappt, muss in der docker-compose.yaml der Pfad ./backup in die Container gemountet sein!


    ⏰ Schritt 2: Die Automatisierung (Cronjob)

    Da UGOS Pro aktuell keinen detaillierten GUI-Planer für Root-Skripte hat, wird der Job via SSH eingetragen.

    Befehl: sudo crontab -e Eintrag (jeden Sonntag 03:00 Uhr):

    Code-Snippet


    Code
    0 3 * * 0 /bin/bash /volume1/docker/paperless-ngx/scripts/paperless-backup.sh

    🔒 Schritt 3: Die externe Sicherung (Duplicati)

    Das Skript legt die Daten nur "sauber" auf das NAS. Für den Schutz vor Festplattenausfall nutzt ich Duplicati als Docker-Container.

    Docker-Volume Mapping (Flexibel):

    • Quell-Zugriff: - /volume1:/source (Damit kann ich alles auf dem NAS auswählen)
    • Ziel-Zugriff: - /mnt/@usb/sdb1:/target_usb (Zugriff auf den USB-Stick)

    Duplicati Job:

    • Quelle: /source/docker/paperless-ngx/backup
    • Ziel: /target_usb/Paperless_Encrypted
    • Zeitplan: Sonntags 04:00 Uhr (1 Std. nach dem Skript).
    • Methode: Smart Retention (behält Versionen über Monate hinweg, sehr platzsparend dank Deduplizierung).

    ♻️ Schritt 4: Der Restore (Notfallplan)

    Sollte das NAS abrauchen, gehe ich so vor:

    1. Paperless Stack neu aufsetzen (leer).
    2. Daten aus Duplicati/USB zurück in den Ordner backup kopieren.
    3. Import via Terminal:

      Bash


      Code
      # Datenbank wiederherstellen
      docker compose exec -T db psql -U paperless -d paperless -f /backup/dump_DATUM.sql
      
      # Dokumente neu einlesen & verknüpfen
      docker compose exec -T webserver document_importer /usr/src/paperless/export

    Damit habe ich eine 100% saubere Wiederherstellung inkl. aller Tags, User und Pfade.

    Vielleicht hilft das dem ein oder anderen Ugreen-Besitzer hier!

    Beste Grüße, Stefan

  • Hi!

    Zunächst einmal vielen Dank für deine ausführliche Anleitung.

    Ich habe den heutigen Tag damit verbracht, mir endlich mal ein vollumfängliches Backup-Skript für meine Paperless-ngx Instanz zu basteln. Dabei bin ich zunächst über die von dir angesprochene Deployn Website gestolpert und unmittelbar danach auf deinen Beitrag hier im Forum. Wie sollte es anders sein, habe ich natürlich einige Dinge anders gemacht als du und der Andere und vielleicht stelle ich das irgendwann auf meinem GitHub Auftritt der breiten Masse zur Verfügung. Aber darum geht es mir im Moment gar nicht.

    Du schreibst ziemlich am Ende deiner Anleitung unter dem Punkt Import...

    Code
    # Datenbank wiederherstellen
    docker compose exec -T db psql -U paperless -d paperless -f /backup/dump_DATUM.sql
    
    # Dokumente neu einlesen & verknüpfen
    docker compose exec -T webserver document_importer /usr/src/paperless/export

    ... wobei du hier erwähnen solltest, das man vor der Ausführung sicherstellen sollte, das man sich dabei im Docker-Verzeichnis von Paperless-ngx befinden sollte. Andernfalls müsste man mit dem -f Flag den Pfad zur Docker-Compose Datei angeben. Geschenkt.

    Was ich jedoch nicht verstehe ist, warum du in der untersten Zeile als Pfad /usr/src/paperless/export angegeben hast? Verweist dieser Pfad nicht auf den "internen" und damit flüchtigen Paperless-ngx Ordner? Müsste es hier nicht eher /volume1/docker/paperless-ngx/export heißen, um bei deinem Beispiel zu bleiben? Oder besser noch: Muss hier überhaupt ein Pfad angegeben werden, sucht der document_importer doch standardmäßig im /import/originals Verzeichnis, worin zu importierenden Daten eigentlich liegen sollten?


    Als kleine Erweiterung bzw. Verbesserung für dein Skript würde ich dir empfehlen, zunächst zu überprüfen, ob der Paperless- und/oder der PostgreSQL Container überhaupt läuft, bevor du damit beginnst, einen Export oder Dump auszuführen. Das könntest du z.B. so überprüfen...

    Code
    if [[ $(docker inspect -f '{{.State.Running}}' POSTGRESQL-CONTAINER-NAME 2>/dev/null) ]]; then
    	docker compose -f "$PROJECT_DIR/docker-compose.yaml" exec ... ...
    else
    	...
    fi

    Nur ein Vorschlag. Ich hab das bei mir so gemacht und ggf. eine entsprechende Fehlermeldung in einem Protokoll ausgegeben.

    Code
    - Der Container [ Paperless-ngx-PostgreSQL ] ist aktuell nicht in Betrieb!
      Die Sicherung der PostgreSQL-Datenbank kann daher nicht durchgeführt werden.

    FRITZ!Box 5590 Fiber | UniFi Express 7 | 2,5-GBit-LAN & Wi-Fi 7
    DXP2800 - 1TB Crucial P310 NVMe RAID1 - 2TB Crucial MX500 SSD RAID1 - 16 GB Crucial CT16G56C46S5 (5600Mhz)
    DS224+ 3TB WD Red HDD RAID1 18GB Ram | DS124 1TB Samsung 870 EVO SSD
    Linux Mint | Ubuntu-Server | Windows | iOS | iPadOS
    UGREEN.FORUM/Filebase | Synology-forum/Add-ons | GitHub.com/toafez

    Edited 3 times, last by Tommes: Ein Beitrag von Tommes mit diesem Beitrag zusammengefügt. (December 15, 2025 at 5:21 PM).

  • Falls es jemanden interessiert!

    Ich habe mein eigenes Paperless-ngx Backup-Script geschrieben und euch auf GitHub zur Verfügung gestellt.

    Tommes
    April 6, 2026 at 9:51 AM

    Viel Spaß damit

    FRITZ!Box 5590 Fiber | UniFi Express 7 | 2,5-GBit-LAN & Wi-Fi 7
    DXP2800 - 1TB Crucial P310 NVMe RAID1 - 2TB Crucial MX500 SSD RAID1 - 16 GB Crucial CT16G56C46S5 (5600Mhz)
    DS224+ 3TB WD Red HDD RAID1 18GB Ram | DS124 1TB Samsung 870 EVO SSD
    Linux Mint | Ubuntu-Server | Windows | iOS | iPadOS
    UGREEN.FORUM/Filebase | Synology-forum/Add-ons | GitHub.com/toafez

  • Falls es jemanden interessiert!

    Ich habe mein eigenes Paperless-ngx Backup-Script geschrieben und euch auf GitHub zur Verfügung gestellt.

    Hallo Tommes,

    vielen Dank für deine Hinweise und entschuldige bitte, dass ich mich erst heute dazu melde. Ich habe mir einen Teil meiner Leber ausbauen lassen, weil da was drin war, was da nicht hingehörte. Nun denn, das Leben geht weiter ... . Insbesondere der Hinweis auf den export-Ordner war sehr gut. - manchmal sieht man den Wald vor lauter Bäumen nicht :-D.

    Ich habe gelesen, dass Du ein eigenes Skript gebaut hast. Ich werde mir das die nächsten Tage mal anschauen und ggf. auch wechseln, weil ich denke, dass Du bestimmt noch an Dinge gedacht hast, die ich nicht auf dem Schirm hatte. ;)

    Beste Grüße,

    Stefan

    Fritzbox 6660 - Cabel | DXP 4800 Plus | Speicher 1 x Samsung 8 GB & 32 GB Kingston KVR56S46BD8-32 | Raid 1- Vol1; 2 x Kingston SNV3S 2TB | Raid 1- Vol 2; 2 x 4 TB 870 EVO 4TB (2,5")

  • Oh, ha! Das hört sich sehr mechanisch an, wenn du schreibst … ausbauen lassen … aber ich hoffe doch mal schwer, das es dir den Umständen entsprechend gut geht. Daher weiterhin gute Besserung.

    Was mein Skript angeht, so schau es dir gerne in Ruhe an, Teste es ausgiebig und falls Fragen offen bleiben, dann immer raus damit. Vielleicht fällt dir ja auch noch was auf oder ein, was ich noch einbauen könnte. Ausbauen, einbauen… oh, man!

    Guten Rutsch

    FRITZ!Box 5590 Fiber | UniFi Express 7 | 2,5-GBit-LAN & Wi-Fi 7
    DXP2800 - 1TB Crucial P310 NVMe RAID1 - 2TB Crucial MX500 SSD RAID1 - 16 GB Crucial CT16G56C46S5 (5600Mhz)
    DS224+ 3TB WD Red HDD RAID1 18GB Ram | DS124 1TB Samsung 870 EVO SSD
    Linux Mint | Ubuntu-Server | Windows | iOS | iPadOS
    UGREEN.FORUM/Filebase | Synology-forum/Add-ons | GitHub.com/toafez

Participate now!

Join our community with over 10,000 members!

Register yourself now for free to get full access to all content, graphics, downloads and other exclusive features!