Tutoriales de VPS
Montar Jellyfin en un VPS (2026): Docker, transcodificación por hardware, HTTPS, bibliotecas multimedia y reproducción remota
Despliega Jellyfin en un VPS con Docker Compose, configura bibliotecas multimedia, HTTPS con dominio, subtítulos, reproducción remota y transcodificación por hardware Intel/NVIDIA, y aclara los costes de ancho de banda, el almacenamiento, las copias de seguridad, las actualizaciones y los fallos habituales.

Montar Jellyfin en un VPS (2026): Docker, transcodificación por hardware, HTTPS, bibliotecas multimedia y reproducción remota
Si quieres organizar tus propias películas, series, música y vídeos familiares en una interfaz similar a Netflix sin entregar tu biblioteca multimedia a una plataforma de terceros, Jellyfin es una de las opciones de código abierto más habituales. Ofrece clientes web, de TV, móvil y escritorio, y admite scraping de metadatos, subtítulos, varios usuarios, reanudación de la reproducción, transcodificación por hardware y reproducción remota.
Sin embargo, antes de montar Jellyfin en un VPS hay que calcular primero tres cosas: dónde se guardan los medios, si la reproducción necesita transcodificación y si el tráfico de salida es suficiente. Jellyfin en sí es gratuito, pero eso no significa que el servidor, el almacenamiento, el ancho de banda y la transcodificación también lo sean. Este artículo solo trata la gestión y la reproducción de archivos multimedia sobre los que tú o tu equipo tenéis derecho legal de uso.
Jellyfin es adecuado para desplegarse en un VPS cuando:
- Los archivos multimedia ya están en el VPS, en un disco montado localmente o en almacenamiento de objetos;
- Se usa principalmente Direct Play y no se necesita transcodificación de vídeo frecuente;
- Los miembros de la familia están en distintas regiones y necesitan acceso remoto;
- El ancho de banda y el tráfico mensual del VPS son suficientes;
- Se acepta mantener uno mismo el dominio, HTTPS, las copias de seguridad y la compatibilidad de los clientes.
Los siguientes casos encajan mejor con un servidor doméstico, un NAS o un servidor dedicado con GPU:
- Todos los medios están en discos de casa;
- Se reproducen a menudo 4K HDR, HEVC, AV1 o remux de alto bitrate;
- Varios usuarios reproducirán al mismo tiempo;
- El soporte de formatos de los clientes es deficiente y se necesita transcodificación en tiempo real;
- El VPS solo tiene CPU compartida, poco tráfico y un disco pequeño.
Si es solo para ver en persona, prioriza que el cliente use Direct Play. La transcodificación es la parte de Jellyfin que más recursos consume y donde un VPS normal suele atascarse.
| Modo de reproducción | Carga del servidor | Calidad de imagen | Condiciones de uso |
|---|---|---|---|
| Direct Play | Mínima | Calidad original | El cliente admite los formatos de vídeo, audio y subtítulos |
| Direct Stream | Baja | Normalmente no se recodifica el vídeo | Solo hay que cambiar el contenedor |
| Transcode | Máxima | Depende de la configuración | El cliente no admite el códec, el bitrate es demasiado alto o hay que incrustar subtítulos |
Por ejemplo, cuando el cliente admite H.264, AAC y MP4, el servidor suele poder hacer Direct Play. Si el vídeo es HEVC y el audio es TrueHD, y el televisor o el navegador no los admite, puede activarse la transcodificación. Los subtítulos SRT externos suelen ser ligeros, pero los subtítulos con estilos ASS, los subtítulos de imagen o la incrustación de subtítulos pueden obligar al servidor a recodificar todo el vídeo.
Antes de comprar un VPS no mires solo el número de núcleos de CPU. Comprueba primero qué códecs admiten tus clientes habituales y luego decide si necesitas GPU.
| Caso de uso | Configuración recomendada | Notas |
|---|---|---|
| Direct Play 1080p para una persona | 2 núcleos, 2 GB, SSD de 40 GB | Válido si los medios están en almacenamiento externo |
| Direct Play para 2–3 personas | 4 núcleos, 4 GB, NVMe de 80 GB | Fíjate sobre todo en el ancho de banda y el tráfico mensual |
| Transcodificación por software 1080p ocasional | 4–8 núcleos de CPU de alta frecuencia, 8 GB | Un VPS con CPU compartida no siempre es estable |
| 4K, HDR o varios flujos de transcodificación | GPU dedicada, 16 GB+ de RAM | Prioriza un servidor dedicado o una instancia con GPU |
| Biblioteca multimedia local grande | 4 núcleos, 8 GB, disco según la capacidad | Caché y metadatos en SSD |
La base de datos de Jellyfin, los pósteres, los subtítulos, las miniaturas y la caché de transcodificación conviene ponerlos en NVMe. Los archivos multimedia pueden ir en HDD de gran capacidad, almacenamiento en bloque, un NAS o almacenamiento de objetos, pero la latencia y los costes de salida del almacenamiento remoto afectan directamente a la reproducción.
Si aún no sabes qué puede ejecutar un VPS de 2 núcleos y 4 GB, puedes consultar primero Cómo elegir la configuración de un VPS. Cuando la biblioteca multimedia sea muy grande, consulta también ¿Necesita un VPS almacenamiento de objetos?.
El ancho de banda de reproducción equivale aproximadamente al bitrate medio del vídeo. Un vídeo de 10 Mbps reproducido de forma continua durante 1 hora consume aproximadamente:
10 Mbps × 3600 秒 ÷ 8 ≈ 4.5 GB
Reproduciendo 3 horas al día, al mes supone aproximadamente:
4.5 GB × 3 × 30 ≈ 405 GB
Esto aún no cuenta el audio, los subtítulos, los pósteres, los saltos repetidos ni otros usuarios. Si dos personas reproducen a la vez, tanto el ancho de banda instantáneo como el tráfico mensual se suman. Un vídeo 4K de alto bitrate puede llegar a 40–80 Mbps, y un VPS con 100 Mbps nominales se acercará pronto al límite.
El «tráfico ilimitado» también puede tener cláusulas de uso razonable, ancho de banda compartido o limitación de velocidad. Lee bien la política del proveedor antes de publicar el servicio y configura monitorización de tráfico y alertas de exceso en el VPS.
Se recomienda usar Ubuntu 22.04/24.04 LTS o Debian 12. Primero confirma que Docker está disponible:
docker version
docker compose version
Crea los directorios de Jellyfin:
sudo mkdir -p /opt/jellyfin/config
sudo mkdir -p /opt/jellyfin/cache
sudo mkdir -p /srv/media/movies
sudo mkdir -p /srv/media/tv
sudo chown -R "$USER":"$USER" /opt/jellyfin
sudo chmod -R 750 /opt/jellyfin
El directorio de medios puede proporcionarlo una herramienta de subida, SFTP, rclone o un montaje de almacenamiento independiente. No montes todo el directorio raíz, la configuración de SSH ni los directorios personales de otros usuarios dentro de Jellyfin.
El ejemplo oficial del contenedor usa jellyfin/jellyfin y mapea /config, /cache y el directorio de medios. Este artículo fija la versión estable actual 10.11.11 y hace que el puerto web escuche solo en localhost:
services:
jellyfin:
image: jellyfin/jellyfin:10.11.11
container_name: jellyfin
restart: unless-stopped
environment:
TZ: Asia/Shanghai
JELLYFIN_PublishedServerUrl: https://media.example.com
volumes:
- /opt/jellyfin/config:/config
- /opt/jellyfin/cache:/cache
- /srv/media/movies:/media/movies:ro
- /srv/media/tv:/media/tv:ro
ports:
- "127.0.0.1:8096:8096/tcp"
Guárdalo como /opt/jellyfin/compose.yaml y arráncalo:
cd /opt/jellyfin
docker compose up -d
docker compose ps
docker compose logs --tail=100 jellyfin
Prueba el servicio local:
curl -I http://127.0.0.1:8096
El ejemplo oficial también incluye UDP 7359 para el descubrimiento automático en la red local. Un VPS público normalmente no necesita abrir este puerto; es más claro que los clientes se conecten directamente mediante el dominio HTTPS.
El directorio de medios se monta en solo lectura con :ro, lo que evita que Jellyfin o los complementos borren por error los archivos originales. Solo considera un montaje de lectura y escritura cuando necesites borrar archivos desde la interfaz de administración; en producción es mejor mantener la biblioteca multimedia mediante un proceso de gestión de archivos independiente.
Prepara el dominio media.example.com y apunta su registro A al VPS. Con Caddy como ejemplo:
media.example.com {
reverse_proxy 127.0.0.1:8096
}
Recarga y comprueba:
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
curl -I https://media.example.com
Jellyfin transmite credenciales de inicio de sesión, registros de reproducción y contenido multimedia, así que no debería accederse a él por HTTP en texto plano en la red pública. Para el proceso completo de Caddy, DNS y certificados, consulta Guía completa de Caddy como proxy inverso en un VPS.
Si pones Cloudflare delante, ten en cuenta los límites de subida única, la caché, el tráfico proxificado y los términos del servicio. Los flujos de vídeo dinámicos de Jellyfin normalmente no son adecuados para cachearse como contenido estático de CDN. No caches medios privados ni eludas las reglas de la plataforma sin más para «ocultar la IP».
Tras visitar https://media.example.com, completa el asistente de idioma, administrador, biblioteca multimedia y acceso remoto.
- No uses
admin, el dominio ni el prefijo del correo como nombre de usuario; - Establece una contraseña larga y aleatoria;
- Usa el administrador solo para configurar y una cuenta normal para la reproducción diaria;
- No reutilices contraseñas del VPS, del correo o del proveedor de nube;
- No permitas que las cuentas de invitado accedan a la configuración de administración.
Crea bibliotecas multimedia independientes para películas y series, eligiendo las rutas respectivas:
/media/movies
/media/tv
No metas todo en un solo directorio, o el scraper confundirá fácilmente películas, episodios, extras y subtítulos.
Configura el idioma y el país/región preferidos para los metadatos y activa las fuentes de metadatos que necesites. El scraping de metadatos descarga pósteres, fondos e información del reparto, y con muchos archivos consume notablemente /config y el directorio de caché.
Un nombrado coherente ahorra más tiempo que emparejar a mano una y otra vez.
Ejemplo de directorio de películas:
/srv/media/movies/
└── Movie Name (2025)/
├── Movie Name (2025).mkv
├── Movie Name (2025).zh-CN.srt
└── poster.jpg
Ejemplo de directorio de series:
/srv/media/tv/
└── Series Name (2025)/
└── Season 01/
├── Series Name S01E01.mkv
├── Series Name S01E01.zh-CN.srt
└── Series Name S01E02.mkv
Escribir claramente el año, la temporada y el episodio reduce los errores de identificación de películas con el mismo nombre y de especiales. Antes de renombrar en lote, guarda una lista de los archivos originales para evitar que un error de reglas desordene toda la biblioteca.
Jellyfin admite subtítulos externos e incrustados. Para reducir la transcodificación:
- Prioriza SRT, que los clientes admiten bien;
- Nombra el archivo de subtítulos igual que el vídeo;
- Usa etiquetas de idioma como
.zh-CN.srt,.en.srt; - Evita poner como predeterminados subtítulos ASS complejos que no necesites;
- Los subtítulos de imagen y la incrustación de subtítulos aumentan mucho la carga de transcodificación;
- Los archivos de fuentes deben estar en un directorio de solo lectura claramente definido.
Si tienes fuentes personalizadas, puedes añadir un montaje:
volumes:
- /srv/fonts:/usr/local/share/fonts/custom:ro
La fuente de las fuentes tipográficas debe ser legal; si faltan fuentes, los estilos de subtítulos ASS se renderizan mal o se sustituyen.
Jellyfin admite oficialmente Intel QSV, NVIDIA NVENC/NVDEC, AMD VA-API/AMF, Apple VideoToolbox y Rockchip RKMPP. La imagen oficial de Docker incluye jellyfin-ffmpeg; usa preferentemente el FFmpeg de la imagen oficial y no lo sustituyas sin más por otras compilaciones.
La tarjeta gráfica virtual que muestran muchas consolas de VPS solo sirve para la pantalla de la consola y no puede usarse para transcodificación de vídeo. Compruébalo primero:
lspci -nn | grep -Ei "3d|display|vga"
ls -l /dev/dri
Sin /dev/dri, dispositivos NVIDIA o un passthrough de GPU explícito, no puedes asumir que la transcodificación por hardware esté disponible.
Un servidor dedicado con iGPU Intel puede mapear /dev/dri dentro del contenedor:
devices:
- /dev/dri:/dev/dri
Los permisos del usuario del host, del usuario del contenedor y de los grupos render/video deben coincidir. Tras un mapeo correcto, selecciona QSV o VA-API en el panel de administración de Jellyfin y prueba los registros de reproducción reales.
NVIDIA requiere el controlador correcto en el host y el NVIDIA Container Toolkit. Activa NVENC solo después de que nvidia-smi funcione correctamente y el contenedor vea la GPU. Los controladores, el runtime del contenedor y los límites de sesiones de GPU afectan a la disponibilidad.
Reproduce un archivo de prueba que sin duda requiera transcodificación, consulta el modo de reproducción y el motivo de la transcodificación en el Dashboard de Jellyfin y observa al mismo tiempo:
docker stats jellyfin
nvidia-smi
Intel/AMD pueden usar las herramientas de monitorización de GPU correspondientes. Un uso alto de CPU no significa necesariamente un fallo total, porque la incrustación de subtítulos, la conversión de audio y algunos filtros aún pueden recaer en la CPU.
Las siguientes prácticas son más eficaces que actualizar el VPS:
- Usar clientes que admitan HEVC, AV1, HDR y formatos de audio habituales;
- Preparar versiones compatibles con H.264/AAC para el navegador;
- Desactivar la incrustación de subtítulos que no necesites;
- Poner la calidad de reproducción en original;
- Transcodificar de antemano el contenido que se ve con frecuencia;
- Evitar ejecutar varias transcodificaciones por software a la vez en un VPS con CPU compartida;
- Poner la caché de transcodificación en SSD.
Direct Play reduce a la vez la CPU, la latencia y la pérdida de calidad, y es el objetivo más rentable de optimizar primero en Jellyfin remoto.
Crea una cuenta independiente para cada miembro de la familia y autoriza por biblioteca multimedia. No compartas la cuenta de administrador.
Ajustes recomendados:
- Prohibir a los usuarios normales borrar medios;
- Limitar las bibliotecas multimedia a las que se puede acceder;
- Establecer clasificaciones de contenido para las cuentas infantiles;
- Limitar el bitrate de reproducción remota;
- Desactivar los permisos de descarga que no se usen;
- Limpiar periódicamente dispositivos y sesiones sin usar durante mucho tiempo;
- Configurar limitación de velocidad en el proxy inverso o una VPN para los inicios de sesión públicos.
Si solo lo usas tú, puedes acceder tras entrar en una red privada mediante WireGuard, Tailscale o Headscale. Ya hay un tutorial para montar Headscale en un VPS, adecuado para gestionar varios dispositivos de forma unificada.
La ventaja son rutas sencillas y baja latencia. La desventaja es que los SSD de gran capacidad son caros y, si falla toda la máquina, los medios y el servicio pueden perderse juntos. Adecuado para una biblioteca pequeña y seleccionada, no para un crecimiento ilimitado.
El almacenamiento en bloque se usa como un disco local, pero normalmente se factura por capacidad. Confirma IOPS, rendimiento, instantáneas y capacidad de recuperación entre regiones. Si el disco de red se desconecta, Jellyfin puede escanear un directorio vacío; no configures el borrado automático de archivos originales.
El almacenamiento de objetos no es un sistema de archivos estándar. Montarlo directamente puede dar problemas de lecturas aleatorias, caché y costes de peticiones. Los saltos frecuentes generan peticiones de rango, y la experiencia de reproducción depende de la capa de montaje y de la red.
OpenList puede agregar discos en la nube, pero que Jellyfin lea luego por WebDAV añade otra capa de red y puntos de fallo. Puede usarse para pruebas personales; para una biblioteca multimedia a largo plazo, prioriza montajes locales estables, un NAS, caché de rclone o una solución de almacenamiento directamente compatible. También puedes consultar el tutorial para montar OpenList en un VPS.
Los archivos multimedia suelen ser muy grandes, mientras que los datos de configuración de Jellyfin no lo son. Haz copia de seguridad al menos de:
/opt/jellyfin/config;compose.yaml;- La configuración de Caddy/Nginx;
- Usuarios, registros de reproducción y configuración de complementos;
- Pósteres, subtítulos y NFO personalizados;
- La lista de archivos multimedia;
- Una estrategia de copia de seguridad independiente para los propios archivos multimedia.
El directorio de caché se puede reconstruir y normalmente no necesita copia a largo plazo. Los archivos multimedia no deberían guardarse solo en el mismo VPS; conserva al menos una segunda copia o una fuente de la que puedan recuperarse.
Antes de actualizar, registra la imagen actual y haz copia de seguridad de la configuración:
cd /opt/jellyfin
docker inspect jellyfin --format '{{.Config.Image}}'
docker compose config > compose.before-upgrade.yaml
sudo tar -czf jellyfin-config-$(date +%F).tar.gz config
Copia la copia de seguridad a otra máquina o al almacenamiento de objetos, luego cambia la versión de la imagen y reconstruye:
docker compose pull
docker compose up -d
docker compose logs --tail=100 jellyfin
Tras actualizar, comprueba el inicio de sesión, las bibliotecas multimedia, los complementos, los subtítulos, las conexiones de los clientes y una reproducción real. Si la base de datos ya se ha migrado, volver a poner la imagen en la versión anterior no basta para revertir; también hay que restaurar la copia de seguridad de la configuración previa a la actualización.
Primero confirma el puerto local de Jellyfin:
docker compose ps
curl -I http://127.0.0.1:8096
Si el puerto local funciona pero HTTPS devuelve 502, normalmente es una dirección upstream, un puerto o una red Docker mal configurados en el proxy inverso.
Comprueba la ruta de montaje y el directorio dentro del contenedor:
docker exec jellyfin ls -la /media/movies
docker exec jellyfin ls -la /media/tv
Si el host tiene los archivos pero el contenedor está vacío, normalmente es un problema de ruta de Compose, de momento del montaje o de permisos.
En el Dashboard, comprueba si es Direct Play o Transcode, y luego revisa CPU, GPU, disco, almacenamiento upstream y ancho de banda público. No lo juzgues solo por el gráfico de CPU de la página de inicio.
Cambia a subtítulos SRT o desactívalos para probar. Si al desactivarlos pasa a Direct Play, el formato de subtítulo original o la compatibilidad del cliente activaron la incrustación.
Comprueba si el cliente admite HDR, si el televisor tiene el modo correcto activado y si el vídeo activa tone mapping. La conversión de HDR a SDR exige mucho a la GPU, al controlador y a FFmpeg, y no conviene activarla a ciegas en un VPS normal sin verificar.
Revisa /opt/jellyfin/cache, confirma si las sesiones de reproducción se interrumpieron de forma anómala y configura una alerta de disco para el directorio de caché. No borres directamente segmentos de transcodificación en uso.
- Gestiona y reproduce solo medios sobre los que tengas derecho legal de uso;
- Expón Jellyfin solo por HTTPS o VPN;
- Separa las cuentas de administrador y de reproducción normal;
- Monta los directorios de medios en solo lectura por defecto;
- No compartas públicamente toda la biblioteca multimedia;
- No instales complementos de origen desconocido;
- Actualiza periódicamente Jellyfin, Docker y el host;
- Configura limitación de velocidad de inicio de sesión, alertas de tráfico y alertas de disco;
- Haz copia de seguridad de la configuración, del proxy inverso y de la lista de medios;
- Fija la versión y crea un punto de restauración antes de actualizar;
- No uses el servidor para eludir restricciones regionales, de derechos de autor o de acceso a plataformas;
- Lee las políticas del proveedor de VPS sobre tráfico elevado, reclamaciones de derechos de autor y abuso.
Para el primer despliegue puedes empezar con un VPS de 2 núcleos, 4 GB, NVMe de 80 GB y más de 2 TB de tráfico mensual, probando solo una biblioteca multimedia 1080p y un cliente. Asegúrate de que el estado de reproducción muestra Direct Play y luego añade poco a poco usuarios, subtítulos y almacenamiento externo.
Si transcodificas a menudo, deja de acumular CPU compartida. Prioriza mejorar la compatibilidad de los clientes o cambia a un servidor dedicado con iGPU Intel o GPU NVIDIA. Para 4K HDR y uso multiusuario, un servidor doméstico o un servidor dedicado con GPU suele ser más estable que un VPS normal.
La mejor experiencia con Jellyfin no es «una capacidad de transcodificación del servidor infinitamente potente», sino que los formatos multimedia, los clientes, el almacenamiento y la red encajen lo máximo posible. Primero haz que funcione Direct Play y luego habla de compartir en remoto y de bibliotecas multimedia grandes.