272 lines
8.8 KiB
Bash
Executable File
272 lines
8.8 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"
|
|
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
|