Nomploy Nomad Packs

← All packs

sonarr v0.1.0

Media

Sonarr — a PVR for TV series: monitor shows, grab new episodes from your indexers via a download client, then rename and organize them into your library automatically. Deployed as a host-networked Nomad service with config and media volumes.

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

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

1 task http 8989 2 volumes image lscr.io/linuxserver/sonarr:latest tracks :latest image bumped today
Variables 12
values.hcl

Save as values.hcl, edit, then run:

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

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

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

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

# Host port for the Sonarr web UI.
port = 8989

# User ID the app runs as (PUID).
puid = 1000

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

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

# Named volume for Sonarr config (/config): the database and settings.
config_volume = "sonarr_config"

# Named volume for media + downloads (/data): TV library and the download client's completed folder. Share this volume with your download client and media server for hardlinks/atomic moves.
data_volume = "media_data"

# 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 Sonarr task.
resources = {
    cpu    = 500
    memory = 512
  }
NameTypeDefaultDescription
job_name string
"sonarr"
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/sonarr:latest"
The Sonarr container image. Pin a tag in production.
port number
8989
Host port for the Sonarr web UI.
puid number
1000
User ID the app runs as (PUID).
pgid number
1000
Group ID the app runs as (PGID).
tz string
"UTC"
Container timezone (TZ), e.g. Europe/Bratislava.
config_volume string
"sonarr_config"
Named volume for Sonarr config (/config): the database and settings.
data_volume string
"media_data"
Named volume for media + downloads (/data): TV library and the download client's completed folder. Share this volume with your download client and media server for hardlinks/atomic moves.
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 = 512
  }
Resources for the Sonarr task.
Back up this pack

This pack stores data in 2 Docker named volumes: sonarr_configmedia_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/sonarr_config/_data \
  /var/lib/docker/volumes/media_data/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/sonarr_config/_data backup:<bucket>/sonarr_config
rclone sync /var/lib/docker/volumes/media_data/_data backup:<bucket>/media_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

sonarr

Sonarr — a PVR for TV series. Monitor the shows you follow, automatically grab new episodes from your indexers through a download client, then rename and organize them into your library. Handles quality profiles, upgrades, and release management.

Single host-networked Nomad service with config and media volumes.

Deploy

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

Configure

Variable Default Description
port 8989 Web UI port.
config_volume sonarr_config /config — database and settings.
data_volume media_data /data — TV library + downloads. Share this with your download client and media server.
puid / pgid 1000 / 1000 User/group (PUID/PGID).
tz UTC Container timezone (TZ).
image lscr.io/linuxserver/sonarr:latest Container image. Pin a tag in production.
resources { cpu = 500, memory = 512 } Task resources.

Connect the prowlarr pack for indexers and the qbittorrent pack as the download client, and set your root folder to /data/tv. Keep Sonarr, the download client, and your media server (jellyfin) on the same /data volume so imports use fast hardlinks/atomic moves. Serves plain HTTP — front it with a reverse proxy for TLS. Pin the job to the node holding the volumes with constraints.