- Remove traefik.enable, traefik.docker.network, traefik.http.routers.* from all services - Keep traefik.http.services.<name>.loadbalancer.server.port labels - Keep all middleware definitions (forwardauth, headers, redirects) - Add pull_policy: always to main/frontend services - Add proxy network + label to gitea and karakeep (previously missing) - Add COOLIFY-TEMPLATE.md reference guide Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
156 lines
4.8 KiB
YAML
156 lines
4.8 KiB
YAML
services:
|
|
paperless-db:
|
|
image: postgres:18
|
|
container_name: paperless-db
|
|
restart: unless-stopped
|
|
environment:
|
|
TZ: ${TZ}
|
|
POSTGRES_DB: ${PAPERLESS_DBNAME}
|
|
POSTGRES_USER: ${PAPERLESS_DBUSER}
|
|
POSTGRES_PASSWORD: ${PAPERLESS_DBPASS}
|
|
volumes:
|
|
- /opt/paperless/pgdata:/var/lib/postgresql:Z
|
|
networks:
|
|
- paperless_internal
|
|
|
|
paperless-redis:
|
|
image: redis:8
|
|
container_name: paperless-redis
|
|
restart: unless-stopped
|
|
volumes:
|
|
- /opt/paperless/redis:/data:Z
|
|
networks:
|
|
- paperless_internal
|
|
|
|
paperless-gotenberg:
|
|
image: gotenberg/gotenberg:8.27
|
|
container_name: paperless-gotenberg
|
|
restart: unless-stopped
|
|
command:
|
|
- "gotenberg"
|
|
- "--chromium-disable-javascript=true"
|
|
- "--chromium-allow-list=file:///tmp/.*"
|
|
networks:
|
|
- paperless_internal
|
|
|
|
paperless-tika:
|
|
image: apache/tika:latest
|
|
container_name: paperless-tika
|
|
restart: unless-stopped
|
|
networks:
|
|
- paperless_internal
|
|
|
|
paperless:
|
|
image: ghcr.io/paperless-ngx/paperless-ngx:latest
|
|
container_name: paperless
|
|
pull_policy: always
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- paperless-db
|
|
- paperless-redis
|
|
- paperless-gotenberg
|
|
- paperless-tika
|
|
environment:
|
|
TZ: ${TZ}
|
|
|
|
PAPERLESS_REDIS: redis://paperless-redis:6379
|
|
PAPERLESS_DBHOST: paperless-db
|
|
PAPERLESS_DBENGINE: postgresql
|
|
PAPERLESS_DBNAME: ${PAPERLESS_DBNAME}
|
|
PAPERLESS_DBUSER: ${PAPERLESS_DBUSER}
|
|
PAPERLESS_DBPASS: ${PAPERLESS_DBPASS}
|
|
|
|
PAPERLESS_URL: https://${PAPERLESS_DOMAIN}
|
|
PAPERLESS_SECRET_KEY: ${PAPERLESS_SECRET_KEY}
|
|
PAPERLESS_ALLOWED_HOSTS: ${PAPERLESS_ALLOWED_HOSTS}
|
|
PAPERLESS_CSRF_TRUSTED_ORIGINS: https://${PAPERLESS_DOMAIN}
|
|
PAPERLESS_TRUSTED_PROXIES: ${TRUSTED_PROXIES}
|
|
|
|
PAPERLESS_ADMIN_USER: ${PAPERLESS_ADMIN_USER}
|
|
PAPERLESS_ADMIN_PASSWORD: ${PAPERLESS_ADMIN_PASSWORD}
|
|
PAPERLESS_ADMIN_MAIL: ${PAPERLESS_ADMIN_MAIL}
|
|
|
|
PAPERLESS_TIKA_ENABLED: 1
|
|
PAPERLESS_TIKA_ENDPOINT: http://paperless-tika:9998
|
|
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://paperless-gotenberg:3000
|
|
|
|
# Más robusto cuando los ficheros llegan por sync/mount y no por inotify puro
|
|
PAPERLESS_CONSUMER_POLLING: ${PAPERLESS_CONSUMER_POLLING}
|
|
volumes:
|
|
- /opt/paperless/data:/usr/src/paperless/data:Z
|
|
- /opt/paperless/media:/usr/src/paperless/media:Z
|
|
- /opt/paperless/export:/usr/src/paperless/export:Z
|
|
- /opt/paperless/consume:/usr/src/paperless/consume:Z
|
|
networks:
|
|
- paperless_internal
|
|
- proxy
|
|
- mail_internal
|
|
labels:
|
|
- traefik.http.middlewares.paperless-secure-headers.headers.stsSeconds=31536000
|
|
- traefik.http.middlewares.paperless-secure-headers.headers.stsIncludeSubdomains=true
|
|
- traefik.http.middlewares.paperless-secure-headers.headers.stsPreload=true
|
|
- traefik.http.middlewares.paperless-secure-headers.headers.contentTypeNosniff=true
|
|
- traefik.http.middlewares.paperless-secure-headers.headers.browserXssFilter=true
|
|
|
|
- traefik.http.services.paperless.loadbalancer.server.port=8000
|
|
|
|
paperless-ai:
|
|
image: clusterzx/paperless-ai:latest
|
|
container_name: paperless-ai
|
|
pull_policy: always
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- paperless
|
|
environment:
|
|
TZ: ${TZ}
|
|
volumes:
|
|
- /opt/paperless-ai/data:/app/data:Z
|
|
networks:
|
|
- paperless_internal
|
|
- proxy
|
|
labels:
|
|
- traefik.http.middlewares.paperless-ai-secure-headers.headers.stsSeconds=31536000
|
|
- traefik.http.middlewares.paperless-ai-secure-headers.headers.stsIncludeSubdomains=true
|
|
- traefik.http.middlewares.paperless-ai-secure-headers.headers.stsPreload=true
|
|
- traefik.http.middlewares.paperless-ai-secure-headers.headers.contentTypeNosniff=true
|
|
|
|
- traefik.http.services.paperless-ai.loadbalancer.server.port=3000
|
|
|
|
# Sync unidireccional: Nextcloud/Paperless-Inbox -> paperless/consume
|
|
paperless-inbox-sync:
|
|
image: rclone/rclone:latest
|
|
container_name: paperless-inbox-sync
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- paperless
|
|
entrypoint:
|
|
- /bin/sh
|
|
- /rclone-sync.sh
|
|
environment:
|
|
TZ: ${TZ}
|
|
|
|
RCLONE_CONFIG_NC_TYPE: webdav
|
|
RCLONE_CONFIG_NC_URL: https://${NC_DOMAIN}/remote.php/dav/files/${NC_WEBDAV_USER}
|
|
RCLONE_CONFIG_NC_VENDOR: nextcloud
|
|
RCLONE_CONFIG_NC_USER: ${NC_WEBDAV_USER}
|
|
RCLONE_CONFIG_NC_PASS: ${NC_WEBDAV_PASS}
|
|
|
|
RCLONE_SYNC_INTERVAL: ${RCLONE_SYNC_INTERVAL}
|
|
PAPERLESS_INBOX_DIR: ${PAPERLESS_INBOX_DIR}
|
|
volumes:
|
|
- /opt/paperless/consume:/consume:Z
|
|
- /opt/rclone:/config/rclone:Z
|
|
- /opt/paperless/rclone-sync.sh:/rclone-sync.sh:ro,Z
|
|
networks:
|
|
- paperless_internal
|
|
|
|
networks:
|
|
paperless_internal:
|
|
driver: bridge
|
|
|
|
proxy:
|
|
external: true
|
|
|
|
mail_internal:
|
|
external: true
|