Anleitung Backup/Restore Paperless ngx?

mindscout

Benutzer
Mitglied seit
25. Jan 2014
Beiträge
269
Punkte für Reaktionen
16
Punkte
18
Hallo,

da es nicht so ganz trivial ist: gibt es eine Anleitung, wie genau man Sicherungen von Paperless ngx anlegt und diese wieder aufspielt?
Enie meiner Diskstations hatte eine defekte Festplatte, leider grade die mit Paperless drauf. Eine Wiederherstellung ist mir nicht geglückt, zum Glück war es aber auch nur eine Testumgebung. Das hat mich aber "wachgerüttelt", damit es nicht mit der tatsächlich produktiv genutzten Version passiert.

Danke und viele Grüße!
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
Wie hast du es denn eingerichtet?
Ich würde dir empfehlen einen DB Dump, die Dateien und die Docker-Compose zu sichern. Damit kannst du es wieder herstellen.
 

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.051
Punkte für Reaktionen
900
Punkte
204
Am einfachsten aus meiner Sicht ist, alle Ordner außerhalb des Containers auf der Festplatte zu speichern („Mapping“), also Konfiguration, Media, und Datenbank gemäß der offiziellen Anleitung und das ganze dann per Hyper Backup zu speichern; bei einem Fehler spiele ich alle Dateien zurück und lege die Container über den Aufgabenplaner per Konfig-File wieder an. Hat mir schon ein paar Mal den Allerwertesten gerettet.

Für den Ausfall oder Fehler der Datenbank brauchst du, wie alexhell schreibt, einen Dump der Datenbank, eine Anleitung dazu findest du hier. Das mache ich noch zusätzlich zu Hyper Backup.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Ich mache ebenfalls einen Dump. Danach sichere ich die Container an sich (also als yml-Datei). Dadurch kann ich die Container bei Bedarf mit einem Befehl wieder genau so starten, wie sie vorher waren. Das Ganze läuft mithilfe des Docker-Images "red5d/docker-autocompose". Danach sichere ich die gemappten Ordner, den Dump und die Container Config mittels Hyper Backup weg.
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
@plang.pl wäre es in deinem Fall eigentlich nicht leichter Portainer zu sichern, also über die API? Dann musst du nur ein Backup davon einspielen und alle Container sind wieder drin. Weil du verwendest ja überall Portainer. Aber das ist jetzt Offtopic. War nur ein Gedanke :D

Aber so mach ich das auch wie @plang.pl, nur das ich bei mir Portainer einfach sichere. Und die Daten werden mit Hyperbackup gesichert.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Keine Ahnung. Kann schon sein, dass es einfacher wäre, Portainer zu sichern. Damit habe ich mich tatsächlich noch nicht befasst.
Bin aber mit der Script Sicherung ganz zufrieden. Ist halt vielleicht beim Wiedereinspielen ggfs etwas mehr Aufwand, aber das braucht man ja hoffentlich nicht zu oft
 

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
45
Punkte für Reaktionen
13
Punkte
8
Hallo zusammen,
dies ist mein erster Post hier und auch wenn ich mit Computerhardware und Windows Systemen relativ bewandert bin, habe ich in Linux und dann auch noch Docker doch so meine Schwierigkeiten. Wenn ich hier also etwas Blödsinn schreibe und frage, so bitte ich um Nachsicht.

Auch wenn das Thema wahrscheinlich niemand mehr hören kann, habe ich so meine Probleme bei der Sicherung von PaperlessNGX.

Was bisher geschah.

Hardware: synology ds423+ zwei Volumes. Die DockerContainer laufen auf SSDs mit dem Volume 2
Ich habe PaperlessNGX mit der Anleitung von Marius Hosting installiert.
Hier mein Docker Compose:

Code:
version: "3.91"
services:
redis:
image: redis
container_name: PaperlessNGX-REDIS
restart: on-failure:5
volumes:
- /volume2/docker/paperlessngx/redis:/data:rw

db:
image: postgres
container_name: PaperlessNGX-DB
restart: on-failure:5
volumes:
- /volume2/docker/paperlessngx/db:/var/lib/postgresql/data:rw
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD:

webserver:
image: ghcr.io/paperless-ngx/paperless-ngx
container_name: PaperlessNGX
restart: on-failure:5
depends_on:
- db
- redis
- gotenberg
- tika
ports:
- 8777:8000
volumes:
- /volume2/docker/paperlessngx/data:/usr/src/paperless/data
- /volume2/docker/paperlessngx/media:/usr/src/paperless/media
- /volume2/docker/paperlessngx/export:/usr/src/paperless/export
- /volume2/docker/paperlessngx/consume:/usr/src/paperless/consume
environment:
PAPERLESS_REDIS: redis://redis:6379
PAPERLESS_DBHOST: db
USERMAP_UID: 1026
USERMAP_GID: 100
PAPERLESS_TIME_ZONE: Europe/Berlin
PAPERLESS_ADMIN_USER:
PAPERLESS_ADMIN_PASSWORD:
PAPERLESS_URL: https://XYZ.myds.me
PAPERLESS_CSRF_TRUSTED_ORIGINS: https://XYZ.myds.me
PAPERLESS_OCR_LANGUAGE: deu+eng
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000/forms/libreoffice/convert#
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
PAPERLESS_FILENAME_FORMAT: '{created_year}/{created_month}/{document_type}/{correspondent} {document_type} {created} {original_name}'
PAPERLESS_FILENAME_FORMAT_REMOVE_NONE: True

gotenberg:
image: gotenberg/gotenberg
restart: on-failure:5
container_name: PaperlessNGX-GOTENBERG
ports:
- 3000:3000
command:
- "gotenberg"
- "--chromium-disable-routes=true"

tika:
image: ghcr.io/paperless-ngx/tika
container_name: PaperlessNGX-TIKA
ports:
- 9998:9998
restart: always

So wie ich das verstehe, bedeutet es doch, dass die Datenbank Postgres im Ordner /volume2/docker/paperlessngx/db abgelegt wird.
Meine Idee dahinter war, dass ich per Hyperbackup das gesamte Docker Verzeichnis wegsichere.
Bei einem Problem, lasse ich in Portainer die Docker Compose nochmal durchlaufen und sicher dann mittels Hyperbackup alles zurück. So sollten alle Einstellungen Dokumente etc pp an Ort und stelle sein und die gesamte Konfiguration erledigt.

Dem ist leider nicht so und ich weiss nicht recht wo mein Fehler liegt. Ich habe testweise ein paar Dokumente mittels paperless Oberfläche gelöscht und die Wiederherstellung wie oben beschrieben laufen lassen. Die Dokumente liegen auch wieder brav im jeweiligen Ordner werden aber in der GUI nicht angezeigt.

Hier habe ich dann von einem Datenbankdump gelesen.
Mein Versuch sah so aus:
Code:
cd /volume2/docker/paperlessngx/export/
find -mtime +30 -delete
docker exec PaperlessNGX-DB bash -c "pg_dumpall -U paperless | gzip > /var/lib/postgresql/data/backup/pg_dumpall_$(date +%F_%a_%T_%Z).dump.gz"

Auch eine Änderung auf
Code:
docker exec PaperlessNGX-DB bash -c "pg_dumpall -U paperless | gzip > /volume2/docker/paperlessngx/export/pg_dumpall_$(date +%F_%a_%T_%Z).dump.gz"

Ergab die Fehlermeldung no such file or directory.

Ich bin gewillt mich in das Thema einzuarbeiten und im Moment läuft das ganze ja auch nur als Testbetrieb, bis sowohl Datensicherung als auch Wiederherstellung problemlos funkionieren, aber hier komme ich gerade nicht weiter und bin für Input wirklich sehr dankbar.
 

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.051
Punkte für Reaktionen
900
Punkte
204
Die Dokumente liegen auch wieder brav im jeweiligen Ordner werden aber in der GUI nicht angezeigt.
Dein Denkfehler ist, dass du vergisst, dass es nicht nur um die Dokumente geht, sondern eine Verbindung zwischen den Dokumenten und dem Datenbankeintrag gibt – den stellst du mit dem Kopieren eines Dokumentes in den media-Ordner nicht wieder her. Deswegen reicht es auch nicht, einfach irgendwelche Dateien zurück in den Ordner zu legen. Dein grundsätzliches Vorgehen für das Back-up ist aber richtig!

Wenn du also eine Sicherung zurückspielen willst, dann bedeutet das, dass du alle drei Container stoppst, über Hyper Backup den kompletten Ordner von Paperless-ngx mit allen Unterordnern von einem Zeitpunkt deiner Wahl wiederherstellst und dann die Container per Befehl oder Portier neustartest und dann funktioniert das auch wieder mit dem Stand der Datenbank und der Dokumente zum Zeitpunkt deiner eingespielten Sicherung.
 

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
45
Punkte für Reaktionen
13
Punkte
8
Hallo @Monacum
vielen Dank für Deine Antwort. Vielleicht reden wir aneinander vorbei. Deshalb beschreibe ich hier nochmal was ich gemacht habe.

Ich habe in der Weboberfläche von paperless-ngx zwei Dokumente gelöscht. Dann habe ich alle Container gestoppt und per Hyperbackup eine alte Sicherung wieder zurückgespielt.
Dabei wurde der komplette Ordner paperlessngx inkl. der Ordner db, data, media usw usf zurückgespielt und dann die Container wieder gestartet. Ich hätte jetzt erwartet, dass dann die beiden Dokumente wieder da sind. Waren Sie aber nicht.

Dann bin ich testweise hingegangen und habe den kompletten Ordner gelöscht, um einen Datencrash zu simulieren. Habe die Container gestoppt und dann die Ordner zurückgespielt.
Container wieder gestartet. Lief nicht mehr. Wo mache ich hier den Fehler?
 

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.051
Punkte für Reaktionen
900
Punkte
204
Wie hast du Paperless-ngx wieder gestartet, als du die Ordner zurückgespielt hattest?
 
  • Like
Reaktionen: ArcusX

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
45
Punkte für Reaktionen
13
Punkte
8
Ich habe die Daten gelöscht und dann die Container per portainer gestoppt.
Daten zurück und die Container per.Portainer wieder gestartet.
Heißt dass denn dass mein Sicherungsweg erstmal richtig ist? Oder brauche ich so noch zusätzlich eine DB Dump?
 

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.051
Punkte für Reaktionen
900
Punkte
204
Nein, das ist so völlig korrekt, wie du das gemacht hast. Hast du danach den Stack neu deployed?
 

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
45
Punkte für Reaktionen
13
Punkte
8
Oh das weiss ich nicht mehr genau. Ich meine nur neu gestartet.
Wie ist denn die empfohlene Vorgehensweise?

Ich stelle das heute nochmal nach.

Bei der Gelegenheit: Kannst Du mir einen Tipp geben, wie man
a) die Portainereinstellungen sichert?
b) Wie man ein Dokument wieder in die Datenbank bekommt, wenn man es versehentlich gelöscht hat, ohne den Container per backup neu zu starten?

zu a) Bisher sichere ich ebenfalls das komplette Verzeichnis weg. Alle Compose Dateien habe ich zusätzlich per Txt File gespeichert.
zu b) Normalerweise werden Dokumente "abgelehnt", wenn diese ein zweites mal eingelesen werden. Das ist ja auch gut so um Dopplungen zu vermeiden. Aber gibt es einen Weg dies ausnahmsweise zu umgehen?
 

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.051
Punkte für Reaktionen
900
Punkte
204
Bei Portainer kann ich dir leider nicht helfen, ich nutze das nicht. Aber wenn ich nach dem Einspielen eines Backups neu starte, dann verwende ich im Aufgabenplaner diesen Befehl, der sicherstellt, dass das aktuellste Image genutzt wird

docker-compose pull docker-compose up -d

Der zweite Befehl, „Builds, (re)creates, starts, and attaches to containers for a service.“, startet also nicht einfach nur den vorhandenen Container neu.

Wie man ein Dokument wieder in die Datenbank bekommt, wenn man es versehentlich gelöscht hat, ohne den Container per backup neu zu starten?
Einfach neu einlesen 🤷‍♂️ wenn das Dokument abgelehnt wird als Duplikat, dann ist es, aus welchem Grund auch immer nicht korrekt gelöscht worden, dann muss es zumindest in der Datenbank ja noch irgendwo vorhanden sein, was dann dazu führt, dass Paperless-ngx es ablehnt. Ich habe diesen Fall allerdings bei mir selbst noch nie gehabt.
 
  • Like
Reaktionen: ArcusX

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
45
Punkte für Reaktionen
13
Punkte
8
Soderle.
Vielen Dank für die Hilfe @Monacum
Ich finde es immer schön, wenn man sich über Foren gegenseitig bei Problemen hilft und so Wissen mit anderen teilt. Am Ende geht es dann doch immer allen besser. Ich würde mich trauen in Zukunft noch mehr dämliche Fragen zu paperless zu stellen.

Ich bin jetzt testweise mal hingegangen und habe im laufenden Betrieb alle Ordner, welche zu paperless gehören gelöscht. Dann habe ich die Container gestoppt und per Hyperbackup, alle Ordner wieder zurückgespielt. Dann die Container wieder gestartet und siehe da es funktioniert.

So recht, weiss ich nicht, was ich beim letzten mal anders oder falsch gemacht habe, aber immerhin bin ich so recht sicher, dass die Daten ziemlich sicher sind.

Auch wäre ich furchtbar neugierig, wie ich denn trotzdem per bash Befehl einen Datenbank Dump hinbekomme.

Kann man eigentlich im Nachhinein das Medienverzeichnis verschieben bzw verändern? Im Augenblick liegt alles auf SSDs. Da ist zwar noch genug Platz, aber eigentlich wäre es wahrscheinlich vernünftiger die Dokumente auf das HDD Volume zu verlegen. Nach meinem Verständnis müsste doch ein reines umdefinieren funktionieren, da conainter intern die Verzeichnisse unberührt bleiben, sondern nur wo anders hinzeigen?

Bisher steht da:
Code:
volumes:
- /volume2/docker/paperlessngx/data:/usr/src/paperless/data
- /volume2/docker/paperlessngx/media:/usr/src/paperless/media
- /volume2/docker/paperlessngx/export:/usr/src/paperless/export
- /volume2/docker/paperlessngx/consume:/usr/src/paperless/consume

Wenn ich das in den Containereinstellungen auf
Code:
volumes:
- /volume2/docker/paperlessngx/data:/usr/src/paperless/data
- /volume1/paperlessngx/media:/usr/src/paperless/media
- /volume1/paperlessngx/export:/usr/src/paperless/export
- /volume1/paperlessngx/consume:/usr/src/paperless/consume

ändere, bleibt doch für die Datenbank alles gleich, oder?
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
Ja das kannst du so machen. Das ist für den Container egal.
 
  • Like
Reaktionen: ArcusX

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
45
Punkte für Reaktionen
13
Punkte
8
Lässt sich also zusammenfassen:
Wenn man es bei paperless einfach haben möchte, legt man die datei per Umgebungsbefehl in eine eigene Datenbank mit eigenem Datenbankverzeichnis und schon kann man das einzeln bequem per hyperbackup wegsichern, ohne dass man sich mit Datenbankdumps herumschlagen muss.

Vielleicht hilft das ja dem einem oder anderen, der in naher oder ferner Zukunft über den Thread stolpert.
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
Wenn du PSQL verwendest und die DB Version sich unterscheidet dann hilft dir das Hyper Backup nicht. Da brauchst du einen Dump oder musst die selbe Version der DB installieren
 

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
45
Punkte für Reaktionen
13
Punkte
8
he?
Ok eine neue Variante wird aufgemacht. Im Augenblick habe ich es so eingestellt, dass alle 24h per hyperbackup eine Sicherheitskopie gezogen wird. Darin sind die Dokumente als auch die Datenbankordner enthalten. Wenn jetzt der Schadensfall eintritt, ist doch der DB Ordner mit gesichert.
Also Folge ist doch die letzte Version der Datenbank mit gespeichert. Ich muss nur die Container neu starten und es läuft wieder, sofern in der Zwischenzeit kein DB update gemacht worden ist. Das hatte ich zuvor per watchtower automatisiert, habe ich jetzt aber erstmal rausgenommen, so dass das erstmal kein Problem darstellt.

Wenn ich jetzt die DB manuell update und dabei etwas schiefgeht, müsste ich doch trotzdem per backup auf die alte Version zurück kommen, oder übersehe ich hier etwas?

Vielen Dank für die hilfreichen Überlegungen und Anregungen.
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
Wenn dein System jetzt ein Jahr läuft und du immer Backups machst und deine DB nie aktualisierst und dann geht was schief, dass du es neu machen musst, dann musst du die selbe Version nutzen. Wenn du bei PSQL latest als Tag hast, dann bekommst du vielleicht eine andere Major Version als du benutzt hast und dann geht dein Backup ohne Dump nicht mehr. Bzw. könnte nicht mehr gehen....
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat