179 lines
5.3 KiB
Bash
Executable File
179 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Script de deployment rápido con Docker
|
|
|
|
set -e
|
|
|
|
echo "🐳 Deployment de WhatsApp Bot Manager con Docker"
|
|
echo "================================================"
|
|
echo ""
|
|
|
|
# Colores
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# 1. Verificar Docker
|
|
echo -e "${YELLOW}[1/6]${NC} Verificando Docker..."
|
|
if ! command -v docker &> /dev/null; then
|
|
echo -e "${RED}❌ Docker no está instalado${NC}"
|
|
echo "Instala Docker desde: https://docs.docker.com/get-docker/"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
echo -e "${RED}❌ Docker Compose no está instalado${NC}"
|
|
echo "Instala Docker Compose desde: https://docs.docker.com/compose/install/"
|
|
exit 1
|
|
fi
|
|
|
|
DOCKER_VERSION=$(docker --version)
|
|
COMPOSE_VERSION=$(docker-compose --version)
|
|
echo -e "${GREEN}✓ $DOCKER_VERSION${NC}"
|
|
echo -e "${GREEN}✓ $COMPOSE_VERSION${NC}"
|
|
echo ""
|
|
|
|
# 2. Verificar .env
|
|
echo -e "${YELLOW}[2/6]${NC} Verificando configuración..."
|
|
if [ ! -f .env ]; then
|
|
echo -e "${YELLOW}⚠️ .env no existe, creando desde .env.docker...${NC}"
|
|
cp .env.docker .env
|
|
echo -e "${RED}⚠️ IMPORTANTE: Configura tus credenciales de WhatsApp en .env${NC}"
|
|
echo ""
|
|
echo "Edita el archivo .env y configura:"
|
|
echo " - WHATSAPP_TOKEN"
|
|
echo " - WHATSAPP_PHONE_NUMBER_ID"
|
|
echo " - WEBHOOK_VERIFY_TOKEN"
|
|
echo " - DB_PASS"
|
|
echo ""
|
|
read -p "¿Deseas editar .env ahora? (s/n) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Ss]$ ]]; then
|
|
${EDITOR:-nano} .env
|
|
else
|
|
echo -e "${YELLOW}⚠️ Recuerda configurar .env antes de usar el bot${NC}"
|
|
fi
|
|
else
|
|
echo -e "${GREEN}✓ .env encontrado${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# 3. Detener contenedores existentes
|
|
echo -e "${YELLOW}[3/6]${NC} Deteniendo contenedores existentes..."
|
|
docker-compose down 2>/dev/null || true
|
|
echo -e "${GREEN}✓ Limpieza completada${NC}"
|
|
echo ""
|
|
|
|
# 4. Construir imágenes
|
|
echo -e "${YELLOW}[4/6]${NC} Construyendo imágenes Docker..."
|
|
echo -e "${BLUE}Esto puede tomar varios minutos la primera vez...${NC}"
|
|
docker-compose build --no-cache
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✓ Imágenes construidas${NC}"
|
|
else
|
|
echo -e "${RED}❌ Error construyendo imágenes${NC}"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# 5. Iniciar servicios
|
|
echo -e "${YELLOW}[5/6]${NC} Iniciando servicios..."
|
|
docker-compose up -d
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✓ Servicios iniciados${NC}"
|
|
else
|
|
echo -e "${RED}❌ Error iniciando servicios${NC}"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Esperar a que los servicios estén listos
|
|
echo "⏳ Esperando que los servicios estén listos..."
|
|
sleep 10
|
|
|
|
# 6. Verificar estado
|
|
echo -e "${YELLOW}[6/6]${NC} Verificando estado de servicios..."
|
|
echo ""
|
|
|
|
# Health check
|
|
echo "🏥 Health Check:"
|
|
HEALTH_STATUS=$(curl -s http://localhost:${APP_PORT:-8080}/health.php 2>/dev/null || echo '{"status":"unreachable"}')
|
|
HEALTH=$(echo $HEALTH_STATUS | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
|
|
|
|
if [ "$HEALTH" == "healthy" ]; then
|
|
echo -e "${GREEN}✓ Aplicación: HEALTHY${NC}"
|
|
else
|
|
echo -e "${RED}✗ Aplicación: $HEALTH${NC}"
|
|
echo "Ver logs con: docker-compose logs app"
|
|
fi
|
|
echo ""
|
|
|
|
# Estado de contenedores
|
|
echo "📦 Estado de contenedores:"
|
|
docker-compose ps
|
|
echo ""
|
|
|
|
# Workers
|
|
echo "👷 Workers:"
|
|
WORKERS=$(docker-compose exec -T app supervisorctl status 2>/dev/null | grep whatsapp-worker || echo "No disponible")
|
|
if echo "$WORKERS" | grep -q "RUNNING"; then
|
|
WORKER_COUNT=$(echo "$WORKERS" | grep -c "RUNNING")
|
|
echo -e "${GREEN}✓ $WORKER_COUNT workers corriendo${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠️ Workers no verificables (puede estar iniciando)${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Redis
|
|
echo "💾 Redis:"
|
|
REDIS_PING=$(docker-compose exec -T redis redis-cli ping 2>/dev/null || echo "ERROR")
|
|
if [ "$REDIS_PING" == "PONG" ]; then
|
|
echo -e "${GREEN}✓ Redis: PONG${NC}"
|
|
else
|
|
echo -e "${RED}✗ Redis: no responde${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# MySQL
|
|
echo "🗄️ MySQL:"
|
|
MYSQL_STATUS=$(docker-compose exec -T db mysqladmin ping -h localhost -u root -p${DB_ROOT_PASSWORD:-rootpass} 2>/dev/null | grep -c "alive")
|
|
if [ "$MYSQL_STATUS" -eq 1 ]; then
|
|
echo -e "${GREEN}✓ MySQL: alive${NC}"
|
|
else
|
|
echo -e "${RED}✗ MySQL: no responde${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Resumen final
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo -e "${GREEN}✅ Deployment completado${NC}"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "🌐 Aplicación disponible en:"
|
|
echo " http://localhost:${APP_PORT:-8080}"
|
|
echo ""
|
|
echo "📊 Herramientas de desarrollo (--profile dev):"
|
|
echo " PHPMyAdmin: http://localhost:${PHPMYADMIN_PORT:-8081}"
|
|
echo " Redis Commander: http://localhost:${REDIS_COMMANDER_PORT:-8082}"
|
|
echo ""
|
|
echo "📋 Comandos útiles:"
|
|
echo " Ver logs: docker-compose logs -f"
|
|
echo " Ver estado: docker-compose ps"
|
|
echo " Reiniciar: docker-compose restart"
|
|
echo " Detener: docker-compose down"
|
|
echo " Shell app: docker-compose exec app sh"
|
|
echo ""
|
|
echo "🔗 Webhook URL para WhatsApp:"
|
|
echo " https://tudominio.com/api/webhook_optimized.php"
|
|
echo ""
|
|
echo "📚 Documentación completa: DOCKER_README.md"
|
|
echo ""
|
|
|
|
# Preguntar si desea ver logs
|
|
read -p "¿Deseas ver los logs en tiempo real? (s/n) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Ss]$ ]]; then
|
|
docker-compose logs -f
|
|
fi
|