Nomploy Nomad Packs

← All packs

feishin v0.1.0

Media

Feishin — a modern self-hosted music player web UI for Jellyfin, Navidrome or any Subsonic-compatible server. Deployed as a single host-networked Nomad service; settings live in the browser so the container is stateless.

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

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

1 task http 9180 image ghcr.io/jeffvli/feishin:latest tracks :latest image bumped today
Variables 11
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The Feishin container image. Pin a tag in production.
image = "ghcr.io/jeffvli/feishin:latest"

# Host port for the Feishin web UI.
port = 9180

# Number of instances to run (the app is stateless — settings live in the browser).
count = 1

# Pre-select the backend type: jellyfin, navidrome or subsonic. Leave blank to choose in the UI.
server_type = ""

# Pre-fill the backend server URL (e.g. http://127.0.0.1:4533). Leave blank to set it in the UI.
server_url = ""

# If "true", lock the server settings so users can't change them in the UI.
server_lock = "false"

# Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []

# Resources for the Feishin task.
resources = {
    cpu    = 200
    memory = 128
  }
NameTypeDefaultDescription
job_name string
"feishin"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"ghcr.io/jeffvli/feishin:latest"
The Feishin container image. Pin a tag in production.
port number
9180
Host port for the Feishin web UI.
count number
1
Number of instances to run (the app is stateless — settings live in the browser).
server_type string
""
Pre-select the backend type: jellyfin, navidrome or subsonic. Leave blank to choose in the UI.
server_url string
""
Pre-fill the backend server URL (e.g. http://127.0.0.1:4533). Leave blank to set it in the UI.
server_lock string
"false"
If "true", lock the server settings so users can't change them in the UI.
constraints list
[]
Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 200
    memory = 128
  }
Resources for the Feishin task.
Readme

feishin

Feishin is a modern self-hosted music player web UI for Jellyfin, Navidrome or any Subsonic-compatible server.

This pack runs Feishin as a single host-networked Nomad job. It's a front-end only — it streams from your existing music server; settings (including the server you connect to) are stored in the browser, so the container is stateless (no database, no volumes).

Quick start

nomad-pack run feishin --registry=nomploy

Then open http://<node-ip>:9180 and add your music server, or pre-fill it with server_type + server_url.

Configuration

Variable Default Notes
port 9180 Web UI host port
server_type (blank) jellyfin, navidrome or subsonic
server_url (blank) Backend server URL to pre-fill
server_lock false true locks the server settings in the UI
count 1 Instances (stateless — scale freely)

Since Feishin is just a client, pair it with a music server pack (Navidrome, Jellyfin) and point it at that server.