This repository has been archived on 2026-08-21. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
infra/stacks/paperless.opytex.org/docker-compose.yml

127 lines
3.9 KiB
YAML

services:
broker:
image: docker.io/valkey/valkey:9.1.1-alpine
restart: unless-stopped
volumes:
- valkeydata:/data
networks:
- default
db:
image: docker.io/library/postgres:16.15
restart: unless-stopped
env_file:
- env_file
environment:
POSTGRES_PASSWORD: ${PAPERLESS_DBPASS:?}
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- default
labels:
- backup.enable=true
- backup.type=postgres
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:3.0.5
restart: unless-stopped
depends_on:
- db
- broker
- gotenberg
- tika
env_file:
- env_file
environment:
PAPERLESS_DBPASS: ${PAPERLESS_DBPASS:?}
PAPERLESS_SECRET_KEY: ${PAPERLESS_SECRET_KEY:?}
PAPERLESS_ADMIN_PASSWORD: ${PAPERLESS_ADMIN_PASSWORD:?}
# Le client_id n'est pas un secret ; seul `secret` vient de SOPS.
# Ce bloc reste dans `environment:` et non dans env_file : lui seul
# subit l'interpolation ${...} de Compose.
PAPERLESS_SOCIALACCOUNT_PROVIDERS: >
{
"openid_connect": {
"APPS": [
{
"provider_id": "authentik",
"name": "Authentik",
"client_id": "wu1TWyQ5sIADMhyy04rcOWo95Ciu8g0yKizKF4QQ",
"secret": "${SSO_CLIENT_SECRET:?}",
"settings": {
"server_url": "https://sso.opytex.org/application/o/paperless/.well-known/openid-configuration"
}
}
],
"OAUTH_PKCE_ENABLED": "True"
}
}
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- export:/usr/src/paperless/export
- consume:/usr/src/paperless/consume
networks:
- default
- traefik-proxy
labels:
- traefik.enable=true
- traefik.docker.network=traefik-proxy
- traefik.http.routers.paperlessngx.entrypoints=web-secure
- traefik.http.routers.paperlessngx.rule=Host(`paperless.opytex.org`)
- traefik.http.routers.paperlessngx.tls.certresolver=letsencrypt
- traefik.http.routers.paperlessngx.middlewares=crowdsec@file
- traefik.http.services.paperlessngx.loadbalancer.server.port=8000
gotenberg:
image: docker.io/gotenberg/gotenberg:8.34.0
restart: unless-stopped
# La route chromium sert à convertir les .eml : ni javascript ni contenu
# distant (pixels de tracking).
command:
- "gotenberg"
- "--chromium-disable-javascript=true"
- "--chromium-allow-list=file:///tmp/.*"
networks:
- default
tika:
image: docker.io/apache/tika:3.3.1.0
restart: unless-stopped
networks:
- default
volumes:
# Déclarations reprises telles quelles de l'ancien compose : les volumes
# existent déjà sur chioggia, et un label de volume ne s'applique qu'à la
# création. Ajouter ou retirer un label ferait diverger la déclaration du
# volume réel, et Compose proposerait de le RECRÉER.
#
# `name:` fige les noms hérités, sans le préfixe de projet.
data:
name: paperless-data
labels:
backup.enable: true
media:
name: paperless-media
labels:
backup.enable: true
pgdata:
name: paperless-pg-data
# Volume neuf : Valkey 9 (fork de Redis 7.2) ne sait pas lire un `dump.rdb`
# écrit par Redis 7.4. Le contenu n'étant que la file Celery, on repart de
# zéro plutôt que de convertir. L'ancien `paperlessopytexorg_redisdata`
# subsiste, inutilisé : c'est le chemin de retour vers `redis:7`.
valkeydata:
# Volumes neufs : le label s'applique donc, contrairement aux quatre
# au-dessus. `consume` n'en porte pas — un fichier n'y séjourne que le temps
# d'être ingéré, après quoi il est dans `media`.
export:
labels:
backup.enable: true
consume:
networks:
traefik-proxy:
external: true