# 🐳 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**