Nomploy Nomad Packs

← All packs

paperless-ngx v0.1.0

Apps

Paperless-ngx — scan, index, OCR, and archive your physical documents into a searchable digital library with tags, correspondents, and full-text search. Deployed as an all-in-one host-networked Nomad job: a Redis broker sidecar plus the Paperless app on SQLite, with data/media/consume volumes.

nomad-pack run paperless-ngx --registry nomploy
2 tasks http 8000redis 6379 3 volumes image ghcr.io/paperless-ngx/paperless-ngx:latest
Variables 19
values.hcl

Save as values.hcl, edit, then run:

nomad-pack run paperless-ngx -f values.hcl --registry nomploy
# The name of the Nomad job.
job_name = "paperless-ngx"

# The Nomad namespace to deploy into.
namespace = "default"

# The datacenters to deploy to.
datacenters = ["*"]

# The Paperless-ngx container image. Pin a tag in production.
image = "ghcr.io/paperless-ngx/paperless-ngx:latest"

# The Redis broker image.
redis_image = "redis:7-alpine"

# Host port for the Paperless web UI (PAPERLESS_PORT).
port = 8000

# Host port for the co-located Redis broker.
redis_port = 6379

# Superuser created on first start (PAPERLESS_ADMIN_USER).
admin_user = "admin"

# Superuser password (PAPERLESS_ADMIN_PASSWORD). CHANGE THIS.
admin_password = "changeme-please"

# Django secret key (PAPERLESS_SECRET_KEY). Generate a long random value for production.
secret_key = "change-me-to-a-long-random-secret-key"

# Time zone (PAPERLESS_TIME_ZONE).
timezone = "Etc/UTC"

# Tesseract OCR language (PAPERLESS_OCR_LANGUAGE), e.g. "eng", "deu", "eng+deu".
ocr_language = "eng"

# Public URL Paperless is served at (PAPERLESS_URL). Empty = not set. Required if exposed on a domain.
url = ""

# Named volume for the SQLite database and index (/usr/src/paperless/data).
data_volume = "paperless_data"

# Named volume for archived documents (/usr/src/paperless/media). Critical — back it up.
media_volume = "paperless_media"

# Named volume watched for new documents to import (/usr/src/paperless/consume).
consume_volume = "paperless_consume"

# Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []

# Resources for the Paperless app task (OCR is CPU-heavy).
resources = {
    cpu    = 2000
    memory = 1024
  }

# Resources for the Redis broker task.
redis_resources = {
    cpu    = 200
    memory = 128
  }
NameTypeDefaultDescription
job_name string
"paperless-ngx"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"ghcr.io/paperless-ngx/paperless-ngx:latest"
The Paperless-ngx container image. Pin a tag in production.
redis_image string
"redis:7-alpine"
The Redis broker image.
port number
8000
Host port for the Paperless web UI (PAPERLESS_PORT).
redis_port number
6379
Host port for the co-located Redis broker.
admin_user string
"admin"
Superuser created on first start (PAPERLESS_ADMIN_USER).
admin_password set me string
"changeme-please"
Superuser password (PAPERLESS_ADMIN_PASSWORD). CHANGE THIS.
secret_key set me string
"change-me-to-a-long-random-secret-key"
Django secret key (PAPERLESS_SECRET_KEY). Generate a long random value for production.
timezone string
"Etc/UTC"
Time zone (PAPERLESS_TIME_ZONE).
ocr_language string
"eng"
Tesseract OCR language (PAPERLESS_OCR_LANGUAGE), e.g. "eng", "deu", "eng+deu".
url string
""
Public URL Paperless is served at (PAPERLESS_URL). Empty = not set. Required if exposed on a domain.
data_volume string
"paperless_data"
Named volume for the SQLite database and index (/usr/src/paperless/data).
media_volume string
"paperless_media"
Named volume for archived documents (/usr/src/paperless/media). Critical — back it up.
consume_volume string
"paperless_consume"
Named volume watched for new documents to import (/usr/src/paperless/consume).
constraints list
[]
Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 2000
    memory = 1024
  }
Resources for the Paperless app task (OCR is CPU-heavy).
redis_resources object
{
    cpu    = 200
    memory = 128
  }
Resources for the Redis broker task.
Readme

paperless-ngx

Paperless-ngx — scan, index, OCR, and archive your physical documents into a searchable digital library with tags, correspondents, document types, and full-text search.

All-in-one host-networked Nomad job: a Redis broker prestart sidecar plus the Paperless app on SQLite (no separate database server). The Paperless image runs its own startup migration and ownership fix, so no chown init is needed.

Deploy

nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run paperless-ngx --registry=nomploy

Configure

Variable Default Description
port 8000 Web UI port (PAPERLESS_PORT).
redis_port 6379 Co-located Redis broker port.
admin_user / admin_password admin / changeme-please Superuser created on first start. Change the password.
secret_key placeholder PAPERLESS_SECRET_KEY — set a long random value.
ocr_language eng Tesseract language(s), e.g. deu, eng+deu.
timezone Etc/UTC PAPERLESS_TIME_ZONE.
url "" PAPERLESS_URL; required if exposed on a domain.
data_volume paperless_data /usr/src/paperless/data — SQLite DB + index.
media_volume paperless_media /usr/src/paperless/media — archived docs (back up).
consume_volume paperless_consume /usr/src/paperless/consume — drop files to import.
resources { cpu = 2000, memory = 1024 } Paperless task resources (OCR is CPU-heavy).

Drop documents into the consume volume (or upload via the UI) and Paperless will OCR and file them. Pin the job to the node holding the volumes with constraints.