What You Need
- A VPS with 2 GB RAM (4 GB if you will OCR large batches)
- Ubuntu 22.04 or 24.04 with SSH
- A domain or subdomain pointed at the server
OCR is the one heavy step — it uses CPU while processing a document, then goes quiet. For a steady trickle of documents a small server is fine; for importing years of paperwork at once, more cores just means it finishes sooner.
Step 1: Install Docker
curl -fsSL https://get.docker.com | shStep 2: Compose (Paperless + Postgres + Redis + Caddy)
Paperless needs a database and a broker. Save as docker-compose.yml:
services:
broker:
image: redis:7-alpine
restart: always
db:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: change-this-password
volumes:
- pgdata:/var/lib/postgresql/data
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: always
depends_on:
- db
- broker
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
PAPERLESS_DBPASS: change-this-password
PAPERLESS_URL: https://docs.example.com
PAPERLESS_OCR_LANGUAGE: eng
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./consume:/usr/src/paperless/consume
caddy:
image: caddy:2-alpine
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
depends_on:
- webserver
volumes:
pgdata:
data:
media:
caddy_data:Step 3: The Caddyfile
docs.example.com {
reverse_proxy webserver:8000
}Bring it up and create the admin user:
docker compose up -d
docker compose run --rm webserver createsuperuserOpen https://docs.example.com and log in.
Step 4: Ingest Documents
Anything you drop into the consume folder on the host is automatically OCR'd, indexed and filed. Copy documents in over SSH:
rsync -avP ~/Documents/scans/ root@your-server-ip:/root/paperless/consume/Paperless watches the folder, processes each file, and then you search and tag from the web UI. Set up mail rules or a scanner that drops PDFs into that folder and the archive fills itself.
media volume means an OCR archive is never your only copy of an important paper.Step 5: Back It Up
Two volumes hold everything — the database and the media. A nightly job to off-site storage:
docker compose exec -T db pg_dump -U paperless paperless | gzip > /root/pl-db.sql.gz
docker run --rm -v paperless_media:/data -v /root:/backup alpine tar czf /backup/pl-media.tar.gz -C /data .
rclone copy /root/pl-db.sql.gz remote:paperless
rclone copy /root/pl-media.tar.gz remote:paperlessWhat It Costs
Paperless idles cheaply and only spikes CPU during OCR, so the Standard plan (2 vCPU, 4 GB) suits most people; storage grows with your archive, not with traffic. On NoctHost you pay hourly from a prepaid balance topped up with crypto — no card, no KYC — which fits keeping your most sensitive paperwork on a server no one else can index.