
Deploy Paperless-ngx on Your Own Server
Paperless-ngx is a community-supported document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.
Want to deploy Paperless-ngx on your server faster? Try Senate with one-command setup, automatic HTTPS and monitoring.
What is Paperless-ngx?
Paperless-ngx is a document management system that transforms your physical documents into a searchable archive automatically.
Self-Host Paperless-ngx
Follow these steps to deploy on your own server.
Install Docker
Skip this step if Docker is already installed on your server.
curl -fsSL https://get.docker.com | sh
Configure
Customize the settings below. Defaults work for most cases.
General
Deploy
Copy the configuration and run it on your server.
services:
paperless_ngx:
image: paperlessngx/paperless-ngx:2.15.3
environment:
PAPERLESS_ADMIN_MAIL: root@localhost
PAPERLESS_ADMIN_PASSWORD: d5caff269e
PAPERLESS_ADMIN_USER: admin
PAPERLESS_ALLOWED_HOSTS: paperless_ngx.your-domain.com
PAPERLESS_CONSUMER_BARCODE_SCANNER: PYZBAR
PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT: "false"
PAPERLESS_CONSUMER_DELETE_DUPLICATES: "false"
PAPERLESS_CONSUMER_ENABLE_BARCODES: "false"
PAPERLESS_CONSUMER_POLLING: "0"
PAPERLESS_CONSUMER_RECURSIVE: "false"
PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS: "false"
PAPERLESS_CONSUMPTION_DIR: /usr/src/paperless/consume
PAPERLESS_CONVERT_MEMORY_LIMIT: "0"
PAPERLESS_CONVERT_TMPDIR: ""
PAPERLESS_COOKIE_PREFIX: paperless_ngx
PAPERLESS_CORS_ALLOWED_HOSTS: http://paperless_ngx.your-domain.com,https://paperless_ngx.your-domain.com
PAPERLESS_CSRF_TRUSTED_ORIGINS: http://paperless_ngx.your-domain.com,https://paperless_ngx.your-domain.com
PAPERLESS_DATA_DIR: /usr/src/paperless/data
PAPERLESS_DBHOST: paperless_ngx-db
PAPERLESS_DBNAME: paperless
PAPERLESS_DBPASS: f691a2ea1808adf8a512e5c5230d89c098bfe0361633105c8bcc5c8fda63d1bf
PAPERLESS_DBPORT: "5432"
PAPERLESS_DBSSLMODE: prefer
PAPERLESS_DBUSER: paperless
PAPERLESS_FILENAME_DATE_ORDER: ""
PAPERLESS_FILENAME_FORMAT: ""
PAPERLESS_FILENAME_FORMAT_REMOVE_NONE: "false"
PAPERLESS_IGNORE_DATES: ""
PAPERLESS_LOGGING_DIR: /usr/src/paperless/log
PAPERLESS_LOGROTATE_MAX_BACKUPS: "20"
PAPERLESS_LOGROTATE_MAX_SIZE: "1048576"
PAPERLESS_MEDIA_ROOT: /usr/src/paperless/media
PAPERLESS_OCR_CLEAN: clean
PAPERLESS_OCR_DESKEW: "true"
PAPERLESS_OCR_IMAGE_DPI: ""
PAPERLESS_OCR_LANGUAGE: eng
PAPERLESS_OCR_LANGUAGES: ""
PAPERLESS_OCR_MODE: skip
PAPERLESS_OCR_OUTPUT_TYPE: pdfa
PAPERLESS_OCR_PAGES: "0"
PAPERLESS_OCR_ROTATE_PAGES: "true"
PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD: "12"
PAPERLESS_OCR_SKIP_ARCHIVE_FILE: never
PAPERLESS_OCR_USER_ARGS: ""
PAPERLESS_OPTIMIZE_THUMBNAILS: "true"
PAPERLESS_POST_CONSUME_SCRIPT: ""
PAPERLESS_PRE_CONSUME_SCRIPT: ""
PAPERLESS_REDIS: redis://paperless_ngx-redis:6379/0
PAPERLESS_REDIS_PREFIX: ""
PAPERLESS_SECRET_KEY: c7f3e5e9c95f6a93248fc843e8c457e8d8cf0182d8f314311e615ba048e2d015
PAPERLESS_TASK_WORKERS: "1"
PAPERLESS_THREADS_PER_WORKER: "1"
PAPERLESS_THUMBNAIL_FONT_NAME: /usr/share/fonts/liberation/LiberationSerif-Regular.ttf
PAPERLESS_TIKA_ENABLED: "1"
PAPERLESS_TIKA_ENDPOINT: http://paperless_ngx-tika:9998
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://paperless_ngx-gotenberg:3000
PAPERLESS_TIME_ZONE: UTC
PAPERLESS_URL: http://paperless_ngx.your-domain.com
PAPERLESS_WEBSERVER_WORKERS: "2"
PAPERLESS_WORKER_TIMEOUT: "1800"
USERMAP_GID: "1000"
USERMAP_UID: "1000"
volumes:
- paperless_ngx-data:/usr/src/paperless/data
- paperless_ngx-media:/usr/src/paperless/media
- paperless_ngx-export:/usr/src/paperless/export
- paperless_ngx-consume:/usr/src/paperless/consume
depends_on:
- paperless_ngx-db
- paperless_ngx-redis
- paperless_ngx-gotenberg
- paperless_ngx-tika
paperless_ngx-db:
image: postgres:17
environment:
POSTGRES_DB: paperless
POSTGRES_PASSWORD: f691a2ea1808adf8a512e5c5230d89c098bfe0361633105c8bcc5c8fda63d1bf
POSTGRES_USER: paperless
volumes:
- paperless_ngx-db:/var/lib/postgresql/data
paperless_ngx-gotenberg:
image: gotenberg/gotenberg:8.19
paperless_ngx-redis:
image: redis:7
volumes:
- paperless_ngx-redis-data:/data
paperless_ngx-tika:
image: apache/tika:3.1.0.0-full
volumes:
paperless_ngx-data: {}
paperless_ngx-media: {}
paperless_ngx-export: {}
paperless_ngx-consume: {}
paperless_ngx-db: {}
paperless_ngx-redis-data: {}
Then run:
docker compose up -d
Access
Once started, access your app at http://localhost:8000
Why Self-Host Paperless-ngx?
Full Data Ownership
Your data stays on your servers. No third-party access.
No Monthly Fees
Pay only for your server. No per-seat or usage charges.
Complete Control
Customize, backup, and scale on your own terms.
Privacy & Compliance
Meet GDPR, HIPAA, or internal security requirements.
Technical Details
Docker Image
paperlessngx/paperless-ngx:${app_version}Official Docs
docs.paperless-ngx.comWant to go faster?
Try Senate! Senate handles Docker, HTTPS, updates, and monitoring for you. Deploy any of our 300+ apps with a single command.
Install on any Linux server:
sh -c "$(curl -sSL https://get.senate.sh)"