TubeScript-API/docker-manager.sh

272 lines
8.9 KiB
Bash
Executable File

#!/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" # Deshabilitado
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" # Deshabilitado
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) Deshabilitado
# 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) Deshabilitado
# 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