Nomploy Nomad Packs

← All packs

stump v0.1.0

Apps

Stump — a fast, self-hosted server for comics, manga, and ebooks, written in Rust. Ships a slick web reader, OPDS support for third-party reader apps, reading progress, and multi-user libraries with a tiny footprint. Deployed as a host-networked Nomad service with config and library volumes.

nomad-pack run stump --registry nomploy
…or one line (add registry + run)
curl -fsSL https://packs.nomploy.com/install.sh | sh -s -- stump

Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.

1 task http 10801 2 volumes image aaronleopold/stump:latest tracks :latest image bumped today
Variables 11
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The Stump container image. Pin a tag in production.
image = "aaronleopold/stump:latest"

# Host port for the Stump web UI. The container listens on 10801.
port = 10801

# User ID Stump runs as / owns files (PUID).
puid = 1000

# Group ID Stump runs as (PGID).
pgid = 1000

# Named volume for Stump config (/config): the SQLite database, thumbnails, and logs.
config_volume = "stump_config"

# Named volume for your library files (/data): the comics, manga, and books Stump scans.
library_volume = "stump_library"

# 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 Stump task.
resources = {
    cpu    = 500
    memory = 256
  }
NameTypeDefaultDescription
job_name string
"stump"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"aaronleopold/stump:latest"
The Stump container image. Pin a tag in production.
port number
10801
Host port for the Stump web UI. The container listens on 10801.
puid number
1000
User ID Stump runs as / owns files (PUID).
pgid number
1000
Group ID Stump runs as (PGID).
config_volume string
"stump_config"
Named volume for Stump config (/config): the SQLite database, thumbnails, and logs.
library_volume string
"stump_library"
Named volume for your library files (/data): the comics, manga, and books Stump scans.
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    = 500
    memory = 256
  }
Resources for the Stump task.
Back up this pack

This pack stores data in 2 Docker named volumes: stump_configstump_library

restic

# Run on the node hosting this pack. Point restic at your repo first:
#   export RESTIC_REPOSITORY="s3:https://<account>.r2.cloudflarestorage.com/<bucket>"
#   export RESTIC_PASSWORD="<repo-password>"
#   export AWS_ACCESS_KEY_ID=<key>  AWS_SECRET_ACCESS_KEY=<secret>
restic backup \
  /var/lib/docker/volumes/stump_config/_data \
  /var/lib/docker/volumes/stump_library/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/stump_config/_data backup:<bucket>/stump_config
rclone sync /var/lib/docker/volumes/stump_library/_data backup:<bucket>/stump_library

Paths assume the default Docker volume location (/var/lib/docker/volumes). Restore by stopping the job, restoring files into the same volume, and re-running the pack.

Readme

stump

Stump — a fast, self-hosted server for comics, manga, and ebooks, written in Rust with a tiny footprint. Slick web reader, OPDS support for third-party reader apps, reading progress, and multi-user libraries.

Single host-networked Nomad service with a config volume and a library volume.

Deploy

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

Configure

Variable Default Description
port 10801 Web UI port (STUMP_PORT).
config_volume stump_config /config — SQLite DB, thumbnails, logs.
library_volume stump_library /data — the files Stump scans (comics/manga/books).
puid / pgid 1000 / 1000 User/group Stump runs as (PUID/PGID).
image aaronleopold/stump:latest Container image. Pin a tag in production.
resources { cpu = 500, memory = 256 } Task resources.

On first run, create the admin account, then add libraries pointing at folders under /data. Read in the browser or via any OPDS app. To use existing media, copy it into the library volume or replace that mount with a bind to your media directory. A lighter, Rust-based sibling to the komga and kavita packs. Serves plain HTTP — front it with a reverse proxy for TLS. Pin the job to the node holding the volumes with constraints.