jellyfin is a free and open-source free software media system. Jellyfin is a free and open-source media server for hosting and streaming your media library, serving as an alternative to Plex, Emby, or commercial streaming solutions
1. Prerequisites
2. Supported Operating Systems
This guide supports installation on:
3. Installation
RHEL/CentOS/Rocky Linux/AlmaLinux
# Install EPEL repository if needed
sudo dnf install -y epel-release
# Install jellyfin
sudo dnf install -y jellyfin
# Enable and start service
sudo systemctl enable --now jellyfin
# Configure firewall
sudo firewall-cmd --permanent --add-port=8096/tcp
sudo firewall-cmd --reload
# Verify installation
jellyfin --version
Debian/Ubuntu
# Update package index
sudo apt update
# Install jellyfin
sudo apt install -y jellyfin
# Enable and start service
sudo systemctl enable --now jellyfin
# Configure firewall
sudo ufw allow 8096
# Verify installation
jellyfin --version
Arch Linux
# Install jellyfin
sudo pacman -S jellyfin
# Enable and start service
sudo systemctl enable --now jellyfin
# Verify installation
jellyfin --version
Alpine Linux
# Install jellyfin
apk add --no-cache jellyfin
# Enable and start service
rc-update add jellyfin default
rc-service jellyfin start
# Verify installation
jellyfin --version
openSUSE/SLES
# Install jellyfin
sudo zypper install -y jellyfin
# Enable and start service
sudo systemctl enable --now jellyfin
# Configure firewall
sudo firewall-cmd --permanent --add-port=8096/tcp
sudo firewall-cmd --reload
# Verify installation
jellyfin --version
macOS
# Using Homebrew
brew install jellyfin
# Start service
brew services start jellyfin
# Verify installation
jellyfin --version
FreeBSD
# Using pkg
pkg install jellyfin
# Enable in rc.conf
echo 'jellyfin_enable="YES"' >> /etc/rc.conf
# Start service
service jellyfin start
# Verify installation
jellyfin --version
Windows
# Using Chocolatey
choco install jellyfin
# Or using Scoop
scoop install jellyfin
# Verify installation
jellyfin --version
Initial Configuration
Basic Configuration
# Create configuration directory
sudo mkdir -p /etc/jellyfin
# Set up basic configuration
# See official documentation for detailed configuration options
# Test configuration
jellyfin --version
5. Service Management
systemd (RHEL, Debian, Ubuntu, Arch, openSUSE)
# Enable service
sudo systemctl enable jellyfin
# Start service
sudo systemctl start jellyfin
# Stop service
sudo systemctl stop jellyfin
# Restart service
sudo systemctl restart jellyfin
# Check status
sudo systemctl status jellyfin
# View logs
sudo journalctl -u jellyfin -f
OpenRC (Alpine Linux)
# Enable service
rc-update add jellyfin default
# Start service
rc-service jellyfin start
# Stop service
rc-service jellyfin stop
# Restart service
rc-service jellyfin restart
# Check status
rc-service jellyfin status
rc.d (FreeBSD)
# Enable in /etc/rc.conf
echo 'jellyfin_enable="YES"' >> /etc/rc.conf
# Start service
service jellyfin start
# Stop service
service jellyfin stop
# Restart service
service jellyfin restart
# Check status
service jellyfin status
launchd (macOS)
# Using Homebrew services
brew services start jellyfin
brew services stop jellyfin
brew services restart jellyfin
# Check status
brew services list | grep jellyfin
Windows Service Manager
# Start service
net start jellyfin
# Stop service
net stop jellyfin
# Using PowerShell
Start-Service jellyfin
Stop-Service jellyfin
Restart-Service jellyfin
# Check status
Get-Service jellyfin
Advanced Configuration
See the official documentation for advanced configuration options.
Reverse Proxy Setup
nginx Configuration
upstream jellyfin_backend {
server 127.0.0.1:8096;
}
server {
listen 80;
server_name jellyfin.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name jellyfin.example.com;
ssl_certificate /etc/ssl/certs/jellyfin.example.com.crt;
ssl_certificate_key /etc/ssl/private/jellyfin.example.com.key;
location / {
proxy_pass http://jellyfin_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Apache Configuration
<VirtualHost *:80>
ServerName jellyfin.example.com
Redirect permanent / https://jellyfin.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName jellyfin.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/jellyfin.example.com.crt
SSLCertificateKeyFile /etc/ssl/private/jellyfin.example.com.key
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8096/
ProxyPassReverse / http://127.0.0.1:8096/
</VirtualHost>
HAProxy Configuration
frontend jellyfin_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/certs/jellyfin.pem
redirect scheme https if !{ ssl_fc }
default_backend jellyfin_backend
backend jellyfin_backend
balance roundrobin
server jellyfin1 127.0.0.1:8096 check
Security Configuration
Basic Security Setup
# Set appropriate permissions
sudo chown -R jellyfin:jellyfin /etc/jellyfin
sudo chmod 750 /etc/jellyfin
# Configure firewall
sudo firewall-cmd --permanent --add-port=8096/tcp
sudo firewall-cmd --reload
# Enable SELinux policies (if applicable)
sudo setsebool -P httpd_can_network_connect on
Database Setup
See official documentation for database configuration requirements.
Performance Optimization
System Tuning
# Basic system tuning
echo 'net.core.somaxconn = 65535' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_max_syn_backlog = 65535' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Monitoring
Basic Monitoring
# Check service status
sudo systemctl status jellyfin
# View logs
sudo journalctl -u jellyfin -f
# Monitor resource usage
top -p $(pgrep jellyfin)
9. Backup and Restore
Backup Script
#!/bin/bash
# Basic backup script
BACKUP_DIR="/backup/jellyfin"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/jellyfin-backup-$DATE.tar.gz" /etc/jellyfin /var/lib/jellyfin
echo "Backup completed: $BACKUP_DIR/jellyfin-backup-$DATE.tar.gz"
Restore Procedure
# Stop service
sudo systemctl stop jellyfin
# Restore from backup
tar -xzf /backup/jellyfin/jellyfin-backup-*.tar.gz -C /
# Start service
sudo systemctl start jellyfin
6. Troubleshooting
Common Issues
1. Service won't start:
# Check logs
sudo journalctl -u jellyfin -n 100
sudo tail -f /var/log/jellyfin/jellyfin.log
# Check configuration
jellyfin --version
# Check permissions
ls -la /etc/jellyfin
2. Connection issues:
# Check if service is listening
sudo ss -tlnp | grep 8096
# Test connectivity
telnet localhost 8096
# Check firewall
sudo firewall-cmd --list-all
3. Performance issues:
# Check resource usage
top -p $(pgrep jellyfin)
# Check disk I/O
iotop -p $(pgrep jellyfin)
# Check connections
ss -an | grep 8096
Integration Examples
Docker Compose Example
version: '3.8'
services:
jellyfin:
image: jellyfin:latest
ports:
- "8096:8096"
volumes:
- ./config:/etc/jellyfin
- ./data:/var/lib/jellyfin
restart: unless-stopped
Maintenance
Update Procedures
# RHEL/CentOS/Rocky/AlmaLinux
sudo dnf update jellyfin
# Debian/Ubuntu
sudo apt update && sudo apt upgrade jellyfin
# Arch Linux
sudo pacman -Syu jellyfin
# Alpine Linux
apk update && apk upgrade jellyfin
# openSUSE
sudo zypper update jellyfin
# FreeBSD
pkg update && pkg upgrade jellyfin
# Always backup before updates
tar -czf /backup/jellyfin-pre-update-$(date +%Y%m%d).tar.gz /etc/jellyfin
# Restart after updates
sudo systemctl restart jellyfin
Regular Maintenance
# Log rotation
sudo logrotate -f /etc/logrotate.d/jellyfin
# Clean old logs
find /var/log/jellyfin -name "*.log" -mtime +30 -delete
# Check disk usage
du -sh /var/lib/jellyfin
Additional Resources
---
Note: This guide is part of the HowToMgr collection. Always refer to official documentation for the most up-to-date information.