Files
homelab/docker/stacks/paperless/docker-compose.yaml

136 lines
4.0 KiB
YAML

services:
broker:
image: docker.io/library/redis:8
restart: unless-stopped
environment:
- TZ=${TZ}
volumes:
- ${SERVICE_DATA_ROOT_PATH}/redis:/data
networks:
- internal
db:
image: docker.io/library/postgres:17-bookworm
restart: unless-stopped
environment:
- POSTGRES_DB=${PAPERLESS_DBNAME}
- POSTGRES_USER=${PAPERLESS_DBUSER}
- POSTGRES_PASSWORD=${PAPERLESS_DBPASS}
- TZ=${TZ}
volumes:
- ${SERVICE_DATA_ROOT_PATH}/database:/var/lib/postgresql/data
networks:
- internal
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
environment:
- PAPERLESS_REDIS=redis://broker:6379
- PAPERLESS_DBHOST=db
- PAPERLESS_DBUSER=${PAPERLESS_DBUSER}
- PAPERLESS_DBPASS=${PAPERLESS_DBPASS}
- PAPERLESS_DBNAME=${PAPERLESS_DBNAME}
- PAPERLESS_TIKA_ENABLED=1
- PAPERLESS_TIKA_GOTENBERG_ENDPOINT=http://gotenberg:3000
- PAPERLESS_TIKA_ENDPOINT=http://tika:9998
- PAPERLESS_OCR_LANGUAGE=${PAPERLESS_OCR_LANGUAGE}
- PAPERLESS_OCR_LANGUAGES=${PAPERLESS_OCR_LANGUAGES}
- PAPERLESS_SECRET_KEY=${PAPERLESS_SECRET_KEY}
- PAPERLESS_TIME_ZONE=${TZ}
- PAPERLESS_URL=https://${TRAEFIK_DOMAIN}
- PAPERLESS_CONSUMER_BARCODE_SCANNER=ZXING
- USERMAP_UID=${USERMAP_UID}
- USERMAP_GID=${USERMAP_GID}
- PAPERLESS_APPS=${PAPERLESS_APPS}
- PAPERLESS_SOCIALACCOUNT_PROVIDERS=${PAPERLESS_SOCIALACCOUNT_PROVIDERS}
- PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS=${PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS}
volumes:
- ${SERVICE_DATA_ROOT_PATH}/data:/usr/src/paperless/data
- ${SERVICE_DATA_ROOT_PATH}/media:/usr/src/paperless/media
- ${SERVICE_DATA_ROOT_PATH}/export:/usr/src/paperless/export
- ${CONSUME_PATH}:/usr/src/paperless/consume
depends_on:
- db
- broker
- gotenberg
- tika
networks:
- internal
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.paperless.rule=Host(`${TRAEFIK_DOMAIN}`)"
- "traefik.http.routers.paperless.entrypoints=websecure"
- "traefik.http.routers.paperless.tls.certresolver=myresolver"
- "traefik.docker.network=traefik"
- "traefik.http.services.paperless.loadbalancer.server.port=8000"
gotenberg:
image: docker.io/gotenberg/gotenberg:8.20
restart: unless-stopped
environment:
- TZ=${TZ}
command:
- "gotenberg"
- "--chromium-disable-javascript=true"
- "--chromium-allow-list=file:///tmp/.*"
networks:
- internal
tika:
image: docker.io/apache/tika:latest
restart: unless-stopped
environment:
- TZ=${TZ}
networks:
- internal
backup-files:
image: creativeprojects/resticprofile:${RP_VERSION:-latest}
restart: always
environment:
- TZ=${TZ}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
volumes:
- ${SERVICE_DATA_ROOT_PATH}/restic/resticprofile.yaml:/etc/resticprofile/profiles.yaml:ro
- ${SERVICE_DATA_ROOT_PATH}/restic/restic.key:/etc/resticprofile/key:ro
- ${SERVICE_DATA_ROOT_PATH}/media:/media:ro
- ${SERVICE_DATA_ROOT_PATH}/db_dumps:/db_dumps:ro
command:
- '-c'
- 'resticprofile schedule --all && crond -f'
entrypoint: "/bin/sh"
hostname: paperless-resticprofile
networks:
- internal
backup-database:
image: prodrigestivill/postgres-backup-local:17
restart: always
environment:
- POSTGRES_HOST=db
- POSTGRES_CLUSTER=TRUE
- POSTGRES_USER=${PAPERLESS_DBUSER}
- POSTGRES_PASSWORD=${PAPERLESS_DBPASS}
- POSTGRES_DB=${PAPERLESS_DBNAME}
- BACKUP_KEEP_MINS=120
- SCHEDULE=50 * * * *
- POSTGRES_EXTRA_OPTS=--clean --if-exists
- BACKUP_DIR=/db_dumps
- BACKUP_ON_START=TRUE
- TZ=${TZ}
volumes:
- ${SERVICE_DATA_ROOT_PATH}/db_dumps:/db_dumps
depends_on:
- db
networks:
- internal
networks:
internal:
name: paperless
traefik:
external: true