Instalación de Jellyfin: Servidor de Medios en Linux
Jellyfin es un servidor de medios open-source y gratuito que permite organizar y transmitir tu biblioteca de vídeos, música y fotos desde tu propio servidor VPS o baremetal. Sin costes de suscripción ni limitaciones propietarias, Jellyfin ofrece transcodificación con aceleración hardware, gestión de usuarios, apps para múltiples plataformas y acceso remoto. Esta guía cubre la instalación completa de Jellyfin en Linux.
Requisitos Previos
- Ubuntu 20.04+, Debian 11+, CentOS 8+ o Rocky Linux 8+
- Mínimo 2 GB de RAM (4 GB recomendados)
- CPU potente para transcodificación por software (o GPU para aceleración hardware)
- Almacenamiento suficiente para la biblioteca de medios
- Puerto 8096 (HTTP) y 8920 (HTTPS) disponibles
Instalación de Jellyfin
Ubuntu/Debian
# Instalar dependencias
sudo apt install -y curl gnupg apt-transport-https
# Agregar la clave GPG de Jellyfin
curl -fsSL https://repo.jellyfin.org/debian/jellyfin_team.gpg.key | \
gpg --dearmor | sudo tee /usr/share/keyrings/jellyfin.gpg > /dev/null
# Agregar el repositorio
echo "deb [signed-by=/usr/share/keyrings/jellyfin.gpg arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/debian $( lsb_release -c -s ) main" | \
sudo tee /etc/apt/sources.list.d/jellyfin.list
# Instalar Jellyfin
sudo apt update
sudo apt install -y jellyfin
# Habilitar e iniciar el servicio
sudo systemctl enable --now jellyfin
# Verificar el estado
sudo systemctl status jellyfin
CentOS/Rocky Linux
# Agregar el repositorio RPM
sudo dnf install -y https://repo.jellyfin.org/releases/server/centos/stable/server/jellyfin-server-latest.rpm
sudo dnf install -y https://repo.jellyfin.org/releases/server/centos/stable/web/jellyfin-web-latest.rpm
# Instalar ffmpeg (necesario para transcodificación)
sudo dnf install -y epel-release
sudo dnf install -y ffmpeg
# Iniciar Jellyfin
sudo systemctl enable --now jellyfin
Instalación con Docker
La instalación con Docker es la más portable y fácil de gestionar:
# Crear directorio para los datos de Jellyfin
mkdir -p ~/jellyfin/{config,cache,media}
# Crear estructura de medios
mkdir -p ~/jellyfin/media/{peliculas,series,musica,fotos}
# Ejecutar Jellyfin con Docker
docker run -d \
--name jellyfin \
--restart unless-stopped \
-p 8096:8096 \
-p 8920:8920 \
-v ~/jellyfin/config:/config \
-v ~/jellyfin/cache:/cache \
-v ~/jellyfin/media:/media \
-e PUID=$(id -u) \
-e PGID=$(id -g) \
-e TZ=Europe/Madrid \
jellyfin/jellyfin:latest
Con Docker Compose:
cat > ~/jellyfin/docker-compose.yml << 'EOF'
version: '3'
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
user: "1000:1000"
environment:
- TZ=Europe/Madrid
volumes:
- ./config:/config
- ./cache:/cache
- ./media:/media:ro
ports:
- 8096:8096
- 8920:8920
restart: unless-stopped
# Para aceleración hardware Intel (VAAPI)
# devices:
# - /dev/dri/renderD128:/dev/dri/renderD128
EOF
docker compose up -d
Configuración Inicial de la Biblioteca
Acceder al panel de Jellyfin en http://TU-SERVIDOR:8096 para completar la configuración inicial:
- Seleccionar idioma (Español disponible)
- Crear cuenta de administrador
- Agregar bibliotecas de medios
Para organizar los archivos correctamente (Jellyfin usa NFO/TMDB para metadatos):
# Estructura recomendada para películas
~/jellyfin/media/peliculas/
├── El Padrino (1972)/
│ └── El Padrino (1972).mkv
├── Pulp Fiction (1994)/
│ └── Pulp Fiction (1994).mp4
└── Matrix (1999)/
└── Matrix (1999).mkv
# Estructura recomendada para series
~/jellyfin/media/series/
├── Breaking Bad/
│ ├── Season 01/
│ │ ├── Breaking Bad S01E01.mkv
│ │ └── Breaking Bad S01E02.mkv
│ └── Season 02/
│ └── Breaking Bad S02E01.mkv
# Ajustar permisos para que Jellyfin pueda leer los archivos
sudo chown -R jellyfin:jellyfin /var/lib/jellyfin/ # Instalación nativa
# Para Docker, asegurarse de que el PUID/PGID coincide con el propietario de los archivos
# Forzar un escaneo de biblioteca desde la CLI
# Nativo:
sudo -u jellyfin jellyfin --ffmpeg=/usr/bin/ffmpeg
# Docker:
docker exec jellyfin jellyfin_scan
Aceleración Hardware para Transcodificación
Intel Quick Sync / VAAPI
# Instalar controladores Intel Media
sudo apt install -y intel-media-va-driver vainfo # Ubuntu/Debian
# sudo dnf install -y intel-media-driver libva-intel-driver # CentOS/Rocky
# Verificar soporte VAAPI
vainfo
# Agregar el usuario jellyfin al grupo video/render
sudo usermod -aG render,video jellyfin
# Para Docker, mapear el dispositivo
# Agregar a docker-compose.yml:
# devices:
# - /dev/dri:/dev/dri
En el panel de Jellyfin: Administración > Transcodificación > Aceleración de hardware: VAAPI o Intel QuickSync
NVIDIA NVENC
# Verificar soporte NVIDIA
nvidia-smi
# Para Docker con soporte NVIDIA
docker run -d \
--name jellyfin \
--runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-p 8096:8096 \
-v ~/jellyfin/config:/config \
-v ~/jellyfin/cache:/cache \
-v ~/jellyfin/media:/media \
jellyfin/jellyfin:latest
En el panel: Administración > Transcodificación > NVENC
Gestión de Usuarios
# Desde el panel web: Administración > Usuarios > Agregar Usuario
# Opciones disponibles:
# - Contraseña con requisitos configurables
# - Bibliotecas accesibles por usuario
# - Control parental (clasificación por edades)
# - Límites de velocidad de transmisión
# - Perfil de transcodificación personalizado
Configuración recomendada para usuarios:
- Administrador: Acceso completo, sin límites
- Familia: Acceso a películas/series, sin contenido adulto
- Invitado: Solo lectura, sin descarga, límite de streams simultáneos
Acceso Remoto y HTTPS
Configurar un proxy inverso Nginx para HTTPS:
# Instalar Nginx y Certbot
sudo apt install -y nginx certbot python3-certbot-nginx
# Obtener certificado SSL
sudo certbot --nginx -d jellyfin.tu-dominio.com
# Configuración de Nginx para Jellyfin
sudo tee /etc/nginx/sites-available/jellyfin << 'EOF'
server {
listen 443 ssl http2;
server_name jellyfin.tu-dominio.com;
ssl_certificate /etc/letsencrypt/live/jellyfin.tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jellyfin.tu-dominio.com/privkey.pem;
client_max_body_size 20M;
location / {
proxy_pass http://127.0.0.1:8096;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/jellyfin /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
En el panel de Jellyfin: Administración > Red > Permitir acceso remoto: Activado
Optimización del Rendimiento
# Verificar el directorio de transcodificación (debe estar en RAM o SSD rápido)
# Panel: Administración > Transcodificación > Ruta temporal
# Crear tmpfs para transcodificación (en RAM)
sudo mkdir -p /tmp/jellyfin-transcode
# Agregar a /etc/fstab para persistencia:
echo "tmpfs /tmp/jellyfin-transcode tmpfs defaults,size=2G 0 0" | sudo tee -a /etc/fstab
sudo mount -a
# Ajustar límites de hilos de transcodificación
# Panel: Administración > Transcodificación > Hilos de transcodificación: 0 (automático)
# Monitorear el uso de recursos durante transcodificación
watch -n 1 "top -bn1 | grep -E 'jellyfin|ffmpeg'"
Solución de Problemas
Jellyfin no inicia:
# Ver logs detallados
sudo journalctl -u jellyfin -n 100
# Docker:
docker logs jellyfin
# Verificar permisos del directorio de datos
ls -la /var/lib/jellyfin/
sudo chown -R jellyfin:jellyfin /var/lib/jellyfin/
Problemas de transcodificación:
# Verificar que ffmpeg está instalado y es accesible
which ffmpeg
ffmpeg -version
# Verificar los logs de transcodificación
tail -f /var/log/jellyfin/jellyfin*.log | grep -i "error\|transcode"
# Forzar transcodificación por software si falla la aceleración
# Panel: Administración > Transcodificación > Deshabilitar aceleración hardware
Los metadatos no se cargan:
# Verificar conectividad con TMDB/TVDB
curl -I https://api.themoviedb.org
# Revisar los logs de la biblioteca
sudo journalctl -u jellyfin | grep -i "metadata\|scan"
# Forzar actualización de metadatos desde el panel
# Biblioteca > Tres puntos > Actualizar metadatos
Conclusión
Jellyfin es la mejor opción open-source para montar un servidor de medios personal sin suscripciones. Con soporte para aceleración hardware, múltiples usuarios y clientes para todas las plataformas, ofrece una experiencia comparable a Plex o Emby sin coste alguno, y con el control total que aporta alojar tu propio servidor.


