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 (
jellyfin/jellyfin:latest
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.
/media).https://status.sami (or your host's dashboard URL).jellyfin/jellyfin:latest image.jellyfin.<your-domain>./health) to pass.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".
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.
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.
1000 (or whichever the container expects — check the Logs tab on first run).DashCaddy creates these volume mounts:
/opt/jellyfin/config:/config/opt/jellyfin/cache:/cacheMEDIA_PATH:/mediaAll 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.
JELLYFIN_PublishedServerUrlOverride any of these from the deploy form's Environment panel, or programmatically in the API environment object.
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.
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.
Common issues with Jellyfin:
For layer-by-layer diagnostics, see the Troubleshooting guide.
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.