# Apache Tika and Gotenberg servers are started with paperless and paperless # is configured to use these services. These provide support for consuming # Office documents (Word, Excel, Power Point and their LibreOffice counter-parts. services: paperless_webserver: #The main Paperless-ngx service providing the web interface and document processing. image: ghcr.io/paperless-ngx/paperless-ngx:latest container_name: paperless_webserver restart: unless-stopped depends_on: - paperless_db - paperless_broker - paperless_gotenberg - paperless_tika ports: - "8010:8000" volumes: - /srv/docker/office/paperless-ngx/data:/usr/src/paperless/data - /mnt/raid1/data/appdata/paperless-ngx/:/usr/src/paperless/media - /srv/docker/office/paperless-ngx/export:/usr/src/paperless/export - /srv/docker/office/paperless-ngx/consume:/usr/src/paperless/consume environment: TZ: America/Chicago PAPERLESS_REDIS: redis://paperless_broker:6379 PAPERLESS_DBHOST: paperless_db PAPERLESS_TIKA_ENABLED: 1 PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 PAPERLESS_SECRET_KEY: ${PAPERLESS_SECRET_KEY} PAPERLESS_URL: ${PAPERLESS_URL} #The UID and GID of the user used to run paperless in the container. USERMAP_GID: ${USERMAP_GID} USERMAP_UID: ${USERMAP_UID} labels: - homepage.group=Office - homepage.name=PaperlessNGX - homepage.icon=paperlessngx.png - homepage.href=${PAPERLESS_URL} - homepage.description=Document Manager with OCR - homepage.widget.type=paperlessngx - homepage.widget.url=${PAPERLESS_URL} - homepage.widget.key=${PAPERLESS_SECRET_KEY} - homepage.widget.fields=["total", "inbox"] - dockhand.url=${PAPERLESS_URL} - rackpeek.tags=office networks: - proxy-net paperless_broker: #Acts as the message broker for Paperless-ngx - processing scheduled tasks such as email fetching, index optimization and for training the automatic document matcher. image: docker.io/library/redis:8 container_name: paperless_broker_redis restart: unless-stopped #privileged: true #sysctls: # net.core.somaxconn : '511' volumes: - redisdata:/data networks: - proxy-net labels: - wud.watch=false - rackpeek.name=paperless_broker - rackpeek.tags=service paperless_db: #The database server for storing Paperless-ngx data. # Paperless-ngx is compatible with Django-supported versions of PostgreSQL and MariaDB and it is generally safe to update them to newer versions. # However, you should always take a backup and follow the instructions from your database's documentation for how to upgrade between major versions # Do not simply upgrade or downgrade the major version, as the database will not load anymore. See OneNote image: postgres:18.4 #docker.io/library/postgres:18.3 container_name: paperless_db_postgres labels: - rackpeek.name=paperless_db - rackpeek.tags=database restart: unless-stopped volumes: # IMPORTANT: As of v18, the PGDATA path is now version-specific in the official image (i.e just map to /var/lib/postgresql not /var/lib/postgresql/data) - /srv/docker/office/paperless-ngx/postgresql:/var/lib/postgresql environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} TZ: America/Chicago networks: - proxy-net paperless_gotenberg: #Provides document conversion services, enhancing Paperless-ngx's ability to consume various file formats. image: docker.io/gotenberg/gotenberg:8.32.0 container_name: paperless_gotenberg 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. labels: - rackpeek.name=paperless_gotenberg - rackpeek.tags=service command: - "gotenberg" - "--chromium-disable-javascript=true" - "--chromium-allow-list=file:///tmp/.*" networks: - proxy-net paperless_tika: # Offers content analysis and metadata extraction, further extending support for document types. image: docker.io/apache/tika:latest container_name: paperless_tika restart: unless-stopped labels: - rackpeek.name=paperless_tika - rackpeek.tags=service networks: - proxy-net volumes: redisdata: networks: proxy-net: external: true