Back to Apps
Paperless-ngx

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.

Productivity

Want to deploy Paperless-ngx on your server faster? Try Senate with one-command setup, automatic HTTPS and monitoring.

Get Started

What is Paperless-ngx?

Paperless-ngx is a document management system that transforms your physical documents into a searchable archive automatically.

Learn more

Self-Host Paperless-ngx

Follow these steps to deploy on your own server.

1

Install Docker

Skip this step if Docker is already installed on your server.

curl -fsSL https://get.docker.com | sh
2

Configure

Customize the settings below. Defaults work for most cases.

General
3

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
4

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.com

Want 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)"