Jellyfin — the free software media system: stream your own movies, TV, music, and photos to any device with no tracking and no fees. Deployed as a single host-networked Nomad service with config and cache volumes and a read-only media volume you fill with your library.
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "jellyfin"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The official Jellyfin container image. Pin a tag in production.
image = "jellyfin/jellyfin:latest"
# Host port for the Jellyfin web UI (Jellyfin's default HTTP port; to use another you must also change it in Dashboard -> Networking after first run).
port = 8096
# Named volume for Jellyfin config, metadata, and its database (/config).
config_volume = "jellyfin_config"
# Named volume for transcoding/cache data (/cache).
cache_volume = "jellyfin_cache"
# Named volume mounted read-only at /media — fill it with your library.
media_volume = "jellyfin_media"
# Optional public URL clients should use (JELLYFIN_PublishedServerUrl). Empty = auto.
published_server_url = ""
# Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
# The task resources (raise cpu for software transcoding).
resources = {
cpu = 2000
memory = 1024
}
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "jellyfin" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "jellyfin/jellyfin:latest" | The official Jellyfin container image. Pin a tag in production. |
| port | number | 8096 | Host port for the Jellyfin web UI (Jellyfin's default HTTP port; to use another you must also change it in Dashboard -> Networking after first run). |
| config_volume | string | "jellyfin_config" | Named volume for Jellyfin config, metadata, and its database (/config). |
| cache_volume | string | "jellyfin_cache" | Named volume for transcoding/cache data (/cache). |
| media_volume | string | "jellyfin_media" | Named volume mounted read-only at /media — fill it with your library. |
| published_server_url | string | "" | Optional public URL clients should use (JELLYFIN_PublishedServerUrl). Empty = auto. |
| 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 = 2000
memory = 1024
} | The task resources (raise cpu for software transcoding). |
No variables match.
Jellyfin — the free software media system. Stream your own movies, TV, music, and photos to any device, with no tracking and no fees.
Single host-networked Nomad service (the official jellyfin/jellyfin image, runs as root so the
fresh volumes are writable). Config and cache volumes plus a read-only media volume.
nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run jellyfin --registry=nomploy
| Variable | Default | Description |
|---|---|---|
port |
8096 |
Web UI port. See note below. |
config_volume |
jellyfin_config |
/config — config, metadata, database. |
cache_volume |
jellyfin_cache |
/cache — transcode/cache. |
media_volume |
jellyfin_media |
/media, read-only — your library. |
published_server_url |
"" |
Optional public URL (JELLYFIN_PublishedServerUrl). |
image |
jellyfin/jellyfin:latest |
Container image. Pin a tag in production. |
resources |
{ cpu = 2000, memory = 1024 } |
Task resources; raise cpu for transcoding. |
8096. There is no env to rebind it — to use another
port, change it in Dashboard → Networking after first run and set the port variable to
match (so discovery is correct)./media as a library./dev/dri, etc.), which this pack does not
configure; software transcoding works but is CPU-heavy.constraints.