services: paperless-ngx-db: container_name: paperless-ngx-db image: docker.io/library/postgres:18.1@sha256:5773fe724c49c42a7a9ca70202e11e1dff21fb7235b335a73f39297d200b73a2 restart: unless-stopped environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} - PGDATA=/var/lib/postgresql/18/docker volumes: - ${APPDATA_PATH}/paperless-ngx/db:/var/lib/postgresql networks: - backend healthcheck: test: ["CMD-SHELL", "pg_isready -d ${POSTGRES_DB} -U ${POSTGRES_USER}"] interval: 10s timeout: 5s retries: 3 start_period: 10s paperless-ngx-valkey: container_name: paperless-ngx-valkey image: ghcr.io/valkey-io/valkey:9.0.1@sha256:546304417feac0874c3dd576e0952c6bb8f06bb4093ea0c9ca303c73cf458f63 restart: unless-stopped volumes: - ${APPDATA_PATH}/paperless-ngx/valkey:/data networks: - backend healthcheck: test: ["CMD-SHELL", "valkey-cli ping | grep PONG"] interval: 10s timeout: 5s retries: 3 start_period: 10s paperless-ngx-tika: container_name: paperless-ngx-tika image: docker.io/apache/tika:3.2.3.0@sha256:c0154cb95587cde64be74f35ada1a2bd7892219f3f0ac3c9dc6cab34046b3573 restart: unless-stopped paperless-ngx-gotenberg: container_name: paperless-ngx-gotenberg image: docker.io/gotenberg/gotenberg:8.26.0@sha256:328551506b3dec3ff6381dd47e5cd72a44def97506908269e201a8fbfa1c12c0 restart: unless-stopped command: - "gotenberg" - "--chromium-disable-javascript=true" - "--chromium-allow-list=file:///tmp/.*" paperless-ngx: container_name: paperless-ngx image: ghcr.io/paperless-ngx/paperless-ngx:2.20.5@sha256:665f2f5cc5482ea2e44f90a7fa170908aaeb95d8d3c70e17f746de8fcb81f644 restart: unless-stopped depends_on: paperless-ngx-db: condition: service_healthy paperless-ngx-valkey: condition: service_healthy paperless-ngx-tika: condition: service_healthy paperless-ngx-gotenberg: condition: service_healthy environment: - PAPERLESS_DBHOST=paperless-ngx-db - PAPERLESS_DBENGINE=postgresql - PAPERLESS_DBPORT=5432 - PAPERLESS_DBNAME=${POSTGRES_DB} - PAPERLESS_DBUSER=${POSTGRES_USER} - PAPERLESS_DBPASS=${POSTGRES_PASSWORD} - PAPERLESS_REDIS=redis://paperless-ngx-valkey:6379 - PAPERLESS_TIKA_ENABLED=1 - PAPERLESS_TIKA_ENDPOINT=http://paperless-ngx-tika:9998 - PAPERLESS_TIKA_GOTENBERG_ENDPOINT=http://paperless-ngx-gotenberg:3000 - USERMAP_UID=${PUID} - USERMAP_GID=${PGID} - PAPERLESS_URL=${PAPERLESS_URL} - PAPERLESS_ALLOWED_HOSTS=${PAPERLESS_ALLOWED_HOSTS} - PAPERLESS_SECRET_KEY=${PAPERLESS_SECRET_KEY} - PAPERLESS_TIME_ZONE=${TZ} - PAPERLESS_FILENAME_FORMAT={correspondent}/{created_year}/{title} - PAPERLESS_OCR_LANGUAGE=${PAPERLESS_OCR_LANGUAGE} - PAPERLESS_OCR_DESKEW=false volumes: - ${APPDATA_PATH}/paperless-ngx/data:/usr/src/paperless/data - ${APPDATA_PATH}/paperless-ngx/media:/usr/src/paperless/media - ${APPDATA_PATH}/paperless-ngx/export:/usr/src/paperless/export - ${APPDATA_PATH}/paperless-ngx/consume:/usr/src/paperless/consume ports: - ${SERVER_PORT}:8000 networks: - frontend - backend healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000"] interval: 30s timeout: 10s retries: 5 networks: frontend: external: true backend: external: true