Запуск Paperless-ngx с Docker Compose и Traefik

Paperless-ngx — архив PDF и сканов с OCR, тегами и полнотекстовым поиском. Удобно для договоров, чеков и «бумаги в шкафу», которая уже в PDF.

Нужны рабочий Traefik и сеть traefik_network.

1. Каталог

mkdir -p ~/paperless/{data,media,export,consume}
cd ~/paperless
openssl rand -hex 32

Строку hex сохраните как PAPERLESS_SECRET_KEY.

2. docker-compose.yml

services:
  broker:
    image: redis:7-alpine
    container_name: paperless-redis
    restart: unless-stopped
    volumes:
      - redis_data:/data

  db:
    image: postgres:16-alpine
    container_name: paperless-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: CHANGE_ME_DB
    volumes:
      - pg_data:/var/lib/postgresql/data

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    container_name: paperless
    restart: unless-stopped
    depends_on:
      - db
      - broker
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBUSER: paperless
      PAPERLESS_DBPASS: CHANGE_ME_DB
      PAPERLESS_SECRET_KEY: CHANGE_ME_SECRET
      PAPERLESS_URL: https://paperless.yourdomain
      PAPERLESS_OCR_LANGUAGE: rus+eng
      PAPERLESS_TIME_ZONE: Europe/Moscow
      PAPERLESS_ADMIN_USER: admin
      PAPERLESS_ADMIN_PASSWORD: CHANGE_ME_ADMIN
    volumes:
      - ./data:/usr/src/paperless/data
      - ./media:/usr/src/paperless/media
      - ./export:/usr/src/paperless/export
      - ./consume:/usr/src/paperless/consume
    labels:
      - traefik.enable=true
      - traefik.http.middlewares.paperless_https.redirectscheme.scheme=https
      - traefik.http.routers.paperless.entrypoints=web
      - traefik.http.routers.paperless.middlewares=paperless_https@docker
      - traefik.http.routers.paperless.rule=Host(`paperless.yourdomain`)
      - traefik.http.routers.paperless_https.entrypoints=websecure
      - traefik.http.routers.paperless_https.rule=Host(`paperless.yourdomain`)
      - traefik.http.routers.paperless_https.tls=true
      - traefik.http.routers.paperless_https.tls.certresolver=le
      - traefik.http.services.paperless.loadbalancer.server.port=8000
    networks:
      - traefik_network
      - default

volumes:
  redis_data:
  pg_data:

networks:
  traefik_network:
    external: true

Замените пароли БД, admin и PAPERLESS_SECRET_KEY.

3. Запуск

docker compose up -d

Откройте https://paperless.yourdomain. Файлы, положенные в ./consume, подхватятся автоматически.

4. OCR на русском

Образ уже умеет Tesseract; PAPERLESS_OCR_LANGUAGE: rus+eng — рабочий старт. Если язык не подтянулся, проверьте логи:

docker logs paperless --tail 100

Замечания

  • Бэкапьте ./media, ./data и volume pg_data — без этого архив не восстановить.
  • Не публикуйте Paperless без HTTPS и сильного пароля (или Authelia).
  • Каталог consume можно смонтировать с NAS/сканера по SMB.

Итог: поисковый архив документов с OCR за Traefik.