Tutorial

Migrar Plex a Jellyfin y Navidrome en un VPS

Autoalojamiento8 min de lectura12 pasos

En septiembre de 2026, la fundación Shadowserver contabilizó más de 36.000 instancias de Plex expuestas en internet que todavía ejecutaban versiones anteriores a la 1.43.3, el lanzamiento que corrige dos vulnerabilidades críticas que permiten escritura arbitraria de archivos y traversal de directorios. Si alojas Plex en un VPS root, la ventana de exposición es real y documentada. Esta guía muestra cómo cambiar a Jellyfin (vídeo) y Navidrome (música) sin perder bibliotecas, metadatos ni listas de reproducción, y por qué el coste de migrar es inferior al riesgo de quedarse.

Contenido· Por qué dejar Plex en 2026: 36.000 servidores expuestos1/9
  1. 01Por qué dejar Plex en 2026: 36.000 servidores expuestos
  2. 02Lo que Plex oculta detrás de su modelo cloud
  3. 03Requisitos previos antes de comenzar la migración
  4. 04Migración Plex → Jellyfin: paso a paso
  5. 05Migración musical: Plex → Navidrome
  6. 06Comparativa Plex vs Jellyfin vs Navidrome
  7. 07Configuración de Nginx como reverse proxy para Jellyfin
  8. 08Solución de problemas: los 3 errores más frecuentes
  9. 09Conclusión

Por qué dejar Plex en 2026: 36.000 servidores expuestos

El 9 de septiembre de 2026, Shadowserver publicó sus hallazgos: más de 36.000 servidores Plex accesibles desde internet no habían aplicado la actualización 1.43.3, disponible desde el 19 de mayo. Dos CVE son el núcleo de este aviso. CVE-2026-96656 (CVSS 7.2) permite a un atacante con privilegios de administración escribir archivos arbitrarios que se ejecutan al inicio, es decir, cargar un plugin malicioso que instala un rootkit sin ninguna verificación de firma ni bit de ejecución. CVE-2026-96651 (CWE-22, path traversal) permite a cualquier sesión autenticada leer cualquier archivo accesible por el usuario de sistema de Plex, incluido el PlexOnlineToken. Combinadas, estas dos vulnerabilidades cubren un escenario de escalada completo: robo de sesión y luego ejecución de código. Plex corrigió ambas en la build 1.43.3.10861; la build 1.43.3.10896 es el objetivo recomendado. El problema estructural persiste: Plex es software propietario cuyo ciclo de parches depende de un único fabricante, y 36.000 administradores no habían aplicado una corrección de cuatro meses de antigüedad.

Lo que Plex oculta detrás de su modelo cloud

Plex ofrece una interfaz cuidada, pero su modelo en la nube introduce dependencias ocultas que se vuelven problemáticas ante parches de seguridad o discontinuación del servicio.

  • Acceso remoto vía Plex Relay: cada stream pasa por los servidores de plex.tv, aunque tu VPS sea el único que almacena los archivos. Plex ve tus metadatos de reproducción.
  • Plex Pass obligatorio para funciones clave: sincronización sin conexión, acceso multiusuario completo, TV en directo y acceso remoto sin reenvío de puertos están reservados para los suscriptores de pago.
  • Autenticación centralizada: el inicio de sesión de tus clientes pasa por los servidores de Plex. Una caída de plex.tv te desconecta de tus propios archivos.
  • Actualizaciones no controladas: Plex puede desplegar cambios en el lado del servidor (relay, autenticación) sin que puedas auditarlos ni bloquearlos.
  • Telemetría activa por defecto: reproducción, búsquedas y hábitos de visualización se envían al fabricante a menos que los deshabilites manualmente en cada cliente.

Requisitos previos antes de comenzar la migración

Este procedimiento está orientado a un VPS root con Debian 12 o Ubuntu 22.04 LTS. Necesitas acceso SSH con root o sudo, Docker y Docker Compose instalados (v2+) y un directorio de medios accesible en lectura. Toma un snapshot del VPS antes de comenzar — los snapshots son reversibles con un solo comando y cuestan menos de una hora de cómputo. Jellyfin reemplaza la biblioteca de vídeo; Navidrome reemplaza la biblioteca de música. Ambos son de código abierto, sin suscripción, y se exponen detrás de un reverse proxy Nginx.

Migración Plex → Jellyfin: paso a paso

Aquí está el procedimiento completo para migrar tu biblioteca Plex a Jellyfin sin perder datos ni historial de visualización.

  1. Crear un snapshot del VPS

    Primero: snapshot create plex-before-migration desde el panel de tu proveedor (o la API equivalente). Este paso es tu red de seguridad; no lo omitas.

  2. Detener Plex correctamente

    systemctl stop plexmediaserver
    systemctl disable plexmediaserver

    Espera la confirmación de parada antes de continuar. Plex no debe seguir escuchando en el puerto 32400.

  3. Instalar Jellyfin con Docker Compose

    # /opt/jellyfin/docker-compose.yml
    services:
      jellyfin:
        image: jellyfin/jellyfin:latest
        container_name: jellyfin
        restart: unless-stopped
        ports:
          - "8096:8096"
        volumes:
          - /opt/jellyfin/config:/config
          - /opt/jellyfin/cache:/cache
          - /data/media:/media:ro
        environment:
          - JELLYFIN_PublishedServerUrl=https://jellyfin.tu-dominio.com

    Sustituye /data/media por la ruta exacta de tus archivos. El volumen se monta en solo lectura (:ro) como medida de precaución.

  4. Iniciar Jellyfin y ejecutar el asistente de configuración

    cd /opt/jellyfin && docker compose up -d

    Accede a http://IP-DEL-VPS:8096 para el asistente web. Crea la cuenta de administrador y añade tus bibliotecas apuntando a /media/peliculas, /media/series, etc.

  5. Escanear bibliotecas y verificar metadatos

    Jellyfin usa The Movie Database (TMDB) y TheTVDB por defecto. El primer escaneo completo tarda entre 5 y 30 minutos según el tamaño de la biblioteca. Verifica que las carátulas, sinopsis y valoraciones se muestran correctamente. Si un título no se reconoce automáticamente, usa la función Identificar para forzar la coincidencia.

  6. Configurar los clientes de Jellyfin

    Las aplicaciones oficiales de Jellyfin están disponibles en Android, iOS, Apple TV, Android TV, Roku y navegadores. Son gratuitas y de código abierto. Apunta cada cliente hacia la URL interna o pública de tu servidor; no se requiere autenticación de terceros.

  7. Verificar transcodificación y subtítulos

    En Panel > Reproducción, activa la transcodificación por hardware si tu VPS tiene GPU (Intel Quick Sync, NVIDIA NVENC). Prueba un archivo H.265 desde un cliente móvil para validar que la transcodificación por software funciona como respaldo. Verifica también que los subtítulos SRT y ASS/SSA se muestran correctamente.

  8. Eliminar Plex

    apt remove plexmediaserver --purge
    rm -rf /var/lib/plexmediaserver

    Solo elimina la instalación antigua después de validar Jellyfin en al menos un cliente durante 48 horas.

Migración musical: Plex → Navidrome

Navidrome es un servidor de música de código abierto compatible con la API Subsonic, lo que le da acceso a todo el ecosistema de clientes (DSub, Symfonium, Ultrasonic, Airsonic, etc.). Lee etiquetas ID3 v2.3 y v2.4, y archivos FLAC, MP3, AAC, OGG y Opus. Las listas de reproducción M3U presentes en tu directorio de música se importan automáticamente siempre que las rutas sean relativas a la raíz musical.

  1. Verificar la estructura de carpetas

    Navidrome espera una jerarquía Artista/Álbum/Pista.mp3. Si tus archivos ya están organizados así (lo que Plex también requiere), no es necesaria ninguna reorganización. Comprueba la ausencia de caracteres especiales en los nombres de carpetas (/, :, ?).

  2. Auditar las etiquetas ID3

    find /data/music -name '*.mp3' | head -20 | xargs id3v2 -l

    Los campos TPE1 (artista), TALB (álbum) y TIT2 (título) deben estar rellenos. Un archivo sin estas tres etiquetas se importará pero sin metadatos visibles. La herramienta beets puede corregir etiquetas faltantes en masa a través de su base de datos MusicBrainz.

  3. Desplegar Navidrome con Docker Compose

    # /opt/navidrome/docker-compose.yml
    services:
      navidrome:
        image: deluan/navidrome:latest
        container_name: navidrome
        restart: unless-stopped
        ports:
          - "4533:4533"
        volumes:
          - /opt/navidrome/data:/data
          - /data/music:/music:ro
        environment:
          - ND_SCANSCHEDULE=1h
          - ND_LOGLEVEL=info
          - ND_BASEURL=

    Inicia con docker compose up -d y accede a http://IP:4533 para crear la primera cuenta.

  4. Migrar listas de reproducción de Plex

    Plex no exporta listas de reproducción en formato M3U de forma nativa desde la interfaz. Usa la herramienta plexapi de Python para exportar: python3 -m plexapi.playlist export --token TU_TOKEN --output /data/music/playlists/. Los archivos M3U generados son importados automáticamente por Navidrome si las rutas son relativas al volumen /music.

Comparativa Plex vs Jellyfin vs Navidrome

La siguiente tabla compara los criterios esenciales para elegir entre Plex, Jellyfin y Navidrome.

Desplace la tabla

CriterioPlexJellyfinNavidrome
LicenciaPropietario (freemium)GPL-2.0 código abiertoGPL-3.0 código abierto
Acceso remoto sin suscripciónNo (requiere Plex Pass)Sí, nativoSí, nativo
Autenticación de terceros requeridaSí (plex.tv)NoNo
Biblioteca de vídeoSíSíNo (solo música)
Biblioteca de músicaSí (limitado)ParcialSí (especializado)
Transcodificación por hardwareRequiere Plex PassNativa (NVENC, QSV, VAAPI)N/A (solo audio)
Clientes móviles oficialesDe pago en iOS/AndroidGratuitos, código abiertoClientes Subsonic de terceros
Dependencia de la nubeAlta (relay, auth)NingunaNinguna

Configuración de Nginx como reverse proxy para Jellyfin

Jellyfin debe exponerse mediante HTTPS. La configuración siguiente asume un certificado Let's Encrypt gestionado por Certbot o tu CDN en modo Full (strict). Nunca expongas el puerto 8096 directamente; pasa siempre por Nginx.

# /etc/nginx/sites-available/jellyfin
server {
    listen 80;
    server_name jellyfin.tu-dominio.com;
    return 301 https://$host$request_uri;
}

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;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";

    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_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_buffering off;
        proxy_read_timeout 3600;
    }
}

Aplica la misma estructura para Navidrome reemplazando el puerto por 4533. Activa la configuración con nginx -t && systemctl reload nginx.

Solución de problemas: los 3 errores más frecuentes

Estos son los tres problemas más frecuentes durante una migración Plex/Jellyfin, con sus soluciones directas.

  • Biblioteca vacía tras el primer escaneo: verifica que la ruta montada en Docker corresponde exactamente al directorio que contiene tus archivos. docker exec jellyfin ls /media debe listar tus carpetas. Si el volumen está vacío, corrige el mapeo en docker-compose.yml y reinicia el contenedor.
  • Transcodificación falla con error ffmpeg: Jellyfin incluye su propia versión de ffmpeg. Si el contenedor no tiene acceso a GPU, deshabilita la transcodificación por hardware en Panel > Reproducción y cambia a transcodificación por software. En un VPS sin GPU, esta es la configuración normal.
  • Los clientes iOS/Android no encuentran el servidor: asegúrate de que el cortafuegos permite el puerto 443 desde el exterior (ufw allow 443), que tu DNS apunta a la IP del VPS y que el certificado TLS es válido. Prueba con curl -I https://jellyfin.tu-dominio.com/health desde tu máquina local.

Mantén Plex deshabilitado (no desinstalado) durante las primeras 48 horas tras la migración. El snapshot del VPS te permite volver atrás en menos de cinco minutos. Solo elimina los archivos de configuración de Plex (/var/lib/plexmediaserver) después de confirmar que todos tus clientes funcionan correctamente en Jellyfin y Navidrome.

Conclusión

Los 36.000 servidores Plex sin parche no son señal de negligencia individual: revelan una dependencia estructural de un fabricante propietario cuyo ciclo de parches es opaco. CVE-2026-96656 y CVE-2026-96651 muestran que esa dependencia tiene un coste medible. Jellyfin y Navidrome te devuelven el control: sin autenticación de terceros, sin relay cloud, sin suscripción para el acceso remoto. La migración lleva menos de una hora con esta guía; la biblioteca llega intacta. Si alojas tus medios en un VPS root, ya no hay razón para esperar.

Aloja Jellyfin en un VPS root hoy

ServOrbit ofrece Jellyfin preconfigurado en VPS root desde 99 DH/mes. Despliegue en un clic, reverse proxy Nginx incluido, sin suscripción ni nube de terceros.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva