Nomploy Nomad Packs

← All packs

calibre-web-automated v0.1.0

Media

Calibre-Web Automated — an enhanced Calibre-Web that auto-ingests, converts and organizes ebooks dropped into a watch folder, on top of the familiar Calibre-Web reader and OPDS server. Deployed as a single host-networked Nomad service.

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

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

1 task http 8083 3 volumes image crocodilestick/calibre-web-automated:latest tracks :latest image bumped today
Variables 13
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The Calibre-Web Automated container image. Pin a tag in production.
image = "crocodilestick/calibre-web-automated:latest"

# Host port for the Calibre-Web Automated web UI.
port = 8083

# Named volume mounted at /config (settings + app database).
data_volume = "calibre_web_automated_data"

# Named volume mounted at /calibre-library — the Calibre library. CWA creates one here on first run if empty.
library_volume = "calibre_web_automated_library"

# Named volume mounted at /cwa-book-ingest — drop ebooks here to auto-import and convert.
ingest_volume = "calibre_web_automated_ingest"

# User ID that owns the files (PUID).
puid = 1000

# Group ID that owns the files (PGID).
pgid = 1000

# Container timezone (TZ), e.g. Europe/Bratislava.
tz = "UTC"

# Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []

# The task resources.
resources = {
    cpu    = 300
    memory = 256
  }
NameTypeDefaultDescription
job_name string
"calibre-web-automated"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"crocodilestick/calibre-web-automated:latest"
The Calibre-Web Automated container image. Pin a tag in production.
port number
8083
Host port for the Calibre-Web Automated web UI.
data_volume string
"calibre_web_automated_data"
Named volume mounted at /config (settings + app database).
library_volume string
"calibre_web_automated_library"
Named volume mounted at /calibre-library — the Calibre library. CWA creates one here on first run if empty.
ingest_volume string
"calibre_web_automated_ingest"
Named volume mounted at /cwa-book-ingest — drop ebooks here to auto-import and convert.
puid number
1000
User ID that owns the files (PUID).
pgid number
1000
Group ID that owns the files (PGID).
tz string
"UTC"
Container timezone (TZ), e.g. Europe/Bratislava.
constraints list
[]
Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 300
    memory = 256
  }
The task resources.
Back up this pack

This pack stores data in 3 Docker named volumes: calibre_web_automated_datacalibre_web_automated_librarycalibre_web_automated_ingest

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/calibre_web_automated_data/_data \
  /var/lib/docker/volumes/calibre_web_automated_library/_data \
  /var/lib/docker/volumes/calibre_web_automated_ingest/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/calibre_web_automated_data/_data backup:<bucket>/calibre_web_automated_data
rclone sync /var/lib/docker/volumes/calibre_web_automated_library/_data backup:<bucket>/calibre_web_automated_library
rclone sync /var/lib/docker/volumes/calibre_web_automated_ingest/_data backup:<bucket>/calibre_web_automated_ingest

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

calibre-web-automated

Calibre-Web Automated (CWA) — a supercharged Calibre-Web. On top of the familiar in-browser reader and OPDS server it auto-ingests ebooks dropped into a watch folder: converting formats, fixing metadata and covers, and filing them into your library automatically. A hands-off way to run a personal ebook library.

Single host-networked Nomad service with config, library and ingest volumes.

Deploy

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

Configure

Variable Default Description
port 8083 Web UI port (CWA_PORT_OVERRIDE).
image crocodilestick/calibre-web-automated:latest Container image. Pin a tag in production.
data_volume …_data /config — settings and app database.
library_volume …_library /calibre-library — the Calibre library (auto-created if empty).
ingest_volume …_ingest /cwa-book-ingest — drop ebooks here to auto-import.
puid / pgid 1000 / 1000 User/group that owns the files (PUID/PGID).
tz UTC Container timezone (TZ).
resources { cpu = 300, memory = 256 } Task resources.

Default login is admin / admin123 — change it immediately. Unlike plain Calibre-Web, CWA sets up a library for you on first run, so you can start dropping books into the ingest folder right away. Pin the job to the node holding the volumes with constraints.