mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-06-03 20:12:58 +00:00
12 KiB
12 KiB
Jellyfin Media Server Template
Overview
Jellyfin is a free software media system that puts you in control of managing and streaming your media.
Quick Start
# Create docker-compose.yml with the content below
docker-compose up -d
Docker Compose
version: '3.8'
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
ports:
- "8096:8096"
- "8920:8920" # HTTPS
- "7359:7359/udp" # Auto discovery
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- JELLYFIN_PublishedServerUrl=https://jellyfin.yourdomain.com
volumes:
- jellyfin-config:/config
- jellyfin-cache:/cache
- /path/to/media:/media
- /path/to/movies:/media/movies
- /path/to/tvshows:/media/tvshows
- /path/to/music:/media/music
- /path/to/photos:/media/photos
devices:
- /dev/dri:/dev/dri # Hardware acceleration
networks:
- jellyfin-network
volumes:
jellyfin-config:
jellyfin-cache:
networks:
jellyfin-network:
driver: bridge
Environment Variables
PUID: User ID for file permissionsPGID: Group ID for file permissionsTZ: Timezone (find yours: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)JELLYFIN_PublishedServerUrl: Your server URL for external access
Setup Guide
-
Create Directories:
mkdir -p jellyfin/{config,cache} mkdir -p media/{movies,tvshows,music,photos} -
Set Permissions:
sudo chown -R 1000:1000 jellyfin media -
Deploy:
docker-compose up -d -
Access: Open http://localhost:8096
-
Initial Setup:
- Choose language
- Set up media libraries
- Configure metadata
- Set up users
Media Library Setup
Movies Library
/path/to/movies/
├── Movie Name (Year)/
│ ├── Movie Name (Year).mp4
│ ├── Movie Name (Year).nfo
│ ├── poster.jpg
│ ├── fanart.jpg
│ └── subtitles/
│ ├── en.srt
│ └── es.srt
TV Shows Library
/path/to/tvshows/
├── Show Name/
│ ├── Season 01/
│ │ ├── S01E01.mkv
│ │ ├── S01E02.mkv
│ │ └── S01E03.mkv
│ ├── Season 02/
│ │ ├── S02E01.mkv
│ │ └── S02E02.mkv
│ ├── poster.jpg
│ ├── fanart.jpg
│ └── tvshow.nfo
Music Library
/path/to/music/
├── Artist Name/
│ ├── Album Name/
│ │ ├── 01 - Song Name.mp3
│ │ ├── 02 - Another Song.mp3
│ │ ├── cover.jpg
│ │ └── album.nfo
│ └── artist.nfo
Hardware Acceleration
NVIDIA GPU
services:
jellyfin:
image: jellyfin/jellyfin:latest
runtime: nvidia
environment:
- JELLYFIN_FFMPEG__hwaccel__nvdec=true
- JELLYFIN_FFMPEG__hwaccel__vaapi=false
devices:
- /dev/dri:/dev/dri
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
Intel Quick Sync
services:
jellyfin:
image: jellyfin/jellyfin:latest
environment:
- JELLYFIN_FFMPEG__hwaccel__vaapi=true
- JELLYFIN_FFMPEG__hwaccel__nvdec=false
devices:
- /dev/dri:/dev/dri
volumes:
- /dev/dri:/dev/dri
AMD VAAPI
services:
jellyfin:
image: jellyfin/jellyfin:latest
environment:
- JELLYFIN_FFMPEG__hwaccel__vaapi=true
devices:
- /dev/dri:/dev/dri
Reverse Proxy (Traefik)
labels:
- "traefik.enable=true"
- "traefik.http.routers.jellyfin.rule=Host(`jellyfin.yourdomain.com`)"
- "traefik.http.routers.jellyfin.tls=true"
- "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt"
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
Configuration Files
System.xml (jellyfin-config/system.xml)
<?xml version="1.0"?>
<SystemConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<AlbumArtworkMaxWidth>400</AlbumArtworkMaxWidth>
<AlbumArtworkMaxResolution>480</AlbumArtworkMaxResolution>
<MaxAlbumArtworkDownloadThreads>4</MaxAlbumArtworkDownloadThreads>
<ChapterImageResolution>600</ChapterImageResolution>
<DownloadImagesInAdvance>false</DownloadImagesInAdvance>
<EnableLocalIpAutoDiscovery>true</EnableLocalIpAutoDiscovery>
<EnableExternalIpAutoDiscovery>false</EnableExternalIpAutoDiscovery>
<EnableUPnP>true</EnableUPnP>
<PublicPort>8096</PublicPort>
<HttpServerPortNumber>8096</HttpServerPortNumber>
<HttpsPortNumber>8920</HttpsPortNumber>
<EnableHttps>false</EnableHttps>
<RequireHttps>false</RequireHttps>
<BaseUrl></BaseUrl>
<UDPPortNumber>7359</UDPPortNumber>
<EnableIP4>true</EnableIP4>
<EnableIP6>false</EnableIP6>
<EnableIPv6Firewall>false</EnableIPv6Firewall>
<EnableSSDPTracing>true</EnableSSDPTracing>
<SSDPTracingFilter></SSDPTracingFilter>
<UPnPCreateHttpPortMapping>true</UPnPCreateHttpPortMapping>
<UPnPCreateHttpsPortMapping>false</UPnPCreateHttpsPortMapping>
<BaseHttpPort>8096</BaseHttpPort>
<BaseHttpsPort>8920</BaseHttpsPort>
<EnableAutomaticPortMapping>true</EnableAutomaticPortMapping>
<AutoRunWebApp>false</AutoRunWebApp>
<DisableAutoWebApp>false</DisableAutoWebApp>
<LaunchWebBrowserOnStartup>false</LaunchWebBrowserOnStartup>
<UICulture>en-US</UICulture>
<SaveMetadataHidden>false</SaveMetadataHidden>
<MetadataUpdateMode>FullRefresh</MetadataUpdateMode>
<MetadataSavers>
<NfoSaver>
<Enabled>true</Enabled>
<Path>/config/metadata/Nfo</Path>
<UserDataPath>/config/metadata/Nfo</UserDataPath>
</NfoSaver>
</MetadataSavers>
<MetadataNetworkPath></MetadataNetworkPath>
<MetadataPath></MetadataPath>
<PreferredMetadataLanguage>en</PreferredMetadataLanguage>
<PreferredMetadataLanguageCode>en</PreferredMetadataLanguageCode>
<SeasonZeroDisplayName>Specials</SeasonZeroDisplayName>
<LibraryMonitorDelay>60</LibraryMonitorDelay>
<ImageSavingConvention>Compatible</ImageSavingConvention>
</SystemConfiguration>
Encoding.xml (jellyfin-config/encoding.xml)
<?xml version="1.0"?>
<EncodingConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EncodingThreadCount>0</EncodingThreadCount>
<MaxMuxingQueueSize>4096</MaxMuxingQueueSize>
<ThrottleDelaySeconds>0</ThrottleDelaySeconds>
<EnableHardwareEncoding>true</EnableHardwareEncoding>
<EnableHardwareDecoding>true</EnableHardwareDecoding>
<EnableSubtitleExtraction>true</EnableSubtitleExtraction>
<EnableThrottling>false</EnableThrottling>
<EnableAudioVbr>true</EnableAudioVbr>
<DownMixAudioBoost>2</DownMixAudioBoost>
<MaxAudioChannels>6</MaxAudioChannels>
<MaxAudioBitrate>128000</MaxAudioBitrate>
<MaxAudioTranscodingBitrate>384000</MaxAudioTranscodingBitrate>
<H264Preset>fast</H264Preset>
<H264Crf>23</H264Crf>
<H265Preset>fast</H265Preset>
<H265Crf>23</H265Crf>
<TonemapPreset>bt2390</TonemapPreset>
<TonemapRange>auto</TonemapRange>
<TonemapDesaturation>0</TonemapDesaturation>
<TonemapPeak>100</TonemapPeak>
<TonemapGamma>2.2</TonemapGamma>
<VideoBitrate>4000000</VideoBitrate>
</EncodingConfiguration>
Backup Strategy
# Backup Jellyfin configuration
docker run --rm -v jellyfin-config:/config -v $(pwd):/backup alpine tar czf /backup/jellyfin-config-backup.tar.gz -C /config .
# Backup cache (optional)
docker run --rm -v jellyfin-cache:/cache -v $(pwd):/backup alpine tar czf /backup/jellyfin-cache-backup.tar.gz -C /cache .
# Restore configuration
docker run --rm -v jellyfin-config:/config -v $(pwd):/backup alpine tar xzf /backup/jellyfin-config-backup.tar.gz -C /config
# Restart after restore
docker-compose restart jellyfin
Performance Optimization
# For better performance
environment:
- JELLYFIN_CACHE_PATH=/cache
- JELLYFIN_WEB_PORT=8096
- JELLYFIN_HTTP_PORT=8096
# Resource limits
deploy:
resources:
limits:
memory: 2G
cpus: '2.0'
reservations:
memory: 1G
cpus: '1.0'
Security
- Change default admin password
- Use HTTPS in production
- Network access control
- Regular backups
- Monitor access logs
Client Apps
Official Apps
- Web: Built-in web interface
- Desktop: Windows, macOS, Linux
- Mobile: iOS, Android
- TV: Android TV, Fire TV, Roku
Third-party Apps
- iOS: Infuse, nPlayer
- Android: VLC, MX Player
- Desktop: VLC, MPC-HC
API Usage
Get Server Info
curl -X GET "http://localhost:8096/System/Public" \
-H "Authorization: MediaBrowser Token=YOUR_API_KEY"
Get Users
curl -X GET "http://localhost:8096/Users" \
-H "Authorization: MediaBrowser Token=YOUR_API_KEY"
Get Libraries
curl -X GET "http://localhost:8096/Users/USER_ID/Items" \
-H "Authorization: MediaBrowser Token=YOUR_API_KEY"
Plugins
Popular Plugins
- Subtitle Downloader: Automatic subtitle downloads
- Ombi: Request system for media
- TMDb Box Sets: Automatic box set creation
- Trakt: Trakt.tv integration
- AudioBookshelf: Audiobook support
Plugin Installation
# Download plugin
curl -L "https://github.com/jellyfin/jellyfin-plugin-repo/releases/download/v10/manifest.json" \
-o /tmp/manifest.json
# Install via web interface or copy to plugins directory
Monitoring
Health Checks
# Check if Jellyfin is running
curl http://localhost:8096/health
# Get system info
curl http://localhost:8096/System/Info/Public
Logs
# View logs
docker-compose logs -f jellyfin
# Check specific logs
docker exec jellyfin cat /config/log/jellyfin.log
Troubleshooting
- Playback issues: Check codec support and hardware acceleration
- Metadata problems: Verify file naming and permissions
- Network access: Check firewall and port configuration
- Performance issues: Monitor CPU/memory usage
- Transcoding failures: Check ffmpeg configuration
Maintenance
# Restart service
docker-compose restart jellyfin
# Update image
docker-compose pull && docker-compose up -d
# Clean up old logs
docker exec jellyfin find /config/log -name "*.log.*" -mtime +30 -delete
# Rebuild library
curl -X POST "http://localhost:8096/Library/Refresh" \
-H "Authorization: MediaBrowser Token=YOUR_API_KEY"
Advanced Features
Live TV
# Add TV tuner support
devices:
- /dev/dvb:/dev/dvb
- /dev/bus/usb:/dev/bus/usb
Bookmarks
# Sync bookmarks between devices
curl -X POST "http://localhost:8096/Sync/Users/USER_ID/Data" \
-H "Authorization: MediaBrowser Token=YOUR_API_KEY"
Parental Controls
# Set parental controls via web interface
# Or via API
curl -X POST "http://localhost:8090/Users/USER_ID/Policy" \
-H "Authorization: MediaBrowser Token=YOUR_API_KEY" \
-d '{"MaxParentalRating": 18}'
Integration Examples
Home Assistant
# In Home Assistant configuration.yaml
media_player:
- platform: jellyfin
host: http://192.168.1.10:8096
api_key: YOUR_API_KEY
username: your-username
password: your-password
Kodi
# Install Jellyfin Kodi addon
# Configure server URL and credentials
Plex Migration
# Export Plex library
# Import to Jellyfin using compatible metadata
Hardware Requirements
Minimum Requirements
- CPU: 2 cores (4 recommended for transcoding)
- RAM: 2GB (4GB recommended)
- Storage: SSD for system, HDD for media
- Network: Gigabit recommended for 4K streaming
Recommended Requirements
- CPU: Intel i5/i7 or AMD Ryzen 5/7
- RAM: 8GB+
- GPU: NVIDIA/Intel for hardware acceleration
- Storage: NVMe SSD for cache, large HDD for media
- Network: 10GbE for multiple 4K streams
Best Practices
- Organize media: Use proper folder structure
- Hardware acceleration: Enable for better performance
- Regular backups: Backup configuration and metadata
- Network optimization: Use wired connections
- Monitor resources: Keep an eye on CPU/memory usage