Jellyfin
The Free Software Media System
| Property | Value |
|---|---|
| Category | Apps |
| Status | 3, Beta |
| Image | jellyfin/jellyfin |
| Healthcheck | Yes |
| Backups | Yes |
Jellyfin is a free and open-source media server that lets you collect, manage, and stream your media. This recipe deploys Jellyfin with Traefik integration, health monitoring, and optional automated backups.
Quick Start
# Create a new Jellyfin instance
abra app new jellyfin --secrets
# Configure your instance
abra app config <app-name>
# Deploy
abra app deploy <app-name>
Configuration
Media Volumes
Configure media access by editing EXTRA_VOLUME in your app configuration:
# Single media folder
EXTRA_VOLUME=/mnt/media:/media
# Multiple folders (use docker-compose syntax)
EXTRA_VOLUME=/mnt/movies:/movies
During Jellyfin's initial setup wizard, add your mounted paths as media libraries.
Backup Configuration
To enable automated backups, add compose.backup.yml to your COMPOSE_FILE:
COMPOSE_FILE="compose.yml:compose.backup.yml"
Configure backup storage in your environment:
| Variable | Description | Default |
|---|---|---|
BACKUP_CRON |
Backup schedule (cron) | 0 2 * * * (2 AM daily) |
BACKUP_RETENTION_DAYS |
Days to keep backups | 7 |
BACKUP_LOCAL_PATH |
Local backup directory | /tmp/jellyfin-backups |
S3-Compatible Storage
AWS_S3_BUCKET_NAME=your-bucket
AWS_ACCESS_KEY_ID=your-key-id
AWS_SECRET_ACCESS_KEY=your-secret
AWS_S3_PATH=jellyfin
AWS_ENDPOINT=https://s3.example.com # For non-AWS S3
SSH/SFTP Storage
SSH_HOST_NAME=backup.example.com
SSH_USER=backup
SSH_REMOTE_PATH=/backups/jellyfin
Integration with Media Stack
Jellyfin works well with the *arr stack for automated media management:
| Service | Purpose |
|---|---|
| qBittorrent | Torrent client for downloads |
| Prowlarr | Indexer manager for all *arr apps |
| Sonarr | TV show monitoring and download |
| Radarr | Movie monitoring and download |
| Jellyseerr | Request management and discovery UI |
Shared Media Volumes
When integrating with Sonarr/Radarr, use compose.media_volumes.yml to share their media volumes:
COMPOSE_FILE="compose.yml:compose.media_volumes.yml"
movies_volume=radarr_media
shows_volume=sonarr_media
This mounts Radarr's movies and Sonarr's shows directly into Jellyfin at /movies and /shows.
Hardware Transcoding
For hardware-accelerated transcoding, you may need to pass through GPU devices. Create a custom compose overlay:
# compose.gpu.yml
services:
app:
devices:
- /dev/dri:/dev/dri # Intel QSV / VAAPI
Then add it to your configuration:
COMPOSE_FILE="compose.yml:compose.gpu.yml"
Troubleshooting
Health Check Failures
The health check uses Jellyfin's /health endpoint. If it fails:
- Check logs:
abra app logs <app-name> - Verify the container is running:
abra app ps <app-name> - Ensure port 8096 isn't blocked internally
Permission Issues
If Jellyfin can't access media files:
- Check volume mount permissions
- Ensure the container user has read access to media directories
- Verify SELinux/AppArmor policies if applicable
License
Jellyfin is licensed under GPL-2.0.