Cómo instalar STACK MEDIA Jellyfin & ARR en Docker. Media Stack - Jellyfin + *ARR Stack en Docker - Servidor media automatizado autohospedado

Media Stack | Jellyfin | *ARR | Docker

Media Stack en Docker: Servidor streaming automatizado con Jellyfin, Sonarr, Radarr, Bazarr, qBittorrent (alternativa Plex, Netflix autohospedado) 🎬🍿

Stack media completo automatizado autohospedado. Jellyfin streaming (películas, series). Sonarr TV auto-download. Radarr movies auto-download. Bazarr subtítulos automáticos. qBittorrent torrents. Caddy HTTPS subpaths. TRaSH Guides folder structure. Hardlinks + atomic moves. Multi-dispositivo. Zero cloud. MIT/GPL open source.

¿Qué es Media Stack?



Media Stack es un stack completo de Docker Compose que automatiza toda la pipeline de servidor media: descarga automática películas/series vía torrents, organización inteligente de archivos, subtítulos automáticos, y streaming vía Jellyfin a múltiples dispositivos, permitiendo reemplazar Plex/Netflix con infraestructura 100% propia y gratuita. Es la solución definitiva para homelabs multimedia.

Propuesta clave: Stack media fully automated. Jellyfin streaming (open source, sin paywalls transcoding). Sonarr auto-download + organiza series TV. Radarr auto-download + organiza películas. Bazarr subtítulos automáticos multi-idioma. qBittorrent client torrents. Integración automática Sonarr/Radarr → qBittorrent. Organización TRaSH Guides (hardlinks + atomic moves, zero storage duplication). Carpeta único source of truth (/data/media). Caddy HTTPS reverse proxy con subpaths. Multi-dispositivo acceso (web, apps Jellyfin móvil/TV). Configuración env vars. Docker Compose nativa. Production-ready.

Características principales: Jellyfin servidor streaming open source (sin lock-in Plex). Sonarr PVR TV (auto-search, auto-download, organización). Radarr Movie Manager (auto-search, auto-download, organización). Bazarr subtítulos auto-download (OpenSubtitles, TVsubtitles, múltiples idiomas). qBittorrent torrent client (fast, web UI, integración *arr). Indexadores (Jackett, Prowlarr). Organización TRaSH Guides (hardlinks, atomic moves, atomic transfers). Single source of truth /data/media. Caddy HTTPS subpaths routing. API keys para integración interna. Health checks. PUID:PGID user control. Fast startup. Documentación completa. GitHub community. MIT/GPL open source.

Para homelabs: Servidor media automatizado. Descarga auto. Streaming multi-dispositivo. Total control. Zero suscripciones.

Características principales

Jellyfin streaming

Media server open source. Sin paywalls. Múltiples dispositivos. Transcode configurables.

Sonarr TV automation

Auto-search, auto-download series. Organización inteligente. Manual override.

Radarr movie automation

Auto-search, auto-download películas. Quality profiles. Organización automática.

Bazarr subtítulos auto

Auto-download sub multi-idioma. OpenSubtitles, TVsubtitles. Por película/serie.

qBittorrent integrated

Torrent client web UI. Sonarr/Radarr send torrents auto. Speed control. Seed policies.

TRaSH Guides structure

Hardlinks + atomic moves. Zero duplication. Optimizado performance. Best practices.

Caddy HTTPS subpaths

HTTPS automático Let's Encrypt. Subpaths /jellyfin, /sonarr, /radarr. Reverse proxy.

Multi-dispositivo streaming

Web browser. Apps iOS/Android. Smart TV (Roku, FireTV, LG). Desktop apps.

Indexadores integrados

Jackett support. Prowlarr (central indexer). Custom trackers. Multi-track.

Configuración .env simple

Variables env para paths, puertos, dominios. One-file config. Reproducible.

Health checks built-in

Monitoring integrado. Auto-restart failed containers. Production-grade reliability.

MIT/GPL open source

Código abierto. Community-driven. Actualizado. Independiente.

Requisitos del sistema

  • Docker & Docker Compose v2+
  • 4 GB - 16 GB RAM mínimo (Jellyfin + *arr services + qBittorrent)
  • 50 GB - 2+ TB espacio disco (según tamaño biblioteca + downloads)
  • Puertos: 6969 (qBit), 7878 (Radarr), 8086 (Bazarr), 8989 (Sonarr), 8096 (Jellyfin) (configurables via reverse proxy)
  • Carpeta /data con permisos 755 (o configurables) (mounted persistent)
  • Dominio + DNS A record (para HTTPS automático via Caddy)
  • Conexión red estable 24/7 (para downloads automáticos)
  • CPU con capacidad transcode (Intel Quick Sync, NVIDIA NVENC recomendado para múltiples streams)
Recomendado: CPU moderno (2+ cores), 8GB+ RAM, SSD mínimo 100GB. Disk para media puede ser HDD.

Instalación con Docker Compose

Opción 1: Git clone + setup simple (recomendado)

git clone https://github.com/Pelado-Nerdworks/media-stack.git cd media-stack # Copiar .env template cp .env.example .env # Editar .env (ver siguiente paso) nano .env # Crear estructura carpetas (si no existen) mkdir -p config data/downloads data/media/{movies,series} data/torrents # Iniciar stack docker compose up -d

Opción 2: Configurar .env (valores críticos)

# Editar estos valores en .env: DOMAIN=media.tudominio.com # Tu dominio (HTTPS automático) TIMEZONE=Europe/Madrid DATA_ROOT=./data # Ruta contenedor para media CONFIG_ROOT=./config # Ruta configs # Permisos (usuario/grupo Docker): PUID=1000 PGID=1000 # Credenciales básicas (cambiar después): QBIT_USER=admin QBIT_PASS=cambiar_despues

Opción 3: Docker Compose manual completo (independiente GitHub)

mkdir -p media-stack && cd media-stack mkdir -p config data/downloads data/media/{movies,series} data/torrents # Crear archivo docker-compose.yml (ver código completo abajo) cat > docker-compose.yml << 'EOF' version: '3.8' services: jellyfin: image: jellyfin/jellyfin:latest container_name: jellyfin restart: unless-stopped ports: - "8096:8096" environment: - JELLYFIN_PublishedServerUrl=https://${DOMAIN} - TZ=${TIMEZONE} volumes: - ${CONFIG_ROOT}/jellyfin:/config - ${CONFIG_ROOT}/jellyfin/cache:/cache - ${DATA_ROOT}/media:/media user: ${PUID}:${PGID} sonarr: image: lscr.io/linuxserver/sonarr:latest container_name: sonarr restart: unless-stopped ports: - "8989:8989" environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} volumes: - ${CONFIG_ROOT}/sonarr:/config - ${DATA_ROOT}:/data depends_on: - qbittorrent radarr: image: lscr.io/linuxserver/radarr:latest container_name: radarr restart: unless-stopped ports: - "7878:7878" environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} volumes: - ${CONFIG_ROOT}/radarr:/config - ${DATA_ROOT}:/data depends_on: - qbittorrent bazarr: image: lscr.io/linuxserver/bazarr:latest container_name: bazarr restart: unless-stopped ports: - "6767:6767" environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} volumes: - ${CONFIG_ROOT}/bazarr:/config - ${DATA_ROOT}/media:/media depends_on: - sonarr - radarr qbittorrent: image: lscr.io/linuxserver/qbittorrent:latest container_name: qbittorrent restart: unless-stopped ports: - "6969:6969" - "6969:6969/udp" environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} - WEBUI_PORT=6969 volumes: - ${CONFIG_ROOT}/qbittorrent:/config - ${DATA_ROOT}/downloads:/data/downloads - ${DATA_ROOT}/torrents:/data/torrents caddy: image: caddy:latest container_name: caddy restart: unless-stopped ports: - "80:80" - "443:443" environment: - DOMAIN=${DOMAIN} volumes: - ${CONFIG_ROOT}/caddy/Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config depends_on: - jellyfin - sonarr - radarr - bazarr - qbittorrent volumes: caddy_data: caddy_config: EOF

Crear .env file (variables configuración)

cat > .env << 'EOF' # Configuración básica Media Stack DOMAIN=media.tudominio.com TIMEZONE=Europe/Madrid # Rutas (relativas a directorio docker-compose.yml) DATA_ROOT=./data CONFIG_ROOT=./config # Permisos Docker (user:group) PUID=1000 PGID=1000 EOF

Crear Caddyfile (reverse proxy HTTPS)

mkdir -p config/caddy cat > config/caddy/Caddyfile << 'EOF' { email admin@{$DOMAIN} } {$DOMAIN} { redir / /jellyfin handle /jellyfin* { reverse_proxy jellyfin:8096 } handle /sonarr* { reverse_proxy sonarr:8989 } handle /radarr* { reverse_proxy radarr:7878 } handle /bazarr* { reverse_proxy bazarr:6767 } handle /qbittorrent* { reverse_proxy qbittorrent:6969 } } EOF

Validar y ejecutar

docker compose config # Valida syntax docker compose up -d # Espera ~30 segundos para que Caddy obtenta certificado HTTPS

Primera ejecución - Verificar servicios

docker compose ps # Debería mostrar: jellyfin, sonarr, radarr, bazarr, qbittorrent, caddy (en estado running)

Acceder (primera vez)

https://media.tudominio.com - Caddy redirige a Jellyfin (setup wizard)
https://media.tudominio.com/sonarr - Sonarr
https://media.tudominio.com/radarr - Radarr
https://media.tudominio.com/bazarr - Bazarr
https://media.tudominio.com/qbittorrent - qBittorrent

Primeros pasos

1. Setup Jellyfin (first run wizard)

  1. Abre https://media.tudominio.com
  2. Setup wizard: lenguaje, usuario admin, contraseña
  3. Agrega librerías: path /data/media/movies y /data/media/series
  4. Scan libraries (detecta contenido automático)
  5. Configura transcoding (Intel Quick Sync, NVIDIA NVENC si disponible)

2. Setup Sonarr (TV automation)

  1. Abre https://media.tudominio.com/sonarr
  2. Settings → Media Management: Add Root Folder → /data/media/series
  3. Settings → Download Clients: qBittorrent (http://qbittorrent:6969, user/pass)
  4. Settings → Indexers: Agregar trackers (o Jackett/Prowlarr)
  5. Settings → Connect: notificaciones (Telegram, Discord, etc)

3. Setup Radarr (Movie automation)

  1. Abre https://media.tudominio.com/radarr
  2. Settings → Media Management: Add Root Folder → /data/media/movies
  3. Settings → Download Clients: qBittorrent (http://qbittorrent:6969, user/pass)
  4. Settings → Indexers: Agregar trackers (o Jackett/Prowlarr)
  5. Settings → Quality: definir perfiles (1080p, 2K, 4K según preferencia)

4. Setup Bazarr (subtítulos automáticos)

  1. Abre https://media.tudominio.com/bazarr
  2. Settings → Languages: Selecciona idiomas deseados (ej: Spanish, English)
  3. Settings → Providers: OpenSubtitles, TVsubtitles (agregar API keys si necesario)
  4. Settings → Sonarr/Radarr: conecta APIs (para sync automático)
  5. Bazarr ahora baja subs automático para nuevas series/películas

5. Buscar + agregar serie (Sonarr)

  1. Sonarr → Series → Search (ej: "Breaking Bad")
  2. Selecciona resultado
  3. Profile (calidad), Folder (/data/media/series)
  4. Add Series → Sonarr auto-busca + descarga
  5. Jellyfin detecta automático después descarga

6. Buscar + agregar película (Radarr)

  1. Radarr → Movies → Search (ej: "Inception")
  2. Selecciona resultado
  3. Profile (calidad), Folder (/data/media/movies)
  4. Add Movie → Radarr auto-busca + descarga
  5. Jellyfin detecta automático después descarga

7. Ver contenido en Jellyfin (streaming)

  1. Jellyfin web: Home → Movies/Series
  2. Click película/serie → reproductor web integrado
  3. Descarga app mobile (iOS/Android) para streaming remoto
  4. Progreso sincroniza automático entre dispositivos

8. Monitorear descargas (qBittorrent)

  1. Abre https://media.tudominio.com/qbittorrent
  2. Ve torrents activos + velocidad + ratio
  3. Settings: throttle (límite de velocidad), seed policy

9. Cambiar contraseñas (IMPORTANTE - seguridad)

# Editar .env después inicio: QBIT_USER=usuario_nuevo QBIT_PASS=contraseña_fuerte # Cambiar también en Jellyfin, Sonarr, Radarr via web UI Settings

10. Backups de configuración

docker cp sonarr:/config ./backups/sonarr-config-$(date +%Y%m%d) docker cp radarr:/config ./backups/radarr-config-$(date +%Y%m%d) docker cp jellyfin:/config ./backups/jellyfin-config-$(date +%Y%m%d)

Casos de uso

  • Reemplazo Netflix/Plex: Streaming propio. Sin suscripciones. Control total. Privacidad.
  • Colecciones personales: Películas favoritas. Series completadas. Documentales. Organización perfecta.
  • Familia multi-dispositivo: Múltiples usuarios. Streaming simultáneo. Progresos sincronizados.
  • Home theater: Servidor media + Smart TV + soundbar. Experiencia cinema casa.
  • Homelabs educativos: Learn Docker, automation, networking montando stack completo.

HTTPS con Caddy (incluido en stack)

Configuración automática incluida

Media Stack ya incluye Caddy pre-configurado en docker-compose.yml. HTTPS automático se obtiene via:

  1. Apuntar dominio A record a tu servidor IP
  2. Caddy obtiene certificado Let's Encrypt automático (primer boot ~30 seg)
  3. Todos los subpaths (/sonarr, /radarr, /bazarr, /qbittorrent) funcionan vía HTTPS

Si dominio diferente o custom config

nano config/Caddyfile # Editá .env DOMAIN si necesita cambiar DOMAIN=media.tudominio.com

Gestión y mantenimiento

Ver logs de servicios

docker compose logs -f jellyfin docker compose logs -f sonarr docker compose logs -f radarr docker compose logs -f qbittorrent

Restart todos los servicios

docker compose restart

Actualizar a versión más reciente

cd media-stack && git pull docker compose pull docker compose up -d

Monitorear consumo (CPU, RAM, disco)

docker stats # Jellyfin: 300-800MB RAM (depende transcode) # Sonarr/Radarr: 100-300MB cada uno # qBittorrent: 100-500MB (depende torrents)

Limpiar descargas completadas (qBit)

docker exec qbittorrent /bin/bash -c 'rm -rf /data/downloads/completed/*'

Rescan Jellyfin biblioteca (fuerza reindex)

docker exec jellyfin jellyfish-rescan # O via web UI: Settings → Admin → Library → Scan All Libraries

Rebuild indices Sonarr (si glitches)

docker exec sonarr /bin/bash -c 'rm -rf /config/Logs/System/*' docker compose restart sonarr

Comparativa con alternativas

vs Plex

Media Stack gana: Open source, ningún paywall, transcode sin límites, privacidad. Plex gana: Interfaz pulida, apps nativas, Plex Pass features.

vs Emby

Media Stack gana: Gratuito, open source, comunidad. Emby gana: Más features, transcoding GPU integrado, sync móvil premium.

vs Kaleidescape (premium)

Kaleidescape gana: Legality, metadata curado, UI premium. Media Stack gana: Precio (gratis), control absoluto, DIY automation.

Mejor para: Homelabs. Usuarios técnicos. Total control. Privacidad. Automatización completa. Zero subscriptions.

Comentarios

Entradas populares de este blog

Cómo Instalar y configurar SERVIDOR VPN WIREGUARD en MIKROTIK 🔐 #VPN #Wireguard #Mikrotik #RouterOS

Cómo instalar y configurar DSM SYNOLOGY 7.2.2 en PC | Guía completa, instalación, RAID 1, SMB

Cómo INSTALAR y CONFIGURAR OpenVPN en MIKROTIK. Guía completa paso a paso.