import Navbar from '@/components/Navbar'; import Footer from '@/components/Footer'; import DocsLayout from '@/components/docs/DocsLayout'; export const metadata = { title: 'Install Jellyfin — DashCaddy Docs', description: 'Install and configure Jellyfin via DashCaddy. Free software media system - alternative to Plex', }; export default function jellyfinDocsPage() { return (
Category: Media Difficulty: Easy Docker image: jellyfin/jellyfin:latest

What is Jellyfin?

Free software media system - alternative to Plex

Jellyfin ships as a self-contained Docker image that DashCaddy provisions with one click. The platform handles the container lifecycle, DNS, reverse proxy, HTTPS certificate, and persistent storage so you can focus on using Jellyfin, not installing it.

Prerequisites

  • A running DashCaddy host with the dashboard accessible.
  • A host path to mount as the media library (default: /media).
  • If you want a stable subdomain: Technitium DNS recommended (otherwise DashCaddy will use direct IP access).

Install via the DashCaddy dashboard

  1. Sign in at https://status.sami (or your host's dashboard URL).
  2. Open Apps → Catalog and select Jellyfin from the Media category.
  3. Choose your host (or pick Local if you have one host).
  4. Fill in any required fields (notably the media library path and any claim token).
  5. Click Deploy. DashCaddy will:
    1. Pull the jellyfin/jellyfin:latest image.
    2. Create persistent volumes for config and data.
    3. Reserve a host port and wire it through Caddy.
    4. Issue a Let's Encrypt certificate for jellyfin.<your-domain>.
    5. Wait for the container health check (/health) to pass.
  6. After ~30–60 seconds the dashboard will turn the row Running and the URL will become clickable.

Install via the REST API

If you script deployments or use the MCP / AI Intent Router, install with:

curl -X POST https://your-dashcaddy-host/api/v1/apps/deploy \\
  -H "Authorization: Bearer $DASHCADDY_API_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{
    "template": "jellyfin",
    "host": "local",
    "subdomain": "jellyfin",
    "port": "{{PORT}}",
    "environment": {
      "JELLYFIN_PublishedServerUrl": ""
    },
    "labels": { "managed-by": "dashcaddy" }
  }'

Response returns a deployment ID. Poll GET /api/v1/apps/{id}/status until state === "running".

Install via the AI Intent Router

From any chat surface wired to DashCaddy's MCP server, just say:

"Deploy Jellyfin on my home host and expose it at jellyfin.sami"

The Intent Router will pick the right template, prompt you for any missing fields, and start the deployment.

Post-install: first-run checklist

  1. Complete the initial setup wizard
  2. Add your media libraries
  3. Configure user accounts and permissions

Media library path notes

The media mount path you set at deploy time is what Jellyfin will see as /media. For multi-library setups (movies + TV + music), bind the parent folder and let Jellyfin discover subfolders automatically.

  • Permissions: Jellyfin runs as a non-root user. Make sure your media files are readable by UID 1000 (or whichever the container expects — check the Logs tab on first run).
  • Performance: Put the media library on the same storage pool as DashCaddy itself; cross-pool mounts add 10–30% latency on first scan.

Volumes and persistent data

DashCaddy creates these volume mounts:

  • /opt/jellyfin/config:/config
  • /opt/jellyfin/cache:/cache
  • MEDIA_PATH:/media

All paths are absolute host paths; the left side is the container-side mount. Restarting the container never deletes the data; reinstalling the template preserves it unless you explicitly check Wipe data on the deploy form.

Environment variables

  • JELLYFIN_PublishedServerUrl

Override any of these from the deploy form's Environment panel, or programmatically in the API environment object.

Updating

DashCaddy's built-in Watchtower integration will pull jellyfin/jellyfin:latest every 24 hours and restart your container with zero downtime if the image digest changes. To force an update immediately, click Apps → Jellyfin → Update.

Backups

The config volume for Jellyfin is included in DashCaddy's default nightly snapshot. To restore on a fresh host, redeploy the same template and DashCaddy will prompt to restore from the most recent snapshot during install.

Troubleshooting

Common issues with Jellyfin:

  • Container won't start: check the dashboard's Logs tab. Most startup failures are permission errors on the media/config volume.
  • Library shows empty: confirm the media mount path is readable by the container UID and that the directory contains the file extensions Jellyfin indexes.
  • Slow first scan: expected for large libraries on first run. Subsequent restarts are fast.

For layer-by-layer diagnostics, see the Troubleshooting guide.

Related services

Jellyfin is in the Media category. Common pairings:


Last reviewed against DashCaddy product version in dashcaddy-api/src/docker/app-templates.js. Template ID: jellyfin. If anything here looks wrong, edit the file and the change will appear in the next docs rebuild.

); }