Datensicherung bei Paperless.ngx

Hallo Allerseits,

habe „mein“ Paperless mit dieser YML-Datei via Portainer installiert:

tversion: "3.4"
services:
  broker:
    image: docker.io/library/redis:7
    restart: unless-stopped
    volumes:
      - redisdata:/data

  db:
    image: docker.io/library/postgres:15
    restart: unless-stopped
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: paperless

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    restart: unless-stopped
    depends_on:
      - db
      - broker
      - gotenberg
      - tika
    ports:
      - "8010:8000"
    volumes:
    - /home/chef/storage/paperless/data:/usr/src/paperless/data
    - /home/chef/storage/paperless/media:/usr/src/paperless/media
    - /home/chef/storage/paperless/export:/usr/src/paperless/export
    - /home/chef/consume:/usr/src/paperless/consume
    
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_TIKA_ENABLED: 1
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
      PAPERLESS_TIKA_ENDPOINT: http://tika:9998
      USERMAP_UID: 1000
      USERMAP_GID: 1000
      PAPERLESS_SECRET_KEY: 18011963mJ
      PAPERLESS_TIME_ZONE: Europe/Berlin
      PAPERLESS_OCR_LANGUAGE: deu
      PAPERLESS_ADMIN_USER: chef
      PAPERLESS_ADMIN_PASSWORD: f78114
      PAPERLESS_OCR_PAGES: 3
      PAPERLESS_FILENAME_FORMAT: "{created_year}_{created_month}/{correspondent}/{title}"
      PAPERLESS_OCR_USER_ARGS: '{"invalidate_digital_signatures": true}'

  gotenberg:
    image: docker.io/gotenberg/gotenberg:7.10
    restart: unless-stopped

    # The gotenberg chromium route is used to convert .eml files. We do not
    # want to allow external content like tracking pixels or even javascript.
    command:
      - "gotenberg"
      - "--chromium-disable-javascript=true"
      - "--chromium-allow-list=file:///tmp/.*"

  tika:
    image: ghcr.io/paperless-ngx/tika:latest
    restart: unless-stopped

volumes:
  data:
  media:
  pgdata:
  redisdata:

Die Sache läuft seit ein paar Wochen und bisher absolut zuverlässig.
Die Verzeichnisse

- /home/chef/storage/paperless/data:/usr/src/paperless/data
- /home/chef/storage/paperless/media:/usr/src/paperless/media
- /home/chef/storage/paperless/export:/usr/src/paperless/export

sind auf einer separaten Festplatte, also getrennt vom Betriebssystem. Ich würde gerne turnusmäßig per Cronjob alle Daten auf eine weitere Platte spiegeln - täglich, alle 2 Tage, was auch immer, da sind die Überlegungen noch nicht so weit fortgeschritten. Ziel soll sein, dass ich die Daten bei einer identischen Installation auf einem anderen Rechner einfach per copy&paste importieren kann. Meine Frage dazu ist: Welche Verzeichnisse meiner aktuellen Installation müssten gespiegelt werden, damit nicht nur die Belege, sondern auch alle Datenbank-Daten kopiert werden?

Ich verwende ein kleines Script.

#!/bin/bash

# Define the directory for paperless-ngx export
EXPORT_DIR="/docker/paperless-ngx/export"
BACKUP_DIR="/docker/paperless-ngx/backup"
ARCHIVE_NAME="paperless-ngx_backup_$(date +%Y-%m-%d_%H-%M-%S)"

# Anzahl Tage, fuer die Backupdateien aufgehoben werden
keepdays="30"

# Empty the export directory before starting
echo "Emptying existing export..."
rm -rf "$EXPORT_DIR/*"

# alte Backups loeschen
find $BACKUP_DIR -name paperless-ngx_backup* -mtime +$keepdays -exec rm '{}' \;
find $BACKUP_DIR -name *.sql -mtime +$keepdays -exec rm '{}' \;

# Run the paperless-ngx export command
echo "Exporting data..."
docker compose exec -T paperless-ngx document_exporter ../export -d -f -z -zn $ARCHIVE_NAME

# von UVZ export nach backup verschieben
mv /docker/paperless-ngx/export/paperless* /docker/paperless-ngx/backup
chown 0:0 /docker/paperless-ngx/backup/paperless-ngx_backup*

# MariaDB Datenbank paperless backupen
docker exec -i mariadb mariadb-dump -u 'paperlessUser' -p'paperlessPW' --lock-tables 'paperlessDB' > /docker/paperless-ngx/backup/$ARCHIVE_NAME.sql

echo "Backup completed successfully!"

Mein Docker Container heißt ´paperless-ngx´.
Bei mir läuft MariaDB d.h. Du mußt die Zeile auf PostgreSQL ändern.

In BACKUP_DIR sind dann zwei Dateien, *.zip und *.sql. Die müssen extern gesichert werden. Oder als BACKUP_DIR was Externes mounten.

Vielen Dank für Deinen Beitrag. Allerdings quittiert der Befehl

docker compose exec -T paperless-ngx-webserver-1 document_exporter /home/chef/backup -d -f -z -zn testfile

den Aufruf mit

no configuration file provided: not found

Die Bezeichnung „paperless-ngx-webserver-1“ habe ich aus Portainer. Wo ist der Fehler?

Der Befehl ´docker compose´ muß im UVZ aufgerufen werden, in dem die Compose-Datei docker-compose.yml oder compose.yml ist.
Das ist sicher der ´configuration file´, der da vermißt wird.

Der Befehl docker_exporter läuft innerhalb des Containers. Du muß also als Parameter ein UVZ angeben, das innerhalb des Containers liegt.
/home/chef/backup liegt vermutlich auf dem Docker Host?

docker compose dürfte selbst mit deiner Installation falsch sein.

docker-compose ware richtig…

Kleines Detail große Wirkung

Ob mit oder ohne Bindestrich hängt von der Docker Version ab.
alt V1: mit Bindestrich
modern V2: ohne Bindestrich

Kann ich so nicht bestätigen da ich hier auch 2 Pi’s und n Debian NAS habe und dort docker-compose installiert habe und dort ist es ebenfalls so.

Kann es dann sein weil ich zu docker.io auch docker-compose installiert habe das es auf Debian/Raspian auch so ist ?

Ich gehe davon mal aus da die wichtigsten Informationen fehlen das es sich um eine Synology installation handelt.

Jetzt lese ich deinen letzten Post eben nochmals und da magst du recht haben mit dem config-file.