Skip to content

Setup Paperless-NGX

Overview

Paperless-ngx is a community-supported open-source document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.

Important Docker Files

.env file

.env
NAME=paperless
DOMAIN=
URL=https://${NAME}.${DOMAIN}
DB_NAME=paperless
DB_USER=paperless
DB_PASS=
APPDATA=
ID=1000
SECRET=
TZ=America/New_York
DATE_FORMAT=MDY
SHARED=
PORT=8000

docker-compose.yml file

docker-compose.yml
services:
  paperless:
    image: ghcr.io/paperless-ngx/paperless-ngx
    container_name: ${NAME}
    restart: unless-stopped
    networks:
      - proxy
      - internal-db
    dns:
      - '10.1.10.1'
    depends_on:
      - ${NAME}-db
      - ${NAME}-redis
    volumes:
      - ${APPDATA}/${NAME}/data:/usr/src/paperless/data
      - ${SHARED}/${NAME}/media:/usr/src/paperless/media
      - ${APPDATA}/${NAME}/export:/usr/src/paperless/export
      - ${APPDATA}/${NAME}/scripts:/usr/src/paperless/scripts
      - ${SHARED}/${NAME}/consume:/usr/src/paperless/consume
    environment:
      PAPERLESS_REDIS: redis://${NAME}-redis:6379
      PAPERLESS_DBHOST: ${NAME}-db
      PAPERLESS_DBNAME: ${DB_NAME}
      PAPERLESS_DBUSER: ${DB_USER}
      PAPERLESS_DBPASS: ${DB_PASS}
      USERMAP_GID: ${ID}
      USERMAP_UID: ${ID}
      PAPERLESS_URL: ${URL}
      PAPERLESS_SECRET_KEY: ${SECRET}
      PAPERLESS_TIME_ZONE: ${TZ}
      PAPERLESS_OCR_USER_ARGS: '{"tesseract_timeout": 180}'
      PAPERLESS_DATE_ORDER: ${DATE_FORMAT}
      PAPERLESS_PRE_CONSUME_SCRIPT: /usr/src/paperless/scripts/removepassword.py
      PAPERLESS_WEBSERVER_WORKERS: 2
    labels:
      swag: enable
      swag_address: ${NAME}
      swag_port: ${PORT}
      swag_proto: http
      swag_url: ${NAME}.${DOMAIN}
      com.centurylinklabs.watchtower.enable: true
  paperless-redis:
    image: redis:alpine
    container_name: ${NAME}-redis
    restart: unless-stopped
    volumes:
      - ${APPDATA}/${NAME}/${NAME}-redis:/data
    networks:
      - internal-db
    labels:
      traefik.enable: false
      com.centurylinklabs.watchtower.enable: true
  paperless-db:
    #image: pgautoupgrade/pgautoupgrade:17-alpine
    image: postgres:17-alpine
    container_name: ${NAME}-db
    restart: unless-stopped
    volumes:
      - ${APPDATA}/${NAME}/${NAME}-db:/var/lib/postgresql/data
    environment:
      TZ: ${TZ}
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
    healthcheck:
      interval: 10s
      retries: 10
      test: pg_isready -U ${DB_USER} -d ${DB_NAME}
      timeout: 2s
    networks:
      - internal-db
    labels:
      traefik.enable: false
      com.centurylinklabs.watchtower.enable: true
networks:
  proxy:
    external: true
  internal-db:
    external: true

Start the Container

Start the Container
docker compose up -d