Files
root 5617b29fcf fix: replace variable bind mounts with hardcoded paths/named volumes
Coolify converts ${VAR}:/path bind mounts to named Docker volumes when
the variable is not resolved. Fixed per stack:

- adguard: -> named volumes (data already in Coolify-created volumes)
- authentik: -> named volumes (data already in Coolify-created volumes)
- gitea: -> /opt/gitea/{postgres,data,runner}
- mail-relay: -> /opt/mail-relay/{queue,opendkim,secrets/...}
- media-server: COMMON_PATH -> /opt/media (hardcoded)
- trilium: -> /opt/trilium/data
- wireguard: -> /opt/wg-easy + /lib/modules

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 02:09:08 +00:00
..
2026-02-17 08:57:58 +00:00
2026-02-15 16:27:18 +00:00

Media Server - Stack Completo de Gestión de Medios

Stack completo para gestión y streaming de contenido multimedia con automatización de descargas.

🎯 Flujo de Trabajo

  1. Usuario solicita contenido → Jellyseerr
  2. Jellyseerr envía solicitud → Sonarr (series) o Radarr (películas)
  3. Sonarr/Radarr busca contenido → Prowlarr/Jackett
  4. Prowlarr consulta trackers → Indexers configurados
  5. Se descarga el contenido → Cliente de descargas
  6. Sonarr/Radarr organiza archivos → Directorios de medios
  7. Jellyfin detecta nuevo contenido → Disponible para streaming

📋 Descripción

Este stack despliega un servidor multimedia completo con:

Servicio Descripción Puerto Propósito
Jellyfin Servidor de streaming de medios 8096 Reproducir contenido multimedia
Jellyseerr Sistema de solicitudes 5055 Permitir solicitudes de usuarios
Sonarr Gestor de series TV 8989 Automatizar descargas de series
Radarr Gestor de películas 7878 Automatizar descargas de películas
Prowlarr Gestor de indexers 9696 Centralizar trackers
Jackett Proxy de trackers 9117 Alternativa a Prowlarr
FlareSolverr Resolver Cloudflare 8191 Bypasear protecciones

Características:

  • Automatización completa de descargas
  • Gestión de calidad y formatos
  • Sistema de solicitudes para usuarios
  • Protección con SSO (Authentik)
  • Certificados SSL automáticos (Let's Encrypt)
  • Red aislada para servicios internos

🚀 Despliegue

Prerequisitos

  1. Red Docker: Asegúrate de que la red proxy existe
  2. Registros DNS: Configura los registros A para tus dominios de servicios
  3. Almacenamiento: Prepara los directorios para medios y configuraciones

Desde Portainer

  1. Ve a StacksAdd stack
  2. Nombre: media-server
  3. Selecciona Repository o Git repository
  4. Configura:
    • Repository URL: <tu-repositorio>
    • Repository reference: main
    • Compose path: media-server/docker-compose.yml
  5. Carga el archivo de variables de entorno: media-server/stack.env
  6. Haz clic en Deploy the stack

Variables de Entorno Importantes

Edita el archivo stack.env:

# Global
TZ=Europe/Madrid
PUID=0
PGID=0

# Paths - Directorio base para configuraciones
COMMON_PATH=/opt/media-server

# Media mounts - Rutas del servidor donde están los archivos de medios
MEDIA_TV=/mnt/media/tv
MEDIA_MOVIES=/mnt/media/movies
MEDIA_DOWNLOADS=/mnt/media/downloads

# Networks
TRAEFIK_DOCKER_NETWORK=proxy
MEDIA_NETWORK_NAME=media

# Traefik & SSL
TRAEFIK_ENABLE=true
TRAEFIK_ENTRYPOINTS=websecure
TRAEFIK_TLS=true
TRAEFIK_CERTRESOLVER=letsencrypt
AUTH_MIDDLEWARE=ths-authentik@docker

# Dominios - Personaliza según tu dominio
DOMAIN=tudominio.com
PROWLARR_HOST=prowlarr.tudominio.com
JACKETT_HOST=jackett.tudominio.com
SONARR_HOST=sonarr.tudominio.com
RADARR_HOST=radarr.tudominio.com
JELLYSEERR_HOST=requests.tudominio.com
JELLYFIN_HOST=media.tudominio.com

⚙️ Configuración Post-Instalación

1. Preparar Directorios

Antes de desplegar, crea las estructuras de directorios necesarias:

# Directorio base de configuraciones
sudo mkdir -p /opt/media-server/configs/{prowlarr,jackett,sonarr,radarr,jellyseerr,jellyfin-vps}
sudo mkdir -p /opt/media-server/jellyfin/cache-vps

# Directorios de medios
sudo mkdir -p /mnt/media/{tv,movies,downloads}

# Ajustar permisos
sudo chown -R $USER:$USER /opt/media-server
sudo chown -R $USER:$USER /mnt/media

2. Configurar Prowlarr (Indexers)

Prowlarr es el gestor centralizado de indexers/trackers:

  1. Accede a https://prowlarr.tudominio.com
  2. Completa el asistente de configuración inicial
  3. Ve a SettingsIndexersAdd Indexer
  4. Añade tus trackers preferidos (públicos o privados)
  5. Si algún tracker requiere FlareSolverr para Cloudflare:
    • Ve a SettingsIndexersFlareSolverr
    • URL: http://flaresolverr:8191

3. Conectar Sonarr y Radarr con Prowlarr

En Prowlarr, añade las aplicaciones:

  1. Ve a SettingsAppsAdd Application
  2. Selecciona Sonarr o Radarr
  3. Configura:
    • Prowlarr Server: http://prowlarr:9696
    • Sonarr Server: http://sonarr:8989
    • Radarr Server: http://radarr:7878
    • API Key: Cópiala desde Settings → General en cada aplicación
  4. Haz clic en Test y luego Save
  5. Sincroniza los indexers automáticamente

4. Configurar Clientes de Descarga

En Sonarr y Radarr, configura tu cliente de descargas (qBittorrent, Transmission, etc.):

  1. Ve a SettingsDownload ClientsAdd
  2. Selecciona tu cliente
  3. Configura la conexión (host, puerto, usuario, contraseña)
  4. Establece las categorías (tv para Sonarr, movies para Radarr)

5. Configurar Perfiles de Calidad

En Sonarr y Radarr:

  1. Ve a SettingsProfiles
  2. Configura los perfiles de calidad según tus preferencias
  3. Ajusta el idioma preferido
  4. Configura el formato preferido (1080p, 4K, etc.)

6. Configurar Jellyfin

Jellyfin es tu servidor de streaming:

  1. Accede a https://media.tudominio.com
  2. Completa el asistente de configuración:
    • Crea el usuario administrador
    • Configura las bibliotecas:
      • Series: /data/tvshows
      • Películas: /data/movies
  3. Escanea las bibliotecas para detectar contenido
  4. Configura metadatos (TMDb, TVDb, etc.)

7. Configurar Jellyseerr

Jellyseerr permite a los usuarios solicitar contenido:

  1. Accede a https://requests.tudominio.com
  2. Conecta con Jellyfin:
    • URL: http://jellyfin:8096
    • API Key: Desde Jellyfin Dashboard → API Keys
  3. Conecta con Sonarr:
    • URL: http://sonarr:8989
    • API Key: Desde Sonarr Settings → General
  4. Conecta con Radarr:
    • URL: http://radarr:7878
    • API Key: Desde Radarr Settings → General
  5. Configura permisos de usuario
  6. Activa notificaciones (opcional)

8. Integración con Authentik (SSO)

Todos los servicios están protegidos con Authentik por defecto mediante el middleware ths-authentik@docker.

Para personalizar el acceso:

  1. En Authentik, crea aplicaciones para cada servicio
  2. Configura grupos y permisos según tus necesidades
  3. Los usuarios autenticados tendrán acceso automático

Si necesitas acceso público a Jellyfin:

# En stack.env, para Jellyfin
AUTH_MIDDLEWARE=  # Deja vacío para acceso público

🔧 Configuración Avanzada

Personalizar Puertos de Servicios

Por defecto los servicios usan sus puertos estándar:

PROWLARR_PORT=9696
JACKETT_PORT=9117
SONARR_PORT=8989
RADARR_PORT=7878
JELLYSEERR_PORT=5055
JELLYFIN_PORT=8096

Personalizar Nombres de Contenedores

PROWLARR_CONTAINER_NAME=prowlarr-prod
SONARR_CONTAINER_NAME=sonarr-prod
# etc...

Usar Imágenes Específicas

JELLYFIN_IMAGE=lscr.io/linuxserver/jellyfin:10.8.13
SONARR_IMAGE=lscr.io/linuxserver/sonarr:4.0
RADARR_IMAGE=lscr.io/linuxserver/radarr:5.2

Configurar FlareSolverr para Trackers Protegidos

FlareSolverr ayuda a resolver protecciones de Cloudflare:

# Recursos de memoria
FLARESOLVERR_SHM_SIZE=1gb

# Nivel de logs
LOG_LEVEL=info
LOG_HTML=false

# Solucionador de captchas (none, hcaptcha-solver)
CAPTCHA_SOLVER=none

Configurar PUID/PGID Personalizado

Para evitar problemas de permisos, usa tu usuario del sistema:

id $USER
# uid=1000(usuario) gid=1000(usuario)
PUID=1000
PGID=1000

Notificaciones Personalizadas

Configura notificaciones en cada aplicación:

Sonarr/Radarr:

  • Ve a SettingsConnectAdd Notification
  • Opciones: Discord, Telegram, Email, Slack, etc.

Jellyseerr:

  • Ve a SettingsNotifications
  • Configura Discord, Email, Telegram, etc.

🛠️ Troubleshooting

Sonarr/Radarr no encuentra series/películas

  1. Verifica que Prowlarr está conectado correctamente
  2. Comprueba que los indexers están funcionando en Prowlarr
  3. Revisa los logs:
    docker logs sonarr
    docker logs radarr
    

FlareSolverr no resuelve captchas

  1. Verifica los logs:

    docker logs flaresolverr
    
  2. Aumenta la memoria compartida si es necesario:

    FLARESOLVERR_SHM_SIZE=2gb
    
  3. Prueba la conectividad:

    docker exec prowlarr curl http://flaresolverr:8191/health
    

Error de permisos en directorios de medios

Si usas SELinux, los volúmenes ya tienen :Z:

# Si persisten problemas
sudo chcon -Rt svirt_sandbox_file_t /opt/media-server
sudo chcon -Rt svirt_sandbox_file_t /mnt/media

Si usas PUID/PGID personalizado:

# Ajustar permisos
sudo chown -R 1000:1000 /opt/media-server
sudo chown -R 1000:1000 /mnt/media

Jellyfin no detecta el contenido

  1. Verifica las rutas de las bibliotecas en Jellyfin:

    • Series: /data/tvshows
    • Películas: /data/movies
  2. Escanea manualmente las bibliotecas:

    • Dashboard → Libraries → Scan All Libraries
  3. Verifica permisos de lectura:

    docker exec jellyfin-vps ls -la /data/tvshows
    docker exec jellyfin-vps ls -la /data/movies
    

Jellyseerr no se conecta con Sonarr/Radarr

  1. Verifica las API Keys en cada servicio

  2. Usa las URLs internas del contenedor:

    • Sonarr: http://sonarr:8989
    • Radarr: http://radarr:7878
    • Jellyfin: http://jellyfin:8096
  3. Revisa los logs:

    docker logs jellyseerr
    

Los servicios no son accesibles vía web

  1. Verifica que Traefik está corriendo

  2. Comprueba las etiquetas de Traefik en los contenedores:

    docker inspect prowlarr | grep traefik
    
  3. Verifica los certificados SSL:

    docker logs traefik | grep letsencrypt
    
  4. Comprueba los registros DNS:

    nslookup prowlarr.tudominio.com
    

📚 Recursos Adicionales

🔒 Seguridad

  • SSO con Authentik: Todos los servicios protegidos por defecto
  • API Keys: Protege las API keys de cada servicio
  • VPN: Considera usar VPN para clientes de descarga
  • Trackers Privados: Usa credenciales seguras para trackers privados
  • Certificados SSL: Let's Encrypt mediante Traefik
  • Backups: Realiza backups regulares de configuraciones y bases de datos

💾 Backups

Backup de Configuraciones

# Backup de todas las configuraciones
sudo tar -czf media-server-configs-$(date +%Y%m%d).tar.gz /opt/media-server/configs

# Restaurar
sudo tar -xzf media-server-configs-YYYYMMDD.tar.gz -C /

Backup de Bases de Datos Internas

Cada servicio *arr tiene su propia base de datos SQLite:

# Sonarr
docker exec sonarr cp /config/sonarr.db /config/sonarr.db.backup

# Radarr
docker exec radarr cp /config/radarr.db /config/radarr.db.backup

# Prowlarr
docker exec prowlarr cp /config/prowlarr.db /config/prowlarr.db.backup

Backup Completo del Stack

# Script de backup completo
#!/bin/bash
BACKUP_DIR=/backups/media-server
DATE=$(date +%Y%m%d)

mkdir -p $BACKUP_DIR

# Configuraciones
sudo tar -czf $BACKUP_DIR/configs-$DATE.tar.gz /opt/media-server/configs

# Lista de contenido (opcional)
sudo tar -czf $BACKUP_DIR/media-structure-$DATE.tar.gz \
  --exclude='*' \
  --include='*/' \
  /mnt/media

echo "Backup completado: $BACKUP_DIR"

🔄 Actualizaciones

  1. Backup primero: Siempre haz backup antes de actualizar
  2. Actualiza las versiones de imágenes en stack.env:
    JELLYFIN_IMAGE=lscr.io/linuxserver/jellyfin:10.9.0
    SONARR_IMAGE=lscr.io/linuxserver/sonarr:latest
    RADARR_IMAGE=lscr.io/linuxserver/radarr:latest
    
  3. Actualiza el stack en Portainer o con Docker Compose:
    docker compose pull
    docker compose up -d
    
  4. Verifica los logs de cada servicio
  5. Comprueba que todo funciona correctamente

Actualizaciones Recomendadas

  • Jellyfin: Revisa changelog antes de actualizar versiones mayores
  • Sonarr/Radarr: Usa latest para recibir actualizaciones automáticas
  • Prowlarr: Mantén sincronizado con Sonarr/Radarr
  • FlareSolverr: Actualiza cuando haya cambios en Cloudflare

📊 Monitoreo

Ver Estadísticas de Uso

Jellyfin:

  • Dashboard → Activity → Ver reproducciones activas
  • Dashboard → Users → Estadísticas por usuario

Sonarr/Radarr:

  • System → Status → Ver actividad de descargas
  • Queue → Ver cola de descargas

Prowlarr:

  • System → Status → Estadísticas de indexers

Logs de Servicios

# Ver logs en tiempo real
docker logs -f prowlarr
docker logs -f jackett
docker logs -f sonarr
docker logs -f radarr
docker logs -f jellyseerr
docker logs -f jellyfin-vps
docker logs -f flaresolverr

# Ver últimas 100 líneas
docker logs --tail 100 sonarr

Salud del Sistema

Cada servicio *arr tiene una página de salud:

  • Sonarr: Settings → General → System Status
  • Radarr: Settings → General → System Status
  • Prowlarr: System → Status

Monitoreo de Recursos

Usa docker stats para ver uso de recursos:

docker stats prowlarr sonarr radarr jellyfin-vps jellyseerr

Notificaciones de Estado

Configura notificaciones en Sonarr/Radarr para:

  • Descargas completadas
  • Fallos en descargas
  • Problemas con indexers
  • Actualizaciones de aplicaciones

📝 Referencia Rápida

URLs de Servicios (Por Defecto)

Prowlarr:   https://prowlarr.tudominio.com
Jackett:    https://jackett.tudominio.com
Sonarr:     https://sonarr.tudominio.com
Radarr:     https://radarr.tudominio.com
Jellyseerr: https://requests.tudominio.com
Jellyfin:   https://media.tudominio.com

URLs Internas (Entre Contenedores)

Prowlarr:     http://prowlarr:9696
Jackett:      http://jackett:9117
Sonarr:       http://sonarr:8989
Radarr:       http://radarr:7878
Jellyseerr:   http://jellyseerr:5055
Jellyfin:     http://jellyfin:8096
FlareSolverr: http://flaresolverr:8191

Rutas de Montaje en Contenedores

Configuraciones:  /config
Series TV:        /tv (Sonarr), /data/tvshows (Jellyfin)
Películas:        /movies (Radarr), /data/movies (Jellyfin)
Descargas:        /downloads

Comandos Útiles

# Ver todos los contenedores del stack
docker ps --filter "name=prowlarr|sonarr|radarr|jellyfin|jellyseerr|jackett|flaresolverr"

# Reiniciar un servicio específico
docker restart sonarr

# Ver uso de recursos
docker stats --no-stream prowlarr sonarr radarr jellyfin-vps

# Backup rápido de configuración
docker exec sonarr tar czf /config/backup-$(date +%Y%m%d).tar.gz /config/*.db

# Limpiar logs antiguos
docker exec sonarr find /config/logs -type f -mtime +30 -delete

Orden de Configuración Recomendado

  1. FlareSolverr (si es necesario)
  2. Prowlarr → Añadir indexers
  3. Sonarr/Radarr → Configurar cliente de descargas
  4. Prowlarr → Conectar con Sonarr/Radarr
  5. Jellyfin → Añadir bibliotecas
  6. Jellyseerr → Conectar todo

🤝 Soporte y Contribuciones

Para problemas o sugerencias:

  1. Revisa la sección de Troubleshooting
  2. Consulta la documentación oficial de cada servicio
  3. Verifica los logs del contenedor específico

📄 Licencia

Este stack utiliza software de código abierto. Consulta las licencias individuales de cada proyecto.


Nota: Este stack está diseñado para uso personal. Asegúrate de cumplir con las leyes de copyright de tu región al descargar contenido.