Nomploy Nomad Packs

← All packs

emby v0.1.0

Media

Emby — a personal media server to organize and stream your movies, TV, music and photos to any device, with live TV/DVR support. Deployed as a single host-networked Nomad service.

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

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

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

Save as values.hcl, edit, then run:

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

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

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

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

# Host port for the Emby web UI.
port = 8096

# Named volume mounted at /config (Emby database and settings).
data_volume = "emby_data"

# Named volume mounted at /data — your media library (movies, TV, music).
media_volume = "emby_media"

# 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
"emby"
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/emby:latest"
The Emby container image. Pin a tag in production.
port number
8096
Host port for the Emby web UI.
data_volume string
"emby_data"
Named volume mounted at /config (Emby database and settings).
media_volume string
"emby_media"
Named volume mounted at /data — your media library (movies, TV, music).
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 2 Docker named volumes: emby_dataemby_media

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/emby_data/_data \
  /var/lib/docker/volumes/emby_media/_data

rclone (sync to S3/R2)

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

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

emby

Emby — a personal media server that organizes and streams your movies, TV, music and photos to apps on every device, with live TV/DVR, user profiles and parental controls. A polished alternative/cousin to Jellyfin and Plex.

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 emby --registry=nomploy

Configure

Variable Default Description
port 8096 Web UI port.
image lscr.io/linuxserver/emby:latest Container image. Pin a tag in production.
data_volume emby_data /config — Emby database and settings.
media_volume emby_media /data — your media library.
puid / pgid 1000 / 1000 User/group that owns the files (PUID/PGID).
tz UTC Container timezone (TZ).
resources { cpu = 300, memory = 256 } Task resources. Bump for transcoding.

Complete the setup wizard on first launch and point Emby at your library under /data. For hardware transcoding, pass through the GPU/render device and use the appropriate image tag. Pin the job to the node holding the volumes with constraints. See also jellyfin (FOSS) and plex.