README - EasyPanel / Git repo setup Este archivo describe cómo usar `docker-compose.easypanel.yml` desde EasyPanel. Principio: No almacenar secretos en el repositorio. EasyPanel debe inyectar los valores mediante variables de entorno o secrets en el formulario del panel. Variables (mínimas recomendadas) - POSTGRES_HOST (por defecto: postgres) - POSTGRES_PORT (por defecto: 5432) - POSTGRES_DB (por defecto: libretime) - POSTGRES_USER (por defecto: libretime) - POSTGRES_PASSWORD (REQUIRED) - RABBITMQ_HOST (por defecto: rabbitmq) - RABBITMQ_PORT (por defecto: 5672) - RABBITMQ_DEFAULT_VHOST (por defecto: /libretime) - RABBITMQ_DEFAULT_USER (por defecto: libretime) - RABBITMQ_DEFAULT_PASS (REQUIRED) - ICECAST_SOURCE_PASSWORD (opcional) - ICECAST_ADMIN_PASSWORD (opcional) - LIBRETIME_GENERAL_PUBLIC_URL (opcional) - LIBRETIME_API_KEY (opcional) Cómo funciona - Al crear la aplicación en EasyPanel, configure estas variables como "Environment Variables" o "Secrets". - El servicio `config-generator` ejecuta `tools/easypanel-config-generator.sh` y escribe la configuración final en el volumen `libretime_config` en `/config/config.yml`. - Los contenedores `api`, `legacy`, `playout`, `worker` y `analyzer` montan ese volumen en `/etc/libretime` y leen la configuración desde `/etc/libretime/config.yml`. Notas - Asegúrese de que las variables sensibles (POSTGRES_PASSWORD, RABBITMQ_DEFAULT_PASS) se guarden como secretos en EasyPanel y no como variables visibles en el repo. - Si desea personalizar más opciones, modifique `tools/easypanel-config-generator.sh`. # LibreTime para EasyPanel Esta guía te ayudará a desplegar LibreTime en EasyPanel usando Docker Compose. ## 🚀 Instalación Rápida ### 1. Preparar archivos 1. Copia `docker-compose.easypanel.yml` a tu proyecto en EasyPanel 2. Copia `.env.easypanel.example` como `.env` y configura las variables 3. Copia `config.local.easypanel.yml` como `config.local.yml` y ajusta la configuración ### 2. Configurar variables de entorno Edita el archivo `.env` con tus valores: ```bash # URL pública (REQUERIDO) LIBRETIME_GENERAL_PUBLIC_URL=https://tu-dominio.com # Contraseñas (CAMBIA ESTOS VALORES) POSTGRES_PASSWORD=tu_password_muy_seguro RABBITMQ_DEFAULT_PASS=otra_password_segura ICECAST_SOURCE_PASSWORD=password_para_fuentes ICECAST_ADMIN_PASSWORD=password_admin_icecast # Configuración de dominio ICECAST_HOSTNAME=tu-dominio.com ``` ### 3. Configurar LibreTime Edita `config.local.yml`: ```yaml general: public_url: https://tu-dominio.com api_key: "genera-una-clave-api-segura-de-al-menos-64-caracteres" secret_key: "genera-una-clave-secreta-django-de-al-menos-50-caracteres" database: password: tu_password_muy_seguro # Debe coincidir con .env rabbitmq: password: otra_password_segura # Debe coincidir con .env ``` ### 4. Generar claves seguras Puedes generar claves seguras usando: ```bash # Para API key (64 caracteres) openssl rand -hex 32 # Para Django secret key (50 caracteres) openssl rand -base64 50 ``` ## 📋 Configuración en EasyPanel ### Servicios y Puertos | Servicio | Puerto | Descripción | |----------|--------|-------------| | nginx | 8080 | Interfaz web principal | | icecast | 8000 | Servidor de streaming | | liquidsoap | 8001 | Input de audio (Harbor) | | liquidsoap | 8002 | Control Telnet | ### Volúmenes Persistentes Los siguientes volúmenes necesitan ser persistentes: - `postgres_data`: Datos de la base de datos PostgreSQL - `libretime_storage`: Archivos de audio y configuración - `libretime_playout`: Cache y archivos temporales de playout ### Configuración de Red En EasyPanel, asegúrate de: 1. **Exponer puertos**: 8080 (web) y 8000 (streaming) 2. **Configurar dominio**: Apuntar tu dominio al puerto 8080 3. **SSL/TLS**: Activar HTTPS en EasyPanel para el puerto 8080 ## 🔧 Configuración Avanzada ### Variables de Entorno Opcionales ```bash # Versión específica de LibreTime LIBRETIME_VERSION=3.0.2 # Configuración de Nginx NGINX_WORKER_PROCESSES=2 # Modo debug (solo para desarrollo) LIBRETIME_DEBUG=true ``` ### Healthchecks El docker-compose incluye healthchecks para: - PostgreSQL: Verifica conexión a la base de datos - RabbitMQ: Verifica conectividad del puerto - Dependencias: Los servicios esperan a que las dependencias estén saludables ### Configuración de Streaming Para configurar streams adicionales, edita `config.local.yml`: ```yaml stream: outputs: icecast: - enabled: true host: icecast port: 8000 mount: main source_password: tu_source_password_aqui audio: format: mp3 bitrate: 128 - enabled: true host: icecast port: 8000 mount: hq source_password: tu_source_password_aqui audio: format: mp3 bitrate: 320 ``` ## 🔐 Seguridad ### Contraseñas Seguras - Usa contraseñas únicas de al menos 16 caracteres - Combina letras, números y símbolos - Nunca uses las contraseñas por defecto en producción ### Firewall - Solo expón los puertos necesarios (8080, 8000) - Considera usar un firewall adicional - Configura rate limiting si es posible ### Actualizaciones - Mantén LibreTime actualizado: `LIBRETIME_VERSION=latest` - Revisa regularmente las actualizaciones de seguridad - Haz backups regulares de los volúmenes ## 🐛 Troubleshooting ### Servicios no inician 1. Verifica las variables de entorno en `.env` 2. Comprueba los logs: `docker-compose logs [servicio]` 3. Verifica que los volúmenes tengan permisos correctos ### No se puede acceder a la interfaz web 1. Verifica que el puerto 8080 esté expuesto 2. Comprueba la configuración de dominio en EasyPanel 3. Verifica `LIBRETIME_GENERAL_PUBLIC_URL` en `.env` ### Problemas de streaming 1. Verifica las contraseñas de Icecast 2. Comprueba que el puerto 8000 esté accesible 3. Verifica la configuración de `stream.outputs` en `config.local.yml` ### Base de datos no conecta 1. Verifica `POSTGRES_PASSWORD` en `.env` 2. Comprueba que coincida con `database.password` en `config.local.yml` 3. Verifica que el volumen `postgres_data` tenga permisos correctos ## 📚 Enlaces Útiles - [Documentación oficial de LibreTime](https://libretime.org/docs/) - [Configuración avanzada](https://libretime.org/docs/admin-manual/setup/configuration/) - [GitHub de LibreTime](https://github.com/libretime/libretime) - [Documentación de EasyPanel](https://easypanel.io/docs) ## 🔄 Comandos Útiles ```bash # Ver logs de todos los servicios docker-compose -f docker-compose.easypanel.yml logs # Ver logs de un servicio específico docker-compose -f docker-compose.easypanel.yml logs nginx # Reiniciar un servicio docker-compose -f docker-compose.easypanel.yml restart api # Actualizar servicios docker-compose -f docker-compose.easypanel.yml pull docker-compose -f docker-compose.easypanel.yml up -d # Backup de la base de datos docker-compose -f docker-compose.easypanel.yml exec postgres pg_dump -U libretime libretime > backup.sql ```