paperless-ngx: Dateistruktur nachträglich aus Docker Volumes in ein einheitliches Verzeichnis zusammenfassen

Wenn man den Installationsprozess von paperless-ngx im Schnelldurchlauf vollzogen hat, hat paperless-ngx mehrere Docker Volumes in seinem docker-compose.yml angelegt:

  • pgdata
  • media
  • data
  • redisdata

Um diese nachträglich in eine einheitliche Ordnerstruktur zusammenzufassen, z. B. zum leichteren Export des gesamten Docker-Compose-Stacks, gehen wir wie folgt vor.

Schritt 1: Stack stoppen

docker compose -f /home/user/paperless-ngx/docker-compose.yml -f /home/user/paperless-ngx/docker-compose.override.yml down

Schritt 2: Notwendige Ordner anlegen

mkdir /home/user/paperless-ngx/media/ /home/user/paperless-ngx/data/ /home/user/paperless-ngx/redisdata/ /home/user/paperless-ngx/pgdata/

Schritt 3: Daten in die neu angelegten Ordner verschieben

for i in media data pgdata redisdata; do cp -r /var/lib/docker/volumes/paperless_$i/_data/* /home/user/paperless-ngx/$i; done

Schritt 4: Berechtigungen korrigieren

chown -R user:user /home/user/paperless-ngx/

Schritt 5: Referenzen zu Volumes ändern

Um auch die „lokalen“ Ordner für die Daten zu verwenden, muss nun in der Datei docker-compose.override.yml entsprechend immer der Ordner, nicht das Volume gesetzt werden.

Aus vorher

volumes:
  - certs:/etc/letsencrypt

wird

volumes:
  - ./certs:/etc/letsencrypt

Insgesamt sollte die docker-compose.override.yml nun so aussehen:

services:
  traefik:
    image: "traefik:v3.5"
    command:
      - "--api=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.websecure.address=:443"
      - "--entryPoints.websecure.transport.respondingTimeouts.readTimeout=24h"
      - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
      - "--certificatesresolvers.myresolver.acme.email=info@manage-it-for.me"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dashboard.rule=Host(`db.coders-home.de`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
      - "traefik.http.routers.dashboard.service=api@internal"
      - "traefik.http.routers.dashboard.middlewares=auth"
      - "traefik.http.routers.dashboard.entrypoints=websecure"
#      - "traefik.http.routers.dashboard.tls.certresolver=myresolver"
      - "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$slfgyrx1$$l6666775cs.1Y0dIc."
    ports:
      - "443:443"
    volumes:
      - ./certs:/letsencrypt
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
  webserver:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.paperless.rule=Host(`pl.coders-home.de`)"
      - "traefik.http.routers.paperless.entrypoints=websecure"
      - "traefik.http.routers.paperless.tls.certresolver=myresolver"
      - "traefik.http.routers.paperless.middlewares=limit@docker"
      - "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=100737418240"
      - "traefik.http.middlewares.limit.buffering.memRequestBodyBytes=200000000"
      - "traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=100737418240"
      - "traefik.http.middlewares.limit.buffering.memResponseBodyBytes=200000000"
      - "traefik.http.middlewares.testheader.headers.stsSeconds=15552000"
    volumes:
      - ./data:/usr/src/paperless/data
      - ./media:/usr/src/paperless/media
      - ./export:/usr/src/paperless/export
      - ./consume:/usr/src/paperless/consume
  broker:
    volumes:
      - ./redisdata:/data
  db:
    volumes:
      - ./pgdata:/var/lib/postgresql

Schritt 6: Stack starten

docker compose -f /home/user/paperless-ngx/docker-compose.yml -f /home/user/paperless-ngx/docker-compose.override.yml up -d

Schritt 7: Aufräumen, Docker Volumes entfernen

for i in media data pgdata redisdata; do docker volume rm paperless_$i; done

Tipp: Verzeichnisse können auch im Installationsprozess direkt angegeben werden

Tippt man im Installationsprozess von paperless-ngx bereits die Verzeichnispfade ein, so greift es nicht auf Docker Volumes zurück, was diesen Schritt obsolet macht.

Auch denkbar: Ihr fertigt einen Export von paperless-ngx an (beschrieben hier), speichert diesen, löscht die gesamte paperless-ngx Instanz, installiert sie neu mit den entsprechenden Ordnerpfaden und reimportiert anschließend euren Export.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert