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.