Anleitung Backup/Restore Paperless ngx?

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
52
Punkte für Reaktionen
17
Punkte
8
Ok.
Ich habe mich ja an dem Netzwerkdump versucht, aber da haut etwas nicht hin. Der Versuch ist oben im Post #7 zu sehen. Wenn man mir da einen Tipp geben kann, wäre ich froh. Da komme ich leider nicht weiter.

Zudem tut sich ein neues Problem bzw eine Verfeinerung auf. Ich möchte aus dem Paperless Mediaarchiv "/volume2/docker/paperlessngx/media"
alle Dateien, welche in den letzten 24h dort angelegt worden sind automatisch in ein anderes Verzeichnis kopieren wollen, um sie von dort weiter zu verarbeiten.
Mein erster Gedanke war das per Aufgabenplanung und rsync zu machen, aber so wie ich das sehe gibt es da keine Funktion, die alle Unterordner nach den Dateien des letzten Tages durchsucht und nur diese kopiert. Also muss da so denke ich ein Script hin. Und da kommen dann meine begrenzten Linuxkenntnisse ins Spiel.

Die Struktur ist:

-media
--documents
---archive
----Jahr
-----Monat 1
------Dokumentart A
-------xyz.pdf
------Dokumentart B
-------xyz.pdf
-----Monat 2


Das gehört hier eigentlich nicht rein, ich habe aber auch kein Forum so recht finden können. Wenn ihr so nett seid und mir dennoch hier helfen mögt, so bin ich dafür dankbar. Alternativ mache ich auch gerne in einem anderen Unterforum einen neuen Thread auf, wenn ihr mir den Weg in das korrekte Unterforum weist.

Euch allen einen wundervollen Tag.
 

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
52
Punkte für Reaktionen
17
Punkte
8
Zu Problem 2 habe ich zumindest eine Teillösung, die ich hier mal miteinstelle. Vielleicht ist ja dem einen oder anderem auch geholfen.

Code:
find volume2/docker/paperlessngx/media/documents/originals -type f -name '*.pdf' -mtime -1 -exec cp {} volume1/uebergabe/ \;

Hiermit werden die Dateien der letzten 24h schonmal kopiert. Allerdings gehen die timestamps verloren.
 

DrDeath

Benutzer
Mitglied seit
31. Aug 2018
Beiträge
203
Punkte für Reaktionen
90
Punkte
34
bei dem "cp" noch ein "-p" mit übergeben:

Code:
find volume2/docker/paperlessngx/media/documents/originals -type f -name '*.pdf' -mtime -1 -exec cp -p {} volume1/uebergabe/ \;
 

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
52
Punkte für Reaktionen
17
Punkte
8
@DrDeath Prima. Danke, das funktioniert. Kann ich in dem find Teil es auch noch hinbekommen, dass immer gleich lautenden aber an verschiedenen Stellen stehende Unterordner herausgenommen werden? So ala -exclude dichwillichnicht ?
 

DrDeath

Benutzer
Mitglied seit
31. Aug 2018
Beiträge
203
Punkte für Reaktionen
90
Punkte
34
ja, und zwar mit:

Code:
-not -path "*diesen/pfad/nicht/beachten*"

kann auch mehrfach verwendetet werden:

Code:
find /volume2/docker/paperlessngx/media/documents/originals -type f -name '*.pdf' -mtime -1 \
-not -path "*hier/nicht*" \
-not -path "*und/hier/auch/nicht*" \
-not -path "*geheim*" \
-exec cp -p {} volume1/uebergabe/ \;
 

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
52
Punkte für Reaktionen
17
Punkte
8
Oh das wird aufwendig. Mit einer Variable kann man da nicht arbeiten?
 

DrDeath

Benutzer
Mitglied seit
31. Aug 2018
Beiträge
203
Punkte für Reaktionen
90
Punkte
34
Wieviele "Ausnahmen" brauchst du denn ?
Ansonsten müsstest Du deine Ordnerstruktur ggf. überarbeiten.
 

ArcusX

Benutzer
Mitglied seit
16. Nov 2023
Beiträge
52
Punkte für Reaktionen
17
Punkte
8
24 Ausnahmen pro Jahr. Und die auch nicht immer in jedem Monat. Daher war der Gedanke einer Variablen. Wenn der Ordner XYZ heisst, dann nicht beachten. Wenn das nicht geht, muss ich mir mit den Ordnern etwas einfallen lassen.
 

DrDeath

Benutzer
Mitglied seit
31. Aug 2018
Beiträge
203
Punkte für Reaktionen
90
Punkte
34
Hänge doch an die betroffenen Ordner per script oder etwas anderen etwas spezielles an.... zb: "_extra" und Filter den Pfad dann auf "*_extra*"
 

fronki

Benutzer
Mitglied seit
16. Dez 2023
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
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.

Hallo zusammen!

ich habe Probleme beim Restore von Paperless-ngx.

Ich habe die Installation von Paperless nach der Anleitung von Marius durchgeführt (auch mit Docker und Container).
Per Hyperbackup habe ich alle Paperless-Verzeichnisse gesichert.

Ich verstehe die zitierte Vorgehensweise von Monacum so, dass es eigentlich funktionieren müsste, wenn ich die Verzeichnisse vom Stand von vor 2 Tagen in den Docker-Ordner kopiere und dann den Portainer-Stack drüber laufen lasse.

Nach dem Kopieren der zwei Tage alten Dateien in den das Docker-Verzeichnis habe ich im Portainer den Stack mit re-pull neu drüber laufen lassen.

Die Startseite von paperless wird aber nicht angezeigt.

Im Container von paperless-ngx gibt es eine Fehlermeldung:
django.db.utils.OperationalError: could not translate host name "db" to address: Name or service not known

Ich habe das bei google recherchiert, wirklich klar ist mir aber nicht, was ich anpassen sollte. Zumal der Stack ja vorher funktioniert hat.

Oder muss ich etwas anders machen?
Ist jemandem diese Fehlermeldung auch mal untergekommen?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Er findet die db nicht. Zeig doch mal deinen Stack
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
Wahrscheinlich hat er dir die DB aktualisiert und startet daher nicht mehr
 
  • Like
Reaktionen: plang.pl

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.200
Punkte für Reaktionen
1.024
Punkte
224
Ja, klingt danach. @fronki hast du wirklich den exakt gleichen Stack verwendet, ohne Anpassungen etwa bei einem der Versionstags? Wenn ich die exakt gleichen Versionen verwende und die Container mit den gleichen Parametern neu starte, habe ich kein Problem bei der von mir beschriebenen Variante. Ein Backup auf aktualisierte Containerversionen kann aber zu Problemen führen, insbesondere, wenn so wie oben bereit beschrieben, die Datenbank, bei vielen PostgreSQL angepasst wird.

Das geht dann nicht so einfach, hier muss die Paperless-Datenbank direkt aus PostgreSQL heraus gesichert (gedumpt) werden und dann wieder nach dem Update der Datenbank eingespielt werden. Wer das in den meisten Fällen umgehen möchte, nimmt wie @Adama MariaDB.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.200
Punkte für Reaktionen
1.024
Punkte
224
Ich wollte eigentlich schreiben, dass man kein Backup, das unter einer alten Version erstellt wurde, in einen aktualisierten Container kopieren sollte, weil das ja diese Probleme verursachen kann.
 

fronki

Benutzer
Mitglied seit
16. Dez 2023
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Entschuldigt bitte, ich habe jetzt erst gesehen, dass schon Nachfragen gekommen sind.
Ich habe alle Container außer die Datenbank upgedatet (u.a. Paperless auf 2. irgendwas). Da lief alles problemlos. Dann hatte ich versucht Postgress upzudaten, ging nicht. Das Problem hatte ich gelöst (':15' hinter dem image dran gehängt). Lief dann auch wieder.

Hier ist der Stack:

version: "3.6"
services:
redis:
image: redis
container_name: PaperlessNGX-REDIS
restart: always
volumes:
- /volume1/docker/paperlessngx/redis:/data
db:
image: postgres:15
container_name: PaperlessNGX-DB
hostname: db
restart: always
volumes:
- /volume1/docker/paperlessngx/db:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx
container_name: PaperlessNGX
restart: always
depends_on:
- db
- redis
- gotenberg
- tika
ports:
- 8777:8000
volumes:
- /volume1/docker/paperlessngx/data:/usr/src/paperless/data
- /volume1/docker/paperlessngx/media:/usr/src/paperless/media
- /volume1/docker/paperlessngx/export:/usr/src/paperless/export
- /volume1/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: xxxxxxxx
PAPERLESS_ADMIN_PASSWORD: xxxxxx
PAPERLESS_OCR_LANGUAGE: deu+eng+spa
PAPERLESS_OCR_SKIP_ARCHIVE_FILE: always
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000/forms/libreoffice/convert#
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: gotenberg/gotenberg
restart: always
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
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Das sieht ja erstmal gut aus. Läuft es jetzt wieder?
Und wenn nein, was sagen die Logs der Datenbank?
 

fronki

Benutzer
Mitglied seit
16. Dez 2023
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Nein, immer noch der Fehler "django.db.utils.OperationalError: could not translate host name "db" to address: Name or service not known".

Ich habe in Hyperbackup inkrementelles Backup eingestellt. Kann es daran liegen? Sollte ich lieber die Daten über ein vollständiges Backup sichern?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Nein. Du solltest aber einen SQL-Dump der DB haben. Was sagen denn nun die Logs der DB?
 

fronki

Benutzer
Mitglied seit
16. Dez 2023
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Ok, den Dump habe ich nicht. Hier sind die Logs der DB:

PostgreSQL Database directory appears to contain a database; Skipping initialization
2023-12-17 15:06:24.290 UTC [1] LOG: starting PostgreSQL 15.5 (Debian 15.5-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2023-12-17 15:06:24.291 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2023-12-17 15:06:24.291 UTC [1] LOG: listening on IPv6 address "::", port 5432
2023-12-17 15:06:24.384 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-12-17 15:06:24.583 UTC [28] LOG: database system was interrupted; last known up at 2023-12-11 03:00:39 UTC
2023-12-17 15:06:24.971 UTC [28] LOG: invalid record length at 0/6F2C7DD8: wanted 24, got 0
2023-12-17 15:06:24.971 UTC [28] LOG: invalid primary checkpoint record
2023-12-17 15:06:24.971 UTC [28] PANIC: could not locate a valid checkpoint record
2023-12-17 15:06:25.651 UTC [1] LOG: startup process (PID 28) was terminated by signal 6: Aborted
2023-12-17 15:06:25.651 UTC [1] LOG: aborting startup due to startup process failure
2023-12-17 15:06:25.652 UTC [1] LOG: database system is shut down
 


 

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