Nomploy Nomad Packs

← All packs

kapowarr v0.1.0

Media

Kapowarr — an automated comic-book library manager and downloader (a Sonarr/Radarr-style app for comics), organizing issues into a clean library. Deployed as a single host-networked Nomad service.

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

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

1 task http 5656 3 volumes image mrcas/kapowarr:latest tracks :latest image bumped today
Variables 13
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The Kapowarr container image. Pin a tag in production.
image = "mrcas/kapowarr:latest"

# Host port for the Kapowarr web UI.
port = 5656

# Named volume mounted at /app/db (the SQLite database).
data_volume = "kapowarr_data"

# Named volume mounted at /app/temp_downloads — in-progress downloads.
downloads_volume = "kapowarr_downloads"

# Named volume mounted at /comics — your managed comic library (root folder).
comics_volume = "kapowarr_comics"

# 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
"kapowarr"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"mrcas/kapowarr:latest"
The Kapowarr container image. Pin a tag in production.
port number
5656
Host port for the Kapowarr web UI.
data_volume string
"kapowarr_data"
Named volume mounted at /app/db (the SQLite database).
downloads_volume string
"kapowarr_downloads"
Named volume mounted at /app/temp_downloads — in-progress downloads.
comics_volume string
"kapowarr_comics"
Named volume mounted at /comics — your managed comic library (root folder).
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: kapowarr_datakapowarr_downloadskapowarr_comics

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/kapowarr_data/_data \
  /var/lib/docker/volumes/kapowarr_downloads/_data \
  /var/lib/docker/volumes/kapowarr_comics/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/kapowarr_data/_data backup:<bucket>/kapowarr_data
rclone sync /var/lib/docker/volumes/kapowarr_downloads/_data backup:<bucket>/kapowarr_downloads
rclone sync /var/lib/docker/volumes/kapowarr_comics/_data backup:<bucket>/kapowarr_comics

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

kapowarr

Kapowarr — an automated comic-book library manager and downloader, in the spirit of Sonarr/Radarr but for comics. Build a volume/issue library, match against ComicVine, grab issues from your download clients, then rename and organize them into a clean folder structure ready for a reader.

Single host-networked Nomad service with database, downloads and library volumes.

Deploy

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

Configure

Variable Default Description
port 5656 Web UI port.
image mrcas/kapowarr:latest Container image. Pin a tag in production.
data_volume kapowarr_data /app/db — the SQLite database.
downloads_volume kapowarr_downloads /app/temp_downloads — in-progress downloads.
comics_volume kapowarr_comics /comics — the managed comic library (root folder).
puid / pgid 1000 / 1000 User/group that owns the files (PUID/PGID).
tz UTC Container timezone (TZ).
resources { cpu = 300, memory = 256 } Task resources.

Set /comics as your root folder in Settings, and give Kapowarr a ComicVine API key to enable searching. Reads beautifully in komga or kavita. Pin the job to the node holding the volumes with constraints.