¿Tienes Jellyfin en tu NAS y quieres ver tus películas y series desde fuera de casa, con tu propio dominio y conexión segura HTTPS? Para eso necesitas un proxy inverso, y el más sencillo que conozco es Caddy: consigue y renueva el certificado HTTPS él solo y se configura con dos líneas. En esta guía te enseño cómo lo instalo con Docker Compose en mi NAS, paso a paso y con todos los comandos listos para copiar.
¿Por qué necesitamos Caddy?
Jellyfin funciona dentro de tu red en un puerto como el 8096, sin HTTPS. Caddy se pone delante: recibe las conexiones que llegan desde Internet a tu dominio (por ejemplo, jellyfin.tudominio.com), las protege con HTTPS y las reenvía a Jellyfin. Así no expones Jellyfin directamente y todo viaja cifrado.
En este artículo me centro únicamente en instalar y configurar Caddy en el NAS. El resto del proceso (dominio, DNS, DDNS, apertura y redirección de puertos en el router y Jellyfin) lo explico paso a paso en el vídeo de arriba y en la lección 18 del curso NAS UGREEN.
Qué necesitas antes de empezar
- Un NAS con Docker y Docker Compose (yo uso un UGREEN DXP4800 Plus).
- Acceso al NAS por SSH. Todos los pasos se hacen desde la terminal.
- Jellyfin funcionando en tu red (necesitarás su IP y su puerto).
- Un dominio o subdominio que apunte a la IP pública de tu casa, y el puerto redirigido en el router hacia el NAS.
Muy importante: los dominios, IPs y rutas de los ejemplos son de mi instalación. Sustitúyelos por los tuyos: tu dominio, la IP y el puerto de tu Jellyfin, y la ruta donde instales Caddy en tu NAS (ojo con
/volume2: en tu NAS puede ser/volume1u otro).
Paso 1: Crea la carpeta de Caddy
sudo mkdir -p /volume2/docker/caddy
Y entra en ella:
cd /volume2/docker/caddy
Paso 2: Crea el archivo docker-compose.yaml
sudo nano docker-compose.yaml
Pega dentro este contenido. Respeta los espacios del principio de cada línea: en los archivos YAML la sangría es obligatoria y, si la cambias, no funcionará.
services:
caddy:
image: caddy:2
container_name: caddy-jellyfin
restart: unless-stopped
ports:
- "8443:8443"
volumes:
- /volume2/docker/caddy/Caddyfile:/etc/caddy/Caddyfile
- /volume2/docker/caddy/data:/data
- /volume2/docker/caddy/config:/config
Guarda con Ctrl + O y Intro, y sal con Ctrl + X.
Paso 3: Crea el Caddyfile
sudo nano Caddyfile
Pega esto, cambiando el dominio por el tuyo y la IP y el puerto por los de tu Jellyfin:
jellyfin.tudominio.com:8443 {
reverse_proxy 192.168.x.xxx:8096
}
Guarda (Ctrl + O, Intro) y sal (Ctrl + X). Esas dos líneas le dicen a Caddy: “todo lo que llegue a este dominio por el puerto 8443, mándalo a Jellyfin”.
Paso 4: Crea las carpetas de datos
Aquí guardará Caddy los certificados y su configuración, para que no se pierdan al reiniciar el contenedor:
sudo mkdir -p /volume2/docker/caddy/data /volume2/docker/caddy/config
Paso 5: Comprueba que el Caddyfile es correcto
Antes de ponerlo en marcha, valida la configuración:
sudo docker run --rm -v /volume2/docker/caddy/Caddyfile:/etc/caddy/Caddyfile caddy:2 caddy validate --config /etc/caddy/Caddyfile
Si todo está bien, verás Valid configuration.
Paso 6: Pon Caddy en marcha
Desde la carpeta de Caddy:
cd /volume2/docker/caddy
sudo docker compose up -d
Paso 7: Comprueba que el contenedor funciona
sudo docker ps
En la lista tiene que aparecer el contenedor caddy-jellyfin.
Paso 8: Consulta los logs
Para ver qué está haciendo Caddy (por ejemplo, si ha conseguido el certificado HTTPS):
sudo docker logs caddy-jellyfin
¡Y listo! Ya tienes Caddy instalado y funcionando con Docker Compose.
Preguntas frecuentes
¿Qué es un proxy inverso?
Es un intermediario: recibe las visitas que llegan desde Internet y las reenvía al servicio que corresponde dentro de tu red. Así puedes tener varios servicios detrás de un solo punto de entrada, con HTTPS.
¿Por qué Caddy y no Nginx Proxy Manager?
Los dos sirven. Caddy me gusta porque se configura con un archivo de texto muy corto y gestiona los certificados HTTPS de forma automática, sin pasos extra.
Caddy no consigue el certificado HTTPS
Revisa los logs (paso 8). Casi siempre es porque el dominio no apunta todavía a tu IP pública (los cambios de DNS pueden tardar) o porque el puerto no está bien redirigido en el router hacia el NAS.
Si cambio el Caddyfile, ¿cómo aplico los cambios?
Reinicia el contenedor con sudo docker restart caddy-jellyfin.
¿Sirve para otros servicios además de Jellyfin?
Sí. Puedes añadir más bloques al Caddyfile, uno por dominio o subdominio, cada uno con su reverse_proxy hacia el servicio que quieras.
Si estás montando tu NAS, te interesará mi curso del UGREEN DXP4800 Plus en YouTube. ¿Te ha funcionado? Cuéntamelo en los comentarios.