TubeScript-API/DOCKER_COMANDOS_SEPARADOS_COMPLETO.md

418 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🐳 TubeScript API - Guía de Comandos Docker Separados
Esta guía te muestra cómo ejecutar los servicios de TubeScript API por separado, permitiéndote iniciar solo el API FastAPI o solo el panel Streamlit de forma independiente.
## 📋 Tabla de Contenido
- [Requisitos Previos](#requisitos-previos)
- [Configuración Inicial](#configuración-inicial)
- [Comandos Disponibles](#comandos-disponibles)
- [Uso Individual de Servicios](#uso-individual-de-servicios)
- [Solución de Problemas](#solución-de-problemas)
---
## 📦 Requisitos Previos
Asegúrate de tener instalado:
- **Docker** (versión 20.10 o superior)
- **Docker Compose** (opcional, solo para uso conjunto)
Verifica la instalación:
```bash
docker --version
docker-compose --version
```
---
## ⚙️ Configuración Inicial
### 1. Crear la Red de Docker
Primero, crea la red compartida entre servicios:
```bash
./docker-create-network.sh
```
O manualmente:
```bash
docker network create tubescript-network
```
### 2. Configurar Variables de Entorno
Copia el archivo de ejemplo y edita según tu configuración:
```bash
cp .env.example .env
nano .env
```
**Configuraciones importantes:**
```env
# Para servicios en el mismo servidor (Docker)
API_URL=http://tubescript-api:8000
# Para desarrollo local (sin Docker)
API_URL=http://localhost:8080
# Para producción con dominio
API_URL=https://api.tudominio.com
```
---
## 🚀 Comandos Disponibles
### 1⃣ Iniciar solo FastAPI
```bash
./docker-start-api.sh
```
**Características:**
- Puerto: `8080` (host) → `8000` (contenedor)
- Documentación: http://localhost:8080/docs
- Endpoint de prueba: http://localhost:8080/stream/VIDEO_ID
**Ver logs:**
```bash
docker logs -f tubescript_api
```
**Detener:**
```bash
docker stop tubescript_api
```
---
### 3⃣ Ver Logs
Usa el script de logs para ver la salida de los servicios:
```bash
# Ver logs de FastAPI
./docker-logs-separate.sh api
# Ver logs de Streamlit
./docker-logs-separate.sh streamlit
# Ver logs de ambos (requiere docker-compose)
./docker-logs-separate.sh both
```
O directamente con Docker:
```bash
docker logs -f tubescript_api
docker logs -f streamlit_panel
```
---
### 4⃣ Detener Todos los Servicios
```bash
./docker-stop-all.sh
```
O manualmente:
```bash
docker stop tubescript_api streamlit_panel
docker rm tubescript_api streamlit_panel
```
---
## 🎯 Uso Individual de Servicios
### Escenario 1: Solo API (Backend)
Si solo necesitas el API para integraciones o pruebas:
```bash
# 1. Crear red
./docker-create-network.sh
# 2. Iniciar API
./docker-start-api.sh
# 3. Probar endpoint
curl http://localhost:8080/stream/VIDEO_ID
```
### Escenario 2: Solo Streamlit (Frontend)
Si ya tienes el API corriendo en otro servidor:
```bash
# 1. Configurar URL del API remoto
echo "API_URL=https://api.tudominio.com" > .env
# 2. Iniciar Streamlit
./docker-start-streamlit.sh
# 3. Abrir navegador
open http://localhost:8501
```
### Escenario 3: Ambos Servicios Separados
Para desarrollo o testing:
```bash
# 1. Crear red compartida
./docker-create-network.sh
# 2. Iniciar API
./docker-start-api.sh
# 3. Esperar que API esté listo (verificar logs)
docker logs -f tubescript_api
# Presiona Ctrl+C cuando veas "Application startup complete"
# 4. Iniciar Streamlit
./docker-start-streamlit.sh
# 5. Verificar ambos servicios
curl http://localhost:8080/docs
open http://localhost:8501
```
### Escenario 4: Usar Docker Compose (Recomendado)
Para producción, usa docker-compose:
```bash
# Iniciar ambos servicios
docker-compose up -d
# Ver logs
docker-compose logs -f
# Detener
docker-compose down
```
---
## 🔧 Comandos Docker Manuales
### FastAPI
**Construir imagen:**
```bash
docker build -t tubescript-api .
```
**Ejecutar contenedor:**
```bash
docker run -d \
--name tubescript_api \
--network tubescript-network \
-p 8080:8000 \
-v "$(pwd)/cookies.txt:/app/cookies.txt:ro" \
-v "$(pwd)/stream_config.json:/app/stream_config.json" \
-v "$(pwd)/streams_state.json:/app/streams_state.json" \
-v "$(pwd)/data:/app/data" \
-e PYTHONUNBUFFERED=1 \
tubescript-api \
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
```
### Streamlit
**Ejecutar contenedor:**
```bash
docker run -d \
--name streamlit_panel \
--network tubescript-network \
-p 8501:8501 \
-v "$(pwd)/cookies.txt:/app/cookies.txt:ro" \
-v "$(pwd)/stream_config.json:/app/stream_config.json" \
-v "$(pwd)/streams_state.json:/app/streams_state.json" \
-v "$(pwd)/data:/app/data" \
-e PYTHONUNBUFFERED=1 \
-e API_URL=http://tubescript-api:8000 \
tubescript-api \
streamlit run streamlit_app.py --server.port=8501 --server.address=0.0.0.0 --server.headless=true --browser.gatherUsageStats=false
```
---
## 🔍 Verificar Estado de Servicios
### Listar contenedores activos:
```bash
docker ps
```
### Verificar red:
```bash
docker network inspect tubescript-network
```
### Ver recursos utilizados:
```bash
docker stats tubescript_api streamlit_panel
```
---
## 🛠️ Solución de Problemas
### Problema: "Red no existe"
**Solución:**
```bash
./docker-create-network.sh
```
### Problema: "Puerto ya en uso"
**Identificar proceso:**
```bash
lsof -i :8080 # Para FastAPI
lsof -i :8501 # Para Streamlit
```
**Cambiar puerto en docker-compose.yml:**
```yaml
ports:
- "8081:8000" # Cambiar 8080 por 8081
```
### Problema: "Streamlit no se conecta al API"
**Verificar API_URL:**
```bash
docker exec streamlit_panel env | grep API_URL
```
**Probar conectividad:**
```bash
docker exec streamlit_panel curl http://tubescript-api:8000/docs
```
### Problema: "Error al obtener stream m3u8"
**Actualizar yt-dlp:**
```bash
docker exec tubescript_api pip install --upgrade yt-dlp
docker exec streamlit_panel pip install --upgrade yt-dlp
```
**O reconstruir contenedores:**
```bash
docker-compose down
docker-compose build --no-cache
docker-compose up -d
```
### Problema: "Contenedor se detiene inmediatamente"
**Ver logs completos:**
```bash
docker logs tubescript_api
docker logs streamlit_panel
```
**Ejecutar en modo interactivo para debugging:**
```bash
docker run -it --rm \
--network tubescript-network \
-p 8080:8000 \
tubescript-api \
uvicorn main:app --host 0.0.0.0 --port 8000
```
---
## 📊 Monitoreo y Mantenimiento
### Ver logs en tiempo real:
```bash
# Todos los contenedores
docker logs -f tubescript_api
docker logs -f streamlit_panel
# Con marca de tiempo
docker logs -f --timestamps tubescript_api
```
### Limpiar recursos no utilizados:
```bash
# Eliminar contenedores detenidos
docker container prune
# Eliminar imágenes sin usar
docker image prune -a
# Limpiar todo (cuidado)
docker system prune -a --volumes
```
### Actualizar servicios:
```bash
# Detener servicios
./docker-stop-all.sh
# Reconstruir con últimos cambios
docker-compose build --no-cache
# Reiniciar
docker-compose up -d
```
---
## 📝 Resumen de Comandos Rápidos
```bash
# Iniciar servicios individuales
./docker-create-network.sh # Crear red (solo primera vez)
./docker-start-api.sh # Iniciar FastAPI
./docker-start-streamlit.sh # Iniciar Streamlit
# Ver logs
./docker-logs-separate.sh api # Logs de API
./docker-logs-separate.sh streamlit # Logs de Streamlit
# Detener servicios
./docker-stop-all.sh # Detener todos
# Docker Compose (alternativa)
docker-compose up -d # Iniciar ambos
docker-compose logs -f # Ver logs
docker-compose down # Detener ambos
```
---
## 🌐 URLs de Acceso
| Servicio | URL | Descripción |
|----------|-----|-------------|
| FastAPI | http://localhost:8080 | API principal |
| FastAPI Docs | http://localhost:8080/docs | Documentación interactiva |
| Streamlit | http://localhost:8501 | Panel de control web |
---
## 📚 Documentación Adicional
- [README.md](README.md) - Guía general del proyecto
- [DOCKER_GUIDE.md](DOCKER_GUIDE.md) - Guía completa de Docker
- [API_URL_CONFIG.md](API_URL_CONFIG.md) - Configuración de URL del API
---
**TubeScript API Pro © 2026**
# Nota: Streamlit eliminado
> El panel Streamlit fue eliminado — las secciones que mencionan la ejecución del panel permanecen como referencia histórica. Para uso actual, emplea solamente la API.