501 lines
9.8 KiB
Markdown
501 lines
9.8 KiB
Markdown
# Nota: Streamlit eliminado
|
|
|
|
> El panel Streamlit fue eliminado en esta rama; las instrucciones que mencionan Streamlit se mantienen solo como referencia histórica. Usa la API (main.py) para operaciones actuales.
|
|
|
|
# 🐳 Guía de Uso con Docker - TubeScript-API
|
|
|
|
## 🎯 Descripción
|
|
|
|
Esta guía te ayudará a ejecutar TubeScript-API con Docker, incluyendo tanto la API FastAPI como el panel web Streamlit.
|
|
|
|
---
|
|
|
|
## 📋 Prerequisitos
|
|
|
|
### 1. Instalar Docker
|
|
|
|
**macOS:**
|
|
```bash
|
|
brew install --cask docker
|
|
```
|
|
|
|
O descarga desde: https://www.docker.com/products/docker-desktop
|
|
|
|
**Linux:**
|
|
```bash
|
|
# Ubuntu/Debian
|
|
sudo apt-get update
|
|
sudo apt-get install docker.io docker-compose
|
|
|
|
# Fedora
|
|
sudo dnf install docker docker-compose
|
|
```
|
|
|
|
**Windows:**
|
|
Descarga Docker Desktop desde: https://www.docker.com/products/docker-desktop
|
|
|
|
### 2. Verificar Instalación
|
|
|
|
```bash
|
|
docker --version
|
|
docker-compose --version
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Inicio Rápido
|
|
|
|
### Opción 1: Script Automático (Recomendado)
|
|
|
|
```bash
|
|
# Dar permisos de ejecución
|
|
chmod +x docker-start.sh
|
|
|
|
# Iniciar todo
|
|
./docker-start.sh
|
|
```
|
|
|
|
Este script:
|
|
- ✅ Verifica que Docker esté instalado
|
|
- ✅ Crea archivos de configuración si no existen
|
|
- ✅ Construye las imágenes Docker
|
|
- ✅ Inicia los servicios
|
|
- ✅ Muestra los logs iniciales
|
|
|
|
### Opción 2: Manual
|
|
|
|
```bash
|
|
# 1. Construir las imágenes
|
|
docker-compose build
|
|
|
|
# 2. Iniciar los servicios
|
|
docker-compose up -d
|
|
|
|
# 3. Ver los logs
|
|
docker-compose logs -f
|
|
```
|
|
|
|
---
|
|
|
|
## 🌐 Acceder a los Servicios
|
|
|
|
Una vez iniciados los contenedores:
|
|
|
|
### API FastAPI (Backend)
|
|
```
|
|
http://localhost:8080
|
|
```
|
|
|
|
### Documentación API (Swagger)
|
|
```
|
|
http://localhost:8080/docs
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Arquitectura Docker
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ Docker Network: tubescript-network │
|
|
├─────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ┌──────────────────┐ ┌──────────────────┐ │
|
|
│ │ FastAPI Backend │ ◄──│ Streamlit Panel │ │
|
|
│ │ (Puerto 8000) │ │ (Puerto 8501) │ │
|
|
│ │ tubescript_api │ │ streamlit_panel │ │
|
|
│ └──────────────────┘ └──────────────────┘ │
|
|
│ │ │ │
|
|
│ └─────────┬───────────────┘ │
|
|
│ │ │
|
|
│ ┌──────▼──────┐ │
|
|
│ │ Volúmenes │ │
|
|
│ │ Compartidos│ │
|
|
│ └─────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────┘
|
|
│ │
|
|
Puerto 8501 Puerto 8080
|
|
│ │
|
|
┌────▼────────────────────▼────┐
|
|
│ Tu Navegador │
|
|
└───────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 📂 Volúmenes Compartidos
|
|
|
|
Los siguientes archivos/directorios se comparten entre el host y los contenedores:
|
|
|
|
| Archivo/Directorio | Descripción | Modo |
|
|
|-------------------|-------------|------|
|
|
| `cookies.txt` | Cookies de YouTube | Solo lectura |
|
|
| `stream_config.json` | Configuración RTMP | Lectura/Escritura |
|
|
| `streams_state.json` | Estado de transmisiones | Lectura/Escritura |
|
|
| `data/` | Datos persistentes | Lectura/Escritura |
|
|
|
|
---
|
|
|
|
## 🛠️ Comandos Útiles
|
|
|
|
### Ver Estado de Servicios
|
|
|
|
```bash
|
|
docker-compose ps
|
|
```
|
|
|
|
### Ver Logs en Tiempo Real
|
|
|
|
```bash
|
|
# Todos los servicios
|
|
docker-compose logs -f
|
|
|
|
# O usar el script
|
|
./docker-logs.sh
|
|
|
|
# Solo la API
|
|
docker-compose logs -f tubescript-api
|
|
```
|
|
|
|
### Detener Servicios
|
|
|
|
```bash
|
|
docker-compose down
|
|
|
|
# O usar el script
|
|
./docker-stop.sh
|
|
```
|
|
|
|
### Reiniciar Servicios
|
|
|
|
```bash
|
|
# Reiniciar todos
|
|
docker-compose restart
|
|
|
|
# Reiniciar uno específico
|
|
docker-compose restart tubescript-api
|
|
```
|
|
|
|
### Reconstruir Imágenes
|
|
|
|
Si cambias código o dependencias:
|
|
|
|
```bash
|
|
# Reconstruir sin caché
|
|
docker-compose build --no-cache
|
|
|
|
# Reiniciar con nueva imagen
|
|
docker-compose up -d --build
|
|
```
|
|
|
|
### Acceder al Contenedor
|
|
|
|
```bash
|
|
# Acceder al shell del contenedor
|
|
docker exec -it tubescript_api bash
|
|
|
|
# Ejecutar comando en el contenedor
|
|
docker exec tubescript_api ls -la
|
|
```
|
|
|
|
### Limpiar Todo
|
|
|
|
```bash
|
|
# Detener y eliminar contenedores, redes
|
|
docker-compose down
|
|
|
|
# Detener, eliminar contenedores, redes y volúmenes
|
|
docker-compose down -v
|
|
|
|
# Eliminar imágenes también
|
|
docker-compose down --rmi all
|
|
```
|
|
|
|
---
|
|
|
|
## ⚙️ Configuración
|
|
|
|
### Variables de Entorno
|
|
|
|
Puedes configurar variables de entorno en `docker-compose.yml`:
|
|
|
|
```yaml
|
|
environment:
|
|
- PYTHONUNBUFFERED=1
|
|
- API_URL=http://tubescript-api:8000
|
|
- MAX_UPLOAD_SIZE=100
|
|
```
|
|
|
|
### Cambiar Puertos
|
|
|
|
Edita `docker-compose.yml`:
|
|
|
|
```yaml
|
|
services:
|
|
tubescript-api:
|
|
ports:
|
|
- "9091:8000" # Cambiar puerto del host a 9091
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 Health Checks
|
|
|
|
Los servicios tienen health checks configurados:
|
|
|
|
- **FastAPI**: Verifica `/docs` cada 30 segundos
|
|
|
|
Ver estado de salud:
|
|
|
|
```bash
|
|
docker-compose ps
|
|
# ESTADO: healthy (verde) = funcionando correctamente
|
|
```
|
|
|
|
---
|
|
|
|
## 🐛 Solución de Problemas
|
|
|
|
### Problema: Puertos ya en uso
|
|
|
|
**Error:**
|
|
```
|
|
Error starting userland proxy: listen tcp4 0.0.0.0:8501: bind: address already in use
|
|
```
|
|
|
|
**Solución:**
|
|
```bash
|
|
# Ver qué proceso usa el puerto
|
|
lsof -i :8501
|
|
lsof -i :8080
|
|
|
|
# Matar el proceso
|
|
kill -9 <PID>
|
|
|
|
# O cambiar puertos en docker-compose.yml
|
|
```
|
|
|
|
### Problema: Contenedor no inicia
|
|
|
|
```bash
|
|
# Ver logs detallados
|
|
docker-compose logs streamlit-panel
|
|
|
|
# Ver eventos de Docker
|
|
docker events
|
|
|
|
# Reiniciar Docker Desktop (macOS/Windows)
|
|
```
|
|
|
|
### Problema: No se puede construir la imagen
|
|
|
|
```bash
|
|
# Limpiar cache de Docker
|
|
docker system prune -a
|
|
|
|
# Reconstruir sin cache
|
|
docker-compose build --no-cache
|
|
```
|
|
|
|
### Problema: Volúmenes no se actualizan
|
|
|
|
```bash
|
|
# Detener servicios
|
|
docker-compose down
|
|
|
|
# Eliminar volúmenes
|
|
docker volume prune
|
|
|
|
# Reiniciar
|
|
docker-compose up -d
|
|
```
|
|
|
|
### Problema: FFmpeg no funciona en Docker
|
|
|
|
```bash
|
|
# Verificar que FFmpeg esté en la imagen
|
|
docker exec streamlit_panel ffmpeg -version
|
|
|
|
# Si no está, reconstruir la imagen
|
|
docker-compose build --no-cache
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Monitoreo
|
|
|
|
### Ver Recursos Usados
|
|
|
|
```bash
|
|
# Ver uso de CPU, memoria, red
|
|
docker stats
|
|
|
|
# Ver solo los contenedores de TubeScript
|
|
docker stats streamlit_panel tubescript_api
|
|
```
|
|
|
|
### Ver Procesos Dentro del Contenedor
|
|
|
|
```bash
|
|
docker exec streamlit_panel ps aux
|
|
docker exec tubescript_api ps aux
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Producción
|
|
|
|
### Consideraciones para Producción
|
|
|
|
1. **Usar un proxy reverso (Nginx)**
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
nginx:
|
|
image: nginx:alpine
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- ./nginx.conf:/etc/nginx/nginx.conf
|
|
depends_on:
|
|
- streamlit-panel
|
|
- tubescript-api
|
|
```
|
|
|
|
2. **Configurar HTTPS**
|
|
|
|
3. **Usar secretos para Stream Keys**
|
|
|
|
```yaml
|
|
secrets:
|
|
stream_keys:
|
|
file: ./secrets/stream_keys.json
|
|
```
|
|
|
|
4. **Limitar recursos**
|
|
|
|
```yaml
|
|
services:
|
|
streamlit-panel:
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: '1.0'
|
|
memory: 512M
|
|
reservations:
|
|
cpus: '0.5'
|
|
memory: 256M
|
|
```
|
|
|
|
5. **Configurar logs**
|
|
|
|
```yaml
|
|
services:
|
|
streamlit-panel:
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 Archivos de Configuración
|
|
|
|
### docker-compose.yml
|
|
|
|
Define los servicios, puertos, volúmenes y redes.
|
|
|
|
### Dockerfile
|
|
|
|
Define cómo construir la imagen con Python, FFmpeg y dependencias.
|
|
|
|
### .dockerignore
|
|
|
|
Lista de archivos a ignorar al construir la imagen.
|
|
|
|
---
|
|
|
|
## 🎯 Flujo de Trabajo Completo
|
|
|
|
### Primera Vez
|
|
|
|
```bash
|
|
# 1. Clonar repositorio o navegar al directorio
|
|
cd TubeScript-API
|
|
|
|
# 2. Dar permisos a scripts
|
|
chmod +x docker-start.sh docker-stop.sh docker-logs.sh
|
|
|
|
# 3. Iniciar servicios
|
|
./docker-start.sh
|
|
|
|
# 4. Abrir en navegador
|
|
# http://localhost:8501
|
|
```
|
|
|
|
### Uso Diario
|
|
|
|
```bash
|
|
# Iniciar
|
|
docker-compose up -d
|
|
|
|
# Trabajar en el panel web
|
|
# http://localhost:8501
|
|
|
|
# Ver logs si hay problemas
|
|
./docker-logs.sh
|
|
|
|
# Detener al terminar
|
|
docker-compose down
|
|
```
|
|
|
|
### Actualizar Código
|
|
|
|
```bash
|
|
# 1. Detener servicios
|
|
docker-compose down
|
|
|
|
# 2. Actualizar código
|
|
git pull # o editar archivos
|
|
|
|
# 3. Reconstruir
|
|
docker-compose build
|
|
|
|
# 4. Reiniciar
|
|
docker-compose up -d
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 Checklist de Inicio
|
|
|
|
- [ ] Docker Desktop instalado y corriendo
|
|
- [ ] Archivos `stream_config.json` y `streams_state.json` creados
|
|
- [ ] `cookies.txt` creado (vacío está bien)
|
|
- [ ] Permisos de ejecución dados a scripts `.sh`
|
|
- [ ] Puertos 8501 y 8080 disponibles
|
|
- [ ] Ejecutar `./docker-start.sh`
|
|
- [ ] Verificar acceso a http://localhost:8501
|
|
- [ ] Verificar acceso a http://localhost:8080/docs
|
|
|
|
---
|
|
|
|
## 🎉 ¡Listo!
|
|
|
|
Tu stack completo de TubeScript-API está corriendo en Docker:
|
|
|
|
- **Frontend Streamlit**: http://localhost:8501
|
|
- **Backend FastAPI**: http://localhost:8080
|
|
- **Documentación API**: http://localhost:8080/docs
|
|
|
|
Para detener: `./docker-stop.sh`
|
|
|
|
Para ver logs: `./docker-logs.sh`
|
|
|
|
**¡Disfruta transmitiendo a múltiples plataformas! 📺🚀**
|