Productivity & PM 3 services 3.3 GiB RAM 25 GB disk

Paperless-ngx

Scan, OCR, and full-text-search every document you own - the paperless office, on your infrastructure.

One-click deploy, from $25/mo on a Miget plan.

Paperless-ngx is the project that finally killed the filing cabinet: feed it scans, PDFs, and emails, and it OCRs every page, auto-tags by content, and makes the whole archive instantly full-text searchable. It is one of the most beloved self-hosted apps in existence - the thing people show friends to explain why they self-host at all.

This template runs the all-in-one image (web, OCR worker, scheduler, and consumer together under s6) on a managed Postgres with a noeviction Valkey queue. Documents, the search index, and the consume directory share one 20 GB volume - media has no S3 backend upstream, so the volume is the right shape.

One admin variable, your OCR language, and a folder you drop files into. Everything else - classification, tagging rules, correspondents - it learns.

#what you get

  • OCR to searchable PDF/A with auto-tagging and classification
  • Full-text search across the entire archive
  • Consume folder, web upload, email ingestion, and a mobile-friendly UI
  • Managed Postgres + noeviction Valkey; single all-in-one container
  • Document versioning, audit log, and saved views
  • GPL-3.0, hugely active community

#topology

ServiceRolePublic
paperlessweb + OCR worker + consumer (:5000)yes
broker / dbnoeviction Valkey / managed Postgresno

#miget sizing

// this stack needs

3.3 GiB RAM · 25 GB disk · 3 services

OCR is the RAM-hungry step - 2 GiB for the app handles steady ingestion; big batch imports appreciate more. The 20 GB volume holds documents and the index.

Hobby - recommended fit

$25/mo

2 vCPU · 4 GiB · 80 GiB disk

Headroom for your own apps: 8 GiB at $49/mo

Professional - production

$43/mo

2 vCPU · 4 GiB · 25 GiB disk

Dedicated resources, production SLOs - plan details

One Miget plan is a fixed pool of compute - the whole stack (managed databases included) deploys inside it, and anything left over runs your other apps. No per-service or per-seat math.

#vs. other PaaS

Estimated monthly cost of running this exact stack (3.3 GiB RAM, 25 GB disk, 3 containers) elsewhere, from published June 2026 rates.

PlatformEst. monthlyNotes
Miget $25 flat compose stacks first-class: one deploy, dedicated vCPU, managed Postgres/Valkey, volumes and TLS all included in the plan
Heroku ~$163 no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown
Render ~$47 per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service
DO App Platform ~$44 no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here)
Railway ~$36 usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top
Fly.io ~$23 cheapest sticker price - but burstable shared CPUs (1/16 core; dedicated vCPUs cost ~2-3×), no compose deploys (one app per container, manual wiring), managed DBs billed extra

Estimates assume RAM fully allocated at published on-demand rates - and sticker price isn't the whole comparison: the cheaper rows buy burstable shared CPUs, per-service wiring instead of a compose deploy, and managed databases billed separately. Heroku and DO App Platform have no persistent volumes at all - stateful stacks like this one need workarounds there.

#deploy it

On Miget

  1. Create a Compose Stack in app.miget.com pointing at the templates repository
  2. Set the stack path to paperless-ngx
  3. Set the required variables:
    • PAPERLESS_SECRET_KEY / PAPERLESS_ADMIN_PASSWORD / REDIS_AUTH, core secrets + first admin
    • PAPERLESS_URL, the app’s https domain after first deploy
  4. Deploy. Miget layers compose.miget.yaml (RAM, privacy, volumes, managed services) automatically

Locally first?

Every template is portable, vanilla Docker Compose - the Miget overrides are ignored locally:

git clone https://github.com/deployable-sh/stacks
cd miget-compose-templates/paperless-ngx
docker compose up -d

Same files, same behavior. The template README covers connection strings and scaling notes.

#faq

What does it actually do to my documents?

On ingestion: OCRs the pages (so scans become searchable), generates an archival PDF/A, extracts a thumbnail, and classifies it - assigning tags, a correspondent, and a document type based on rules and what it has learned. Then it is searchable forever.

How do documents get in?

Three ways: upload in the web UI, drop files into the consume directory (synced via the catalogue’s filebrowser/sftpgo or a scanner), or pipe email in. The API covers programmatic ingestion.

Why one big volume instead of managed storage?

Paperless keeps originals, the archive copies, and the search index on disk and has no S3 backend for media - so a single RWO volume is the honest design. Back that one volume up and your entire archive is portable.

Ship Paperless-ngx today

One compose stack, 3.3 GiB of RAM, from $25/month flat, and it runs on your laptop with the same files.