Nomploy Nomad Packs

← All packs

calibre v0.1.0

Media

Calibre — the full Calibre e-book management desktop, streamed to your browser, with the built-in content server. Manage your library here and read it via calibre-web. Deployed as a single host-networked Nomad service.

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

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

1 task http 8080content 8081 1 volume image lscr.io/linuxserver/calibre:latest tracks :latest image bumped today
Variables 14
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The Calibre container image. Pin a tag in production.
image = "lscr.io/linuxserver/calibre:latest"

# Host port for the Calibre desktop GUI (browser-streamed).
port = 8080

# Host port for the Calibre built-in content server (enable it in Calibre: Preferences > Sharing over the net).
content_port = 8081

# Named volume mounted at /config — Calibre's settings and your library.
data_volume = "calibre_data"

# 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"

# Optional password for the desktop GUI (PASSWORD). Empty = no GUI password (put it behind a reverse proxy).
password = ""

# Shared-memory size in bytes for the browser-streamed desktop.
shm_size = 1073741824

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

# The task resources.
resources = {
    cpu    = 2000
    memory = 2048
  }
NameTypeDefaultDescription
job_name string
"calibre"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"lscr.io/linuxserver/calibre:latest"
The Calibre container image. Pin a tag in production.
port number
8080
Host port for the Calibre desktop GUI (browser-streamed).
content_port number
8081
Host port for the Calibre built-in content server (enable it in Calibre: Preferences > Sharing over the net).
data_volume string
"calibre_data"
Named volume mounted at /config — Calibre's settings and your library.
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.
password key string
""
Optional password for the desktop GUI (PASSWORD). Empty = no GUI password (put it behind a reverse proxy).
shm_size number
1073741824
Shared-memory size in bytes for the browser-streamed desktop.
constraints list
[]
Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 2000
    memory = 2048
  }
The task resources.
Back up this pack

This pack stores data in one Docker named volume: calibre_data

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_data/_data

rclone (sync to S3/R2)

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

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

Calibre — the full e-book management desktop, streamed to your browser. Import and convert books between formats, edit metadata and covers, fetch news, and manage your library — then serve it over the network with Calibre's built-in content server. Pairs perfectly with calibre-web for a lightweight reading front-end on the same library.

Single host-networked Nomad service (a browser-streamed desktop) with a persistent library volume.

Deploy

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

Configure

Variable Default Description
port 8080 Desktop GUI port (browser-streamed).
content_port 8081 Calibre content-server port (enable it in Calibre → Preferences → Sharing over the net).
password "" Optional GUI password (PASSWORD).
image lscr.io/linuxserver/calibre:latest Container image. Pin a tag in production.
data_volume calibre_data /config — settings and your library.
puid / pgid 1000 / 1000 User/group that owns the files (PUID/PGID).
tz UTC Container timezone (TZ).
shm_size 1073741824 (1 GB) Shared memory for the streamed desktop.
resources { cpu = 2000, memory = 2048 } Task resources. A GUI desktop needs generous CPU/RAM.

Security: the desktop gives full app access on your host — set a password and/or put it behind an authenticating reverse proxy over TLS; never expose it raw. It runs with seccomp=unconfined (required by the streamed desktop). To share the library with calibre-web, point both at the same library path and pin both jobs to the node holding this volume with constraints.