media-server

This commit is contained in:
Eduardo David Paredes Vara
2025-12-06 01:54:13 +00:00
parent a97c88454f
commit becce96ede
3 changed files with 856 additions and 0 deletions

593
media-server/README.md Normal file
View File

@@ -0,0 +1,593 @@
# 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 **Stacks****Add 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`:
```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=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:
```bash
# 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 **Settings****Indexers****Add Indexer**
4. Añade tus trackers preferidos (públicos o privados)
5. Si algún tracker requiere FlareSolverr para Cloudflare:
- Ve a **Settings****Indexers****FlareSolverr**
- URL: `http://flaresolverr:8191`
### 3. Conectar Sonarr y Radarr con Prowlarr
En **Prowlarr**, añade las aplicaciones:
1. Ve a **Settings****Apps****Add 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 **Settings****Download Clients****Add**
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 **Settings****Profiles**
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 `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:
```env
# 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:
```env
PROWLARR_PORT=9696
JACKETT_PORT=9117
SONARR_PORT=8989
RADARR_PORT=7878
JELLYSEERR_PORT=5055
JELLYFIN_PORT=8096
```
### Personalizar Nombres de Contenedores
```env
PROWLARR_CONTAINER_NAME=prowlarr-prod
SONARR_CONTAINER_NAME=sonarr-prod
# etc...
```
### Usar Imágenes Específicas
```env
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:
```env
# 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:
```bash
id $USER
# uid=1000(usuario) gid=1000(usuario)
```
```env
PUID=1000
PGID=1000
```
### Notificaciones Personalizadas
Configura notificaciones en cada aplicación:
**Sonarr/Radarr**:
- Ve a **Settings****Connect****Add Notification**
- Opciones: Discord, Telegram, Email, Slack, etc.
**Jellyseerr**:
- Ve a **Settings****Notifications**
- 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:
```bash
docker logs sonarr
docker logs radarr
```
### FlareSolverr no resuelve captchas
1. Verifica los logs:
```bash
docker logs flaresolverr
```
2. Aumenta la memoria compartida si es necesario:
```env
FLARESOLVERR_SHM_SIZE=2gb
```
3. Prueba la conectividad:
```bash
docker exec prowlarr curl http://flaresolverr:8191/health
```
### Error de permisos en directorios de medios
Si usas SELinux, los volúmenes ya tienen `:Z`:
```bash
# 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:
```bash
# 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:
```bash
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:
```bash
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:
```bash
docker inspect prowlarr | grep traefik
```
3. Verifica los certificados SSL:
```bash
docker logs traefik | grep letsencrypt
```
4. Comprueba los registros DNS:
```bash
nslookup prowlarr.tudominio.com
```
## 📚 Recursos Adicionales
- [Documentación oficial de Jellyfin](https://jellyfin.org/docs/)
- [Wiki de Sonarr](https://wiki.servarr.com/sonarr)
- [Wiki de Radarr](https://wiki.servarr.com/radarr)
- [Documentación de Prowlarr](https://wiki.servarr.com/prowlarr)
- [Documentación de Jellyseerr](https://docs.jellyseerr.dev/)
- [FlareSolverr GitHub](https://github.com/FlareSolverr/FlareSolverr)
## 🔒 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
```bash
# 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:
```bash
# 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
```bash
# 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`:
```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:
```bash
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
```bash
# 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:
```bash
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
```bash
# 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.

View File

@@ -0,0 +1,167 @@
networks:
proxy:
external: true
name: ${TRAEFIK_DOCKER_NETWORK:-proxy}
media:
driver: bridge
name: ${MEDIA_NETWORK_NAME:-media}
services:
flaresolverr:
image: ${FLARESOLVERR_IMAGE:-ghcr.io/flaresolverr/flaresolverr:latest}
container_name: ${FLARESOLVERR_CONTAINER_NAME:-flaresolverr}
environment:
- LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_HTML=${LOG_HTML:-false}
- CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
- TZ=${TZ:-Europe/Madrid}
restart: unless-stopped
networks:
- media
shm_size: ${FLARESOLVERR_SHM_SIZE:-1gb}
prowlarr:
image: ${PROWLARR_IMAGE:-lscr.io/linuxserver/prowlarr:latest}
container_name: ${PROWLARR_CONTAINER_NAME:-prowlarr}
environment:
- PUID=${PUID:-0}
- PGID=${PGID:-0}
- TZ=${TZ:-Europe/Madrid}
volumes:
- ${COMMON_PATH}/configs/prowlarr:/config:Z
restart: unless-stopped
networks:
- media
- proxy
labels:
- traefik.enable=${TRAEFIK_ENABLE:-true}
- traefik.docker.network=${TRAEFIK_DOCKER_NETWORK:-proxy}
- traefik.http.routers.prowlarr.rule=Host(`${PROWLARR_HOST}`)
- traefik.http.routers.prowlarr.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}
- traefik.http.routers.prowlarr.tls=${TRAEFIK_TLS:-true}
- traefik.http.routers.prowlarr.tls.certresolver=${TRAEFIK_CERTRESOLVER:-letsencrypt}
- traefik.http.routers.prowlarr.middlewares=${AUTH_MIDDLEWARE:-authentik@docker}
- traefik.http.services.prowlarr.loadbalancer.server.port=${PROWLARR_PORT:-9696}
jackett:
image: ${JACKETT_IMAGE:-lscr.io/linuxserver/jackett:latest}
container_name: ${JACKETT_CONTAINER_NAME:-jackett}
environment:
- PUID=${PUID:-0}
- PGID=${PGID:-0}
- TZ=${TZ:-Europe/Madrid}
volumes:
- ${COMMON_PATH}/configs/jackett:/config:Z
restart: unless-stopped
networks:
- media
- proxy
labels:
- traefik.enable=${TRAEFIK_ENABLE:-true}
- traefik.docker.network=${TRAEFIK_DOCKER_NETWORK:-proxy}
- traefik.http.routers.jackett.rule=Host(`${JACKETT_HOST}`)
- traefik.http.routers.jackett.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}
- traefik.http.routers.jackett.tls=${TRAEFIK_TLS:-true}
- traefik.http.routers.jackett.tls.certresolver=${TRAEFIK_CERTRESOLVER:-letsencrypt}
- traefik.http.routers.jackett.middlewares=${AUTH_MIDDLEWARE:-authentik@docker}
- traefik.http.services.jackett.loadbalancer.server.port=${JACKETT_PORT:-9117}
sonarr:
image: ${SONARR_IMAGE:-lscr.io/linuxserver/sonarr:latest}
container_name: ${SONARR_CONTAINER_NAME:-sonarr}
environment:
- PUID=${PUID:-0}
- PGID=${PGID:-0}
- TZ=${TZ:-Europe/Madrid}
volumes:
- ${COMMON_PATH}/configs/sonarr:/config:Z
- ${MEDIA_TV:-/mnt/media/tv}:/tv
- ${MEDIA_DOWNLOADS:-/mnt/media/downloads}:/downloads
restart: unless-stopped
networks:
- media
- proxy
labels:
- traefik.enable=${TRAEFIK_ENABLE:-true}
- traefik.docker.network=${TRAEFIK_DOCKER_NETWORK:-proxy}
- traefik.http.routers.sonarr.rule=Host(`${SONARR_HOST}`)
- traefik.http.routers.sonarr.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}
- traefik.http.routers.sonarr.tls=${TRAEFIK_TLS:-true}
- traefik.http.routers.sonarr.tls.certresolver=${TRAEFIK_CERTRESOLVER:-letsencrypt}
- traefik.http.routers.sonarr.middlewares=${AUTH_MIDDLEWARE:-authentik@docker}
- traefik.http.services.sonarr.loadbalancer.server.port=${SONARR_PORT:-8989}
radarr:
image: ${RADARR_IMAGE:-lscr.io/linuxserver/radarr:latest}
container_name: ${RADARR_CONTAINER_NAME:-radarr}
environment:
- PUID=${PUID:-0}
- PGID=${PGID:-0}
- TZ=${TZ:-Europe/Madrid}
volumes:
- ${COMMON_PATH}/configs/radarr:/config:Z
- ${MEDIA_MOVIES:-/mnt/media/movies}:/movies
- ${MEDIA_DOWNLOADS:-/mnt/media/downloads}:/downloads
restart: unless-stopped
networks:
- media
- proxy
labels:
- traefik.enable=${TRAEFIK_ENABLE:-true}
- traefik.docker.network=${TRAEFIK_DOCKER_NETWORK:-proxy}
- traefik.http.routers.radarr.rule=Host(`${RADARR_HOST}`)
- traefik.http.routers.radarr.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}
- traefik.http.routers.radarr.tls=${TRAEFIK_TLS:-true}
- traefik.http.routers.radarr.tls.certresolver=${TRAEFIK_CERTRESOLVER:-letsencrypt}
- traefik.http.routers.radarr.middlewares=${AUTH_MIDDLEWARE:-authentik@docker}
- traefik.http.services.radarr.loadbalancer.server.port=${RADARR_PORT:-7878}
jellyseerr:
image: ${JELLYSEERR_IMAGE:-fallenbagel/jellyseerr:latest}
container_name: ${JELLYSEERR_CONTAINER_NAME:-jellyseerr}
environment:
- LOG_LEVEL=${JELLYSEERR_LOG_LEVEL:-debug}
- TZ=${TZ:-Europe/Madrid}
volumes:
- ${COMMON_PATH}/configs/jellyseerr:/app/config:Z
restart: unless-stopped
networks:
- media
- proxy
labels:
- traefik.enable=${TRAEFIK_ENABLE:-true}
- traefik.docker.network=${TRAEFIK_DOCKER_NETWORK:-proxy}
- traefik.http.routers.jellyseerr.rule=Host(`${JELLYSEERR_HOST}`)
- traefik.http.routers.jellyseerr.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}
- traefik.http.routers.jellyseerr.tls=${TRAEFIK_TLS:-true}
- traefik.http.routers.jellyseerr.tls.certresolver=${TRAEFIK_CERTRESOLVER:-letsencrypt}
- traefik.http.routers.jellyseerr.middlewares=${AUTH_MIDDLEWARE:-authentik@docker}
- traefik.http.services.jellyseerr.loadbalancer.server.port=${JELLYSEERR_PORT:-5055}
jellyfin:
image: ${JELLYFIN_IMAGE:-lscr.io/linuxserver/jellyfin:latest}
container_name: ${JELLYFIN_CONTAINER_NAME:-jellyfin-vps}
environment:
- PUID=${PUID:-0}
- PGID=${PGID:-0}
- TZ=${TZ:-Europe/Madrid}
volumes:
- ${COMMON_PATH}/configs/jellyfin-vps:/config:Z
- ${COMMON_PATH}/jellyfin/cache-vps:/cache:Z
- ${MEDIA_TV:-/mnt/media/tv}:/data/tvshows
- ${MEDIA_MOVIES:-/mnt/media/movies}:/data/movies
- ${MEDIA_DOWNLOADS:-/mnt/media/downloads}:/data/media_downloads
restart: unless-stopped
networks:
- media
- proxy
labels:
- traefik.enable=${TRAEFIK_ENABLE:-true}
- traefik.docker.network=${TRAEFIK_DOCKER_NETWORK:-proxy}
- traefik.http.routers.jellyfin.rule=Host(`${JELLYFIN_HOST}`)
- traefik.http.routers.jellyfin.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}
- traefik.http.routers.jellyfin.tls=${TRAEFIK_TLS:-true}
- traefik.http.routers.jellyfin.tls.certresolver=${TRAEFIK_CERTRESOLVER:-letsencrypt}
- traefik.http.routers.jellyfin.middlewares=${AUTH_MIDDLEWARE:-authentik@docker}
- traefik.http.services.jellyfin.loadbalancer.server.port=${JELLYFIN_PORT:-8096}

96
media-server/stack.env Normal file
View File

@@ -0,0 +1,96 @@
# =========================
# Global
# =========================
TZ=
LOG_LEVEL=
LOG_HTML=
CAPTCHA_SOLVER=
# =========================
# Paths (VPS)
# =========================
COMMON_PATH=
# =========================
# Media mounts (HOST VPS)
# =========================
MEDIA_MOUNT_BASE=
MEDIA_TV=
MEDIA_MOVIES=
MEDIA_DOWNLOADS=
# =========================
# PUID/PGID
# =========================
PUID=
PGID=
# =========================
# Networks
# =========================
TRAEFIK_DOCKER_NETWORK=
MEDIA_NETWORK_NAME=
# =========================
# Traefik common
# =========================
TRAEFIK_ENABLE=
TRAEFIK_ENTRYPOINTS=
TRAEFIK_TLS=
TRAEFIK_CERTRESOLVER=
AUTH_MIDDLEWARE=
# =========================
# Images (optional override)
# =========================
FLARESOLVERR_IMAGE=
PROWLARR_IMAGE=
JACKETT_IMAGE=
SONARR_IMAGE=
RADARR_IMAGE=
JELLYSEERR_IMAGE=
JELLYFIN_IMAGE=
# =========================
# Container names (optional override)
# =========================
FLARESOLVERR_CONTAINER_NAME=
PROWLARR_CONTAINER_NAME=
JACKETT_CONTAINER_NAME=
SONARR_CONTAINER_NAME=
RADARR_CONTAINER_NAME=
JELLYSEERR_CONTAINER_NAME=
JELLYFIN_CONTAINER_NAME=
# =========================
# Service ports (optional override)
# =========================
PROWLARR_PORT=
JACKETT_PORT=
SONARR_PORT=
RADARR_PORT=
JELLYSEERR_PORT=
JELLYFIN_PORT=
# =========================
# Jellyseerr extra
# =========================
JELLYSEERR_LOG_LEVEL=
# =========================
# FlareSolverr resources
# =========================
FLARESOLVERR_SHM_SIZE=
# =========================
# Domains
# =========================
DOMAIN=
PROWLARR_HOST=
JACKETT_HOST=
SONARR_HOST=
RADARR_HOST=
JELLYSEERR_HOST=
JELLYFIN_HOST=