Nomploy Nomad Packs

← All packs

qbittorrent v0.1.0

Media

qBittorrent — a full-featured, ad-free BitTorrent client with a clean web UI, categories, RSS auto-download, and a rich API. Runs headless as an always-on download client for the *arr stack. Deployed as a host-networked Nomad service with config and downloads volumes.

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

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

1 task http 8090torrent 6881 2 volumes image lscr.io/linuxserver/qbittorrent:latest tracks :latest image bumped today
Variables 13
values.hcl

Save as values.hcl, edit, then run:

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

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

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

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

# Host port for the web UI (WEBUI_PORT).
port = 8090

# Host port for incoming BitTorrent connections (TCP + UDP). Forward this for better peering.
torrent_port = 6881

# 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 qBittorrent config (/config): settings and session.
config_volume = "qbittorrent_config"

# Named volume for downloads (/data). Share this with your *arr packs (sonarr/radarr) 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 qBittorrent task.
resources = {
    cpu    = 500
    memory = 512
  }
NameTypeDefaultDescription
job_name string
"qbittorrent"
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/qbittorrent:latest"
The qBittorrent container image. Pin a tag in production.
port number
8090
Host port for the web UI (WEBUI_PORT).
torrent_port number
6881
Host port for incoming BitTorrent connections (TCP + UDP). Forward this for better peering.
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
"qbittorrent_config"
Named volume for qBittorrent config (/config): settings and session.
data_volume string
"media_data"
Named volume for downloads (/data). Share this with your *arr packs (sonarr/radarr) 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 qBittorrent task.
Back up this pack

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

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/qbittorrent_config/_data backup:<bucket>/qbittorrent_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

qbittorrent

qBittorrent — a full-featured, ad-free BitTorrent client with a clean web UI, categories, RSS auto-downloading, sequential downloading, and a rich API. Runs headless as an always-on download client — the standard companion for the sonarr / radarr packs.

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

Deploy

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

Configure

Variable Default Description
port 8090 Web UI port (WEBUI_PORT).
torrent_port 6881 Incoming BitTorrent port (TCP+UDP). Forward it for better peering.
config_volume qbittorrent_config /config — settings and session.
data_volume media_data /data — downloads. *Share with the arr packs and media server.
puid / pgid 1000 / 1000 User/group (PUID/PGID).
tz UTC Container timezone (TZ).
image lscr.io/linuxserver/qbittorrent:latest Container image. Pin a tag in production.
resources { cpu = 500, memory = 512 } Task resources.

First boot: a temporary admin password is printed in the task logs (nomad alloc logs) — log in and change it in Settings. Set the save path under /data/downloads, and keep the /data volume shared with sonarr, radarr, and jellyfin so imports use fast hardlinks. Use it only for content you're entitled to; front the web UI with a reverse proxy for TLS. Pin the job to the node holding the volumes with constraints.