437 lines
8.2 KiB
Markdown
437 lines
8.2 KiB
Markdown
# 🐳 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
|
||
```
|
||
|
||
---
|
||
|
||
### 2️⃣ Iniciar solo Streamlit
|
||
|
||
```bash
|
||
./docker-start-streamlit.sh
|
||
```
|
||
|
||
**Características:**
|
||
- Puerto: `8501` (host) → `8501` (contenedor)
|
||
- Panel web: http://localhost:8501
|
||
- Se conecta automáticamente al API usando `API_URL` del archivo `.env`
|
||
|
||
**Ver logs:**
|
||
```bash
|
||
docker logs -f streamlit_panel
|
||
```
|
||
|
||
**Detener:**
|
||
```bash
|
||
docker stop streamlit_panel
|
||
```
|
||
|
||
---
|
||
|
||
### 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**
|