#!/bin/bash # ==================================== # TubeScript API - Gestor Todo-en-Uno # ==================================== SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Función para mostrar el menú show_menu() { clear echo -e "${BLUE}╔════════════════════════════════════════════════════════╗${NC}" echo -e "${BLUE}║ 📺 TubeScript API - Gestor Central ║${NC}" echo -e "${BLUE}╚════════════════════════════════════════════════════════╝${NC}" echo "" echo -e "${GREEN}SERVICIOS:${NC}" echo " 1) 🚀 Iniciar TODOS los servicios (Docker Compose)" echo " 2) 🔧 Iniciar solo FastAPI" echo " 3) 🖥️ Iniciar solo Streamlit" echo "" echo -e "${YELLOW}CONTROL:${NC}" echo " 4) 🛑 Detener todos los servicios" echo " 5) 🔄 Reiniciar todos los servicios" echo " 6) 🏗️ Reconstruir contenedores (rebuild)" echo "" echo -e "${BLUE}MONITOREO:${NC}" echo " 7) 📋 Ver logs de FastAPI" echo " 8) 📋 Ver logs de Streamlit" echo " 9) 📋 Ver logs de ambos servicios" echo " 10) 📊 Ver estado de servicios" echo "" echo -e "${GREEN}MANTENIMIENTO:${NC}" echo " 11) 🔄 Actualizar yt-dlp" echo " 12) 🌐 Crear red de Docker" echo " 13) 🧹 Limpiar contenedores y volúmenes" echo "" echo -e "${BLUE}UTILIDADES:${NC}" echo " 14) 🌍 Abrir panel web (Streamlit)" echo " 15) 📚 Abrir documentación API (FastAPI)" echo " 16) ⚙️ Editar configuración (.env)" echo "" echo " 0) 🚪 Salir" echo "" echo -n "Selecciona una opción: " } # Función para esperar input del usuario wait_for_key() { echo "" echo -e "${YELLOW}Presiona cualquier tecla para continuar...${NC}" read -n 1 -s } # Función para verificar si Docker está instalado check_docker() { if ! command -v docker &> /dev/null; then echo -e "${RED}❌ Docker no está instalado${NC}" echo "Por favor instala Docker primero" exit 1 fi } # Función para verificar estado de servicios check_services() { echo -e "${BLUE}📊 Estado de los servicios:${NC}" echo "" # Verificar FastAPI if docker ps | grep -q tubescript_api; then echo -e " FastAPI: ${GREEN}🟢 ACTIVO${NC} (http://localhost:8080)" else echo -e " FastAPI: ${RED}🔴 DETENIDO${NC}" fi # Verificar Streamlit if docker ps | grep -q streamlit_panel; then echo -e " Streamlit: ${GREEN}🟢 ACTIVO${NC} (http://localhost:8501)" else echo -e " Streamlit: ${RED}🔴 DETENIDO${NC}" fi echo "" # Mostrar recursos if docker ps | grep -q "tubescript\|streamlit"; then echo -e "${BLUE}💻 Uso de recursos:${NC}" docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" \ $(docker ps -q --filter "name=tubescript\|streamlit") 2>/dev/null || true fi } # Verificar Docker check_docker # Loop principal while true; do show_menu read -r option case $option in 1) echo "" echo -e "${GREEN}🚀 Iniciando todos los servicios con Docker Compose...${NC}" docker-compose down 2>/dev/null docker-compose up -d echo "" echo -e "${GREEN}✅ Servicios iniciados${NC}" check_services wait_for_key ;; 2) echo "" echo -e "${GREEN}🔧 Iniciando solo FastAPI...${NC}" ./docker-start-api.sh wait_for_key ;; 3) echo "" echo -e "${GREEN}🖥️ Iniciando solo Streamlit...${NC}" ./docker-start-streamlit.sh wait_for_key ;; 4) echo "" echo -e "${YELLOW}🛑 Deteniendo todos los servicios...${NC}" ./docker-stop-all.sh docker-compose down 2>/dev/null echo "" echo -e "${GREEN}✅ Todos los servicios detenidos${NC}" wait_for_key ;; 5) echo "" echo -e "${YELLOW}🔄 Reiniciando todos los servicios...${NC}" docker-compose down 2>/dev/null ./docker-stop-all.sh sleep 2 docker-compose up -d echo "" echo -e "${GREEN}✅ Servicios reiniciados${NC}" check_services wait_for_key ;; 6) echo "" echo -e "${YELLOW}🏗️ Reconstruyendo contenedores...${NC}" docker-compose down docker-compose build --no-cache docker-compose up -d echo "" echo -e "${GREEN}✅ Contenedores reconstruidos${NC}" check_services wait_for_key ;; 7) echo "" echo -e "${BLUE}📋 Logs de FastAPI (Ctrl+C para salir):${NC}" echo "" docker logs -f tubescript_api 2>/dev/null || echo -e "${RED}❌ FastAPI no está corriendo${NC}" wait_for_key ;; 8) echo "" echo -e "${BLUE}📋 Logs de Streamlit (Ctrl+C para salir):${NC}" echo "" docker logs -f streamlit_panel 2>/dev/null || echo -e "${RED}❌ Streamlit no está corriendo${NC}" wait_for_key ;; 9) echo "" echo -e "${BLUE}📋 Logs de ambos servicios (Ctrl+C para salir):${NC}" echo "" docker-compose logs -f 2>/dev/null || echo -e "${RED}❌ Servicios no están corriendo con Docker Compose${NC}" wait_for_key ;; 10) echo "" check_services wait_for_key ;; 11) echo "" echo -e "${GREEN}🔄 Actualizando yt-dlp en ambos contenedores...${NC}" echo "" if docker ps | grep -q tubescript_api; then echo "Actualizando en FastAPI..." docker exec tubescript_api pip install --upgrade yt-dlp fi if docker ps | grep -q streamlit_panel; then echo "Actualizando en Streamlit..." docker exec streamlit_panel pip install --upgrade yt-dlp fi echo "" echo -e "${GREEN}✅ yt-dlp actualizado${NC}" wait_for_key ;; 12) echo "" echo -e "${GREEN}🌐 Creando red de Docker...${NC}" ./docker-create-network.sh wait_for_key ;; 13) echo "" echo -e "${RED}⚠️ ADVERTENCIA: Esto eliminará contenedores e imágenes no utilizados${NC}" echo -n "¿Continuar? (s/n): " read -r confirm if [[ $confirm == "s" || $confirm == "S" ]]; then docker container prune -f docker image prune -a -f echo "" echo -e "${GREEN}✅ Limpieza completada${NC}" else echo "Operación cancelada" fi wait_for_key ;; 14) echo "" echo -e "${BLUE}🌍 Abriendo panel web...${NC}" if command -v open &> /dev/null; then open http://localhost:8501 elif command -v xdg-open &> /dev/null; then xdg-open http://localhost:8501 else echo "Abre en tu navegador: http://localhost:8501" fi wait_for_key ;; 15) echo "" echo -e "${BLUE}📚 Abriendo documentación API...${NC}" if command -v open &> /dev/null; then open http://localhost:8080/docs elif command -v xdg-open &> /dev/null; then xdg-open http://localhost:8080/docs else echo "Abre en tu navegador: http://localhost:8080/docs" fi wait_for_key ;; 16) echo "" echo -e "${BLUE}⚙️ Editando configuración...${NC}" if [ ! -f .env ]; then cp .env.example .env echo "Archivo .env creado desde .env.example" fi ${EDITOR:-nano} .env wait_for_key ;; 0) echo "" echo -e "${GREEN}👋 ¡Hasta luego!${NC}" exit 0 ;; *) echo "" echo -e "${RED}❌ Opción inválida${NC}" wait_for_key ;; esac done