services: paperless_ngx_valkey: container_name: paperless_ngx_valkey image: docker.io/valkey/valkey:8.1.3 restart: unless-stopped command: valkey-server --save 60 1 --requirepass ${VALKEY_PASSWORD} volumes: - ${APPDATA_PATH}/paperless-ngx/valkey:/data ports: - ${VALKEY_PORT}:6379 networks: - backend healthcheck: test: ["CMD-SHELL", "echo 'auth ${VALKEY_PASSWORD}\nping' | valkey-cli | grep PONG"] interval: 10s timeout: 5s retries: 3 start_period: 10s paperless_ngx_server: container_name: paperless_ngx_server image: ghcr.io/paperless-ngx/paperless-ngx:2.17.1 restart: unless-stopped depends_on: paperless_ngx_valkey: condition: service_healthy labels: - traefik.enable=true - traefik.http.routers.paperless_ngx_server.rule=Host(`${TRAEFIK_DOMAIN}`) - traefik.http.routers.paperless_ngx_server.entrypoints=${TRAEFIK_ENTRYPOINT} - traefik.http.services.paperless_ngx_server.loadbalancer.server.port=8000 - traefik.docker.network=frontend environment: - USERMAP_UID=${PUID} - USERMAP_GID=${PGID} - PAPERLESS_TIME_ZONE=${TZ} - PAPERLESS_SECRET_KEY=${PAPERLESS_SECRET_KEY} - PAPERLESS_URL=https://${TRAEFIK_DOMAIN} - PAPERLESS_REDIS=redis://paperless_ngx_valkey:6379 - PAPERLESS_FILENAME_FORMAT={correspondent}/{created_year}/{title} - 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