TubeScript-API/docker-rebuild.sh

126 lines
4.0 KiB
Bash
Executable File

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