Files
ansible/roles/docker/templates/paperlessngx-compose.yml.j2
T
PhilandClaude Opus 5.5 fba5520cda Pin Paperless-ngx to 2.20.15 on the way to v3
v3 can only be reached from 2.20.15, so stop tracking :latest. Also set
the two settings v3 needs from us: trust Caddy as the proxy (v3's login
rate limiting), and keep rejecting duplicate documents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 12:34:52 -06:00

81 lines
2.6 KiB
Django/Jinja

services:
broker:
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- redisdata:/data
webserver:
# Pinned: major versions need care (v3 could only be reached from
# 2.20.15). Bump deliberately after reading the release notes.
image: ghcr.io/paperless-ngx/paperless-ngx:{{ paperless_version }}
restart: unless-stopped
labels:
# Stop during backup so the SQLite database in the data volume is consistent
docker-volume-backup.stop-during-backup: true
depends_on:
- broker
- gotenberg
- tika
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
extra_hosts:
- '{{ subdomains.pocketid }}:{{ docker.hairpin_ip }}'
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
PAPERLESS_OCR_USER_ARGS: '{"invalidate_digital_signatures": true}'
# Caddy. v3's login rate limiting reads the client IP from it.
PAPERLESS_TRUSTED_PROXIES: "{{ docker.hairpin_ip }}"
# v3 accepts duplicates by default; keep rejecting them.
PAPERLESS_CONSUMER_DELETE_DUPLICATES: "true"
gotenberg:
image: docker.io/gotenberg/gotenberg:8.39.0
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: docker.io/apache/tika:latest
restart: unless-stopped
backup:
image: offen/docker-volume-backup:v2
restart: always
labels:
mag37.dockcheck.update: true
environment:
BACKUP_FILENAME: pngx-backup-%Y-%m-%dT%H-%M-%S.tar.gz
BACKUP_CRON_EXPRESSION: "10 9 * * *"
BACKUP_PRUNING_PREFIX: pngx-
BACKUP_RETENTION_DAYS: 7
AWS_S3_BUCKET_NAME: tsolbackups
AWS_ENDPOINT: s3.us-west-004.backblazeb2.com
AWS_ACCESS_KEY_ID: {{ vault_backup.access_key_id }}
AWS_SECRET_ACCESS_KEY: {{ vault_backup.secret_access_key }}
volumes:
- media:/backup/pngx-app-backup:ro
- data:/backup/pngx-data-backup:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
data:
media:
redisdata:
networks:
default:
external: true
name: {{ docker.network_name }}