What is it for?
Paperless-ngx turns your paperwork (invoices, payslips, contracts) into a digital archive. It reads the text of scanned documents (OCR), files them automatically and lets you find anything with one search.
Who is it for?
People who want to finally get rid of binders full of admin papers.
Good to know
The generated configuration reads documents in French (PAPERLESS_OCR_LANGUAGE: fra): change it to eng for English documents.
After installing
- Log in as admin with the ADMIN_PASSWORD from the .env file, then change it.
- Drop PDFs into the consume folder: they are imported automatically.
The docker-compose
Example behind Traefik. To adapt it (Nginx Proxy Manager, local port…) with a line-by-line explanation, use the generator (in French).
# docker-compose.yml : Paperless-ngx
services:
paperless:
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_DBPASS: "${DB_PASSWORD}"
PAPERLESS_SECRET_KEY: "${PAPERLESS_SECRET_KEY}"
PAPERLESS_URL: https://papiers.mydomain.com
PAPERLESS_OCR_LANGUAGE: fra
PAPERLESS_ADMIN_USER: admin
PAPERLESS_ADMIN_PASSWORD: "${ADMIN_PASSWORD}"
PAPERLESS_TIME_ZONE: Europe/Paris
USERMAP_UID: "1000"
USERMAP_GID: "1000"
TZ: Europe/Paris
volumes:
- ./data:/usr/src/paperless/data
- ./media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
networks:
- traefik
- default
labels:
- traefik.enable=true
- traefik.http.routers.paperless.rule=Host(`papiers.mydomain.com`)
- traefik.http.routers.paperless.entrypoints=websecure
- traefik.http.routers.paperless.tls.certresolver=letsencrypt
- traefik.http.services.paperless.loadbalancer.server.port=8000
- traefik.docker.network=traefik
db:
image: postgres:17-alpine
container_name: paperless-db
restart: unless-stopped
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: "${DB_PASSWORD}"
volumes:
- ./db:/var/lib/postgresql/data
broker:
image: redis:7-alpine
container_name: paperless-broker
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
traefik:
external: true