#!/bin/bash # Script para reconstruir las imágenes Docker de TubeScript set -e echo "════════════════════════════════════════════════════════════" echo " 🔨 TubeScript-API - Rebuild de Docker" echo "════════════════════════════════════════════════════════════" echo "" # Colores GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' print_success() { echo -e "${GREEN}✅ $1${NC}" } print_warning() { echo -e "${YELLOW}⚠️ $1${NC}" } print_error() { echo -e "${RED}❌ $1${NC}" } # Verificar Docker echo "🔍 Verificando Docker..." if ! command -v docker &> /dev/null; then print_error "Docker no está instalado" exit 1 fi if ! command -v docker-compose &> /dev/null; then print_error "Docker Compose no está instalado" exit 1 fi print_success "Docker encontrado" echo "" # Asegurar carpeta data para montajes de configuración echo "📁 Asegurando carpeta './data' para montaje de configuración..." if [ ! -d "./data" ]; then mkdir -p ./data chmod 755 ./data || true print_success "Carpeta ./data creada" else print_success "Carpeta ./data ya existe" fi echo "Nota: coloca aquí archivos persistentes como stream_config.json, streams_state.json y cookies.txt (ej: ./data/cookies.txt)" echo "" # Detener contenedores echo "🛑 Deteniendo contenedores existentes..." docker compose down 2>/dev/null || true print_success "Contenedores detenidos" echo "" # Limpiar imágenes antiguas (opcional) echo "🧹 ¿Deseas eliminar las imágenes antiguas? (s/N)" read -p "> " clean_images if [ "$clean_images" = "s" ] || [ "$clean_images" = "S" ]; then echo "Eliminando imágenes antiguas..." docker compose down --rmi all 2>/dev/null || true print_success "Imágenes antiguas eliminadas" fi echo "" # Reconstruir con CACHEBUST para invalidar solo la capa COPY . /app # CACHEBUST=$(date +%s) se exporta para que docker-compose.yml lo tome via ${CACHEBUST:-1} echo "🔨 Reconstruyendo imagen con código actualizado..." echo "Usando CACHEBUST=$(date +%s) para forzar copia fresca del código..." echo "" export CACHEBUST="$(date +%s)" docker compose build if [ $? -eq 0 ]; then print_success "Imagen reconstruida exitosamente" else print_error "Error al reconstruir imagen" exit 1 fi echo "" # Preguntar si desea iniciar echo "🚀 ¿Deseas iniciar los servicios ahora? (S/n)" read -p "> " start_services if [ "$start_services" != "n" ] && [ "$start_services" != "N" ]; then echo "" echo "🚀 Iniciando servicios..." docker compose up -d if [ $? -eq 0 ]; then print_success "Servicios iniciados" echo "" echo "📊 Estado de los servicios:" sleep 3 docker compose ps echo "" echo "════════════════════════════════════════════════════════════" print_success "¡Rebuild completado!" echo "════════════════════════════════════════════════════════════" echo "" echo "🌐 Servicios disponibles:" echo " API: http://localhost:8282" echo " Docs API: http://localhost:8282/docs" echo "" else print_error "Error al iniciar servicios" exit 1 fi else echo "" print_success "Rebuild completado (servicios no iniciados)" echo "" echo "Para iniciar los servicios:" echo " CACHEBUST=\$(date +%s) docker compose up -d --build" fi echo "════════════════════════════════════════════════════════════"