---
title: "Deploy Paperless-ngx (unofficial)"
description: "Self-hosted document management with OCR (unofficial Paperless-ngx)"
category: "Storage"
url: https://railway.com/deploy/paperless-ngx-unofficial
---

# Deploy Paperless-ngx (unofficial)

Self-hosted document management with OCR (unofficial Paperless-ngx)

**[Deploy Paperless-ngx (unofficial) on Railway](https://railway.com/template/paperless-ngx-unofficial)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/paperless-ngx-unofficial/manifest.json

- **Creator:** George's Projects
- **Category:** Storage

## Template content

### paperless-redis

- **Image:** valkey/valkey:9.1.2-alpine

### paperless-db

- **Image:** postgres:18.6

### paperless-ngx

- **Image:** ghcr.io/paperless-ngx/paperless-ngx:3.2.1
- **Health check:** /accounts/login/
- **Public domain:** Yes

## Documentation

# Deploy and Host Paperless-ngx (unofficial) on Railway

Paperless-ngx is a self-hosted document management system: scan or upload documents, OCR them, tag them and search everything. This is an unofficial template, not affiliated with the Paperless-ngx project. Paperless-ngx is licensed under GPL-3.0; this template deploys the unmodified official image (upstream source: https://github.com/paperless-ngx/paperless-ngx).

## About Hosting Paperless-ngx (unofficial)

This template deploys the official `paperless-ngx` image pinned to 3.2.1, together with PostgreSQL 18.6 and Valkey 9.1.2. One container runs the web server and the background workers. Documents and the search index live on one persistent volume mounted at `/data`, and the database has its own volume. An `admin` account is created on first start with a generated password: find it in the `PAPERLESS_ADMIN_PASSWORD` variable on the paperless-ngx service (Variables tab) and change it after your first login. Changing the variable later does not change the password of an existing account. Uploads work through the web UI, the mobile apps and the API. The consume folder and the default export folder are not persistent on Railway, so the folder-watching consumer is disabled; to export or back up, run `document_exporter /data/export` through `railway ssh` and copy the files out. Volume size limits depend on your Railway plan (0.5 GB Trial, 5 GB Hobby, 50 GB Pro) and a document archive grows quickly (Paperless keeps an original and an archived PDF per document). Volumes also mean this service cannot use replicas, and redeploying it causes brief downtime.

HTTPS: Railway terminates TLS at its edge for generated *.up.railway.app domains and custom domains (certificates are provisioned automatically), and redirects plain HTTP GET requests to HTTPS. This is Railway's platform behaviour, not a Paperless-ngx feature, and this template makes no claim about encryption inside Railway's network or about the security of Paperless-ngx itself. The bundled Valkey has no password and no public domain.

## Common Use Cases

- Turn scanned paper and PDFs into a searchable, tagged archive with OCR
- Keep household or small-business paperwork (invoices, receipts, letters) in one place you control
- Upload documents from the web UI, the mobile apps or the API and find them later with full-text search

## Dependencies for Paperless-ngx (unofficial) Hosting

- PostgreSQL 18.6 (bundled, with its own volume)
- Valkey 9.1.2 (bundled task broker, no volume)
- One persistent volume for documents and the search index

### Implementation Details

- Login: username `admin`, password from the `PAPERLESS_ADMIN_PASSWORD` variable.
- "Bad Request (400)": your hostname is not in `PAPERLESS_ALLOWED_HOSTS`. Add your custom domain to the comma-separated list (keep `healthcheck.railway.app`, no spaces). For a custom domain also set `PAPERLESS_URL` to `https://`.
- Consume folder: not available (no persistent drop folder). Upload through the web UI, the API or mail rules.
- OCR is CPU and RAM hungry. Upload smaller batches, or raise the service memory on a paid plan. `PAPERLESS_TASK_WORKERS` and `PAPERLESS_WEBSERVER_WORKERS` (default 1) multiply memory.
- Other OCR languages: set `PAPERLESS_OCR_LANGUAGE` (for example `deu`); for languages beyond English, German, French, Italian and Spanish also set `PAPERLESS_OCR_LANGUAGES`.
- Upgrading: bump the image tag and read the upstream release notes first; Paperless migrates on start. Pin the tag, do not use `latest`. Postgres major upgrades need a dump and restore.

## Why Deploy Paperless-ngx (unofficial) on Railway?


Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Paperless-ngx (unofficial) on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
 

## Similar templates

- [Garage S3 Storage](https://railway.com/deploy/garage-s3-storage) — Ultra-light S3 server: fast, open-source, plug-and-play.
- [Redis](https://railway.com/deploy/redis-1) — Self Host Latest Redis with Railway
- [EasyImg](https://railway.com/deploy/easyimg) — Simple self-hostable Nuxt.js personal image hosting system.

Open this page in a browser: https://railway.com/deploy/paperless-ngx-unofficial
