Back to Apps
Paperless-ng

Deploy Paperless-ng on Your Own Server

Paperless is an application by Daniel Quinn and others that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents.

🛠️ Developer Tools Productivity

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

Get Started

What is Paperless-ng?

Paperless is an application by Daniel Quinn and others that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents.

Learn more

Self-Host Paperless-ng

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_ng:
    image: jonaswinkler/paperless-ng:1.4.1
    environment:
      APP_URL: http://paperless_ng.your-domain.com
      PAPERLESS_ADMIN_MAIL: root@localhost
      PAPERLESS_ADMIN_PASSWORD: 7fcfba5bac
      PAPERLESS_ADMIN_USER: admin
      PAPERLESS_ALLOWED_HOSTS: paperless_ng.your-domain.com
      PAPERLESS_CONSUMER_DELETE_DUPLICATES: "false"
      PAPERLESS_CONSUMER_POLLING: "0"
      PAPERLESS_CONSUMER_RECURSIVE: "false"
      PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS: "false"
      PAPERLESS_CONVERT_MEMORY_LIMIT: "0"
      PAPERLESS_CONVERT_TMPDIR: ""
      PAPERLESS_COOKIE_PREFIX: paperless_ng
      PAPERLESS_CORS_ALLOWED_HOSTS: http://paperless_ng.your-domain.com
      PAPERLESS_DBHOST: paperless_ng-db
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBPASS: f325aa520e718dcc54dfb275aae97231a0f88f7b67302c63b8ecfdf9d96a7a08
      PAPERLESS_DBUSER: paperless
      PAPERLESS_FILENAME_DATE_ORDER: ""
      PAPERLESS_FILENAME_FORMAT: ""
      PAPERLESS_IGNORE_DATES: ""
      PAPERLESS_LOGROTATE_MAX_BACKUPS: "20"
      PAPERLESS_LOGROTATE_MAX_SIZE: ""
      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_USER_ARGS: $cap_ocr_user_args
      PAPERLESS_OPTIMIZE_THUMBNAILS: "true"
      PAPERLESS_POST_CONSUME_SCRIPT: ""
      PAPERLESS_PRE_CONSUME_SCRIPT: ""
      PAPERLESS_REDIS: redis://paperless_ng-redis:6379/0
      PAPERLESS_SECRET_KEY: 7e336ba2f74e9a33c892db04ebfd9c3593f34ed3b4ee3086a3f83a4f8af737d0
      PAPERLESS_THUMBNAIL_FONT_NAME: /usr/share/fonts/liberation/LiberationSerif-Regular.ttf
      PAPERLESS_TIKA_ENABLED: "1"
      PAPERLESS_TIKA_ENDPOINT: http://paperless_ng-tika:9998
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://paperless_ng-gotenberg:3000
      PAPERLESS_TIME_ZONE: UTC
      PAPERLESS_WEBSERVER_WORKERS: "2"
      USERMAP_GID: "1000"
      USERMAP_UID: "1000"
    volumes:
      - paperless_ng-data:/usr/src/paperless/data
      - paperless_ng-media:/usr/src/paperless/media
      - paperless_ng-export:/usr/src/paperless/export
      - paperless_ng-consume:/usr/src/paperless/consume
    depends_on:
      - paperless_ng-db
      - paperless_ng-redis
  paperless_ng-db:
    image: postgres:13
    environment:
      POSTGRES_DB: paperless
      POSTGRES_PASSWORD: f325aa520e718dcc54dfb275aae97231a0f88f7b67302c63b8ecfdf9d96a7a08
      POSTGRES_USER: paperless
    volumes:
      - paperless_ng-db:/var/lib/postgresql/data
  paperless_ng-gotenberg:
    image: thecodingmachine/gotenberg:6
    environment:
      DISABLE_GOOGLE_CHROME: "1"
  paperless_ng-redis:
    volumes:
      - paperless_ng-redis-data:/data
  paperless_ng-tika:
    image: apache/tika
volumes:
  paperless_ng-data: {}
  paperless_ng-media: {}
  paperless_ng-export: {}
  paperless_ng-consume: {}
  paperless_ng-db: {}
  paperless_ng-redis-data: {}

Then run:

docker compose up -d
4

Access

Once started, access your app at http://localhost:8000

Why Self-Host Paperless-ng?

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

jonaswinkler/paperless-ng:${app_version}

Official Docs

paperless-ng.readthedocs.io

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