201 lines
6.1 KiB
Bash
Executable File
201 lines
6.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script de instalación rápida de la arquitectura mejorada
|
|
# Ejecutar: bash install_architecture.sh
|
|
|
|
echo "🚀 Instalando arquitectura mejorada para WhatsApp Bot..."
|
|
echo ""
|
|
|
|
# Colores
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 1. Verificar PHP
|
|
echo -e "${YELLOW}[1/7]${NC} Verificando PHP..."
|
|
if ! command -v php &> /dev/null; then
|
|
echo -e "${RED}❌ PHP no está instalado${NC}"
|
|
exit 1
|
|
fi
|
|
PHP_VERSION=$(php -r "echo PHP_VERSION;")
|
|
echo -e "${GREEN}✓ PHP $PHP_VERSION detectado${NC}"
|
|
echo ""
|
|
|
|
# 2. Verificar Composer
|
|
echo -e "${YELLOW}[2/7]${NC} Verificando Composer..."
|
|
if ! command -v composer &> /dev/null; then
|
|
echo -e "${YELLOW}⚠️ Composer no encontrado. Instalando...${NC}"
|
|
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
|
|
php composer-setup.php --quiet
|
|
rm composer-setup.php
|
|
sudo mv composer.phar /usr/local/bin/composer
|
|
fi
|
|
echo -e "${GREEN}✓ Composer instalado${NC}"
|
|
echo ""
|
|
|
|
# 3. Instalar dependencias
|
|
echo -e "${YELLOW}[3/7]${NC} Instalando dependencias PHP..."
|
|
composer install --no-dev --optimize-autoloader
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✓ Dependencias instaladas${NC}"
|
|
else
|
|
echo -e "${RED}❌ Error instalando dependencias${NC}"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# 4. Verificar/Instalar Redis
|
|
echo -e "${YELLOW}[4/7]${NC} Verificando Redis..."
|
|
if ! command -v redis-cli &> /dev/null; then
|
|
echo -e "${YELLOW}⚠️ Redis no encontrado. ¿Deseas instalarlo? (s/n)${NC}"
|
|
read -r response
|
|
if [[ "$response" =~ ^([sS][iI]|[sS])$ ]]; then
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian/Ubuntu
|
|
sudo apt update
|
|
sudo apt install redis-server -y
|
|
sudo systemctl enable redis-server
|
|
sudo systemctl start redis-server
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# CentOS/RHEL
|
|
sudo yum install redis -y
|
|
sudo systemctl enable redis
|
|
sudo systemctl start redis
|
|
else
|
|
echo -e "${RED}❌ Sistema operativo no soportado para instalación automática de Redis${NC}"
|
|
echo "Por favor instala Redis manualmente"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo -e "${RED}❌ Redis es requerido. Instálalo manualmente y vuelve a ejecutar este script${NC}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Verificar que Redis esté corriendo
|
|
redis-cli ping > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✓ Redis está corriendo${NC}"
|
|
else
|
|
echo -e "${RED}❌ Redis no está respondiendo. Iniciando...${NC}"
|
|
sudo systemctl start redis-server || sudo systemctl start redis
|
|
sleep 2
|
|
redis-cli ping > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✓ Redis iniciado correctamente${NC}"
|
|
else
|
|
echo -e "${RED}❌ No se pudo iniciar Redis${NC}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
echo ""
|
|
|
|
# 5. Crear directorios necesarios
|
|
echo -e "${YELLOW}[5/7]${NC} Creando directorios..."
|
|
mkdir -p logs
|
|
mkdir -p uploads
|
|
chmod 755 logs uploads
|
|
echo -e "${GREEN}✓ Directorios creados${NC}"
|
|
echo ""
|
|
|
|
# 6. Configurar .env
|
|
echo -e "${YELLOW}[6/7]${NC} Configurando .env..."
|
|
if [ ! -f .env ]; then
|
|
cp .env.example .env
|
|
echo -e "${GREEN}✓ Archivo .env creado${NC}"
|
|
echo -e "${YELLOW}⚠️ Recuerda configurar las variables de WhatsApp en .env${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠️ .env ya existe, no se sobrescribirá${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# 7. Configurar Supervisor (opcional)
|
|
echo -e "${YELLOW}[7/7]${NC} ¿Deseas configurar Supervisor para los workers? (s/n)"
|
|
read -r response
|
|
if [[ "$response" =~ ^([sS][iI]|[sS])$ ]]; then
|
|
if ! command -v supervisorctl &> /dev/null; then
|
|
echo "Instalando Supervisor..."
|
|
if [ -f /etc/debian_version ]; then
|
|
sudo apt install supervisor -y
|
|
elif [ -f /etc/redhat-release ]; then
|
|
sudo yum install supervisor -y
|
|
fi
|
|
sudo systemctl enable supervisor
|
|
sudo systemctl start supervisor
|
|
fi
|
|
|
|
# Obtener ruta absoluta del proyecto
|
|
PROJECT_DIR=$(pwd)
|
|
|
|
# Crear configuración de supervisor
|
|
SUPERVISOR_CONF="/etc/supervisor/conf.d/whatsapp-worker.conf"
|
|
|
|
echo "Creando configuración de supervisor..."
|
|
sudo tee $SUPERVISOR_CONF > /dev/null <<EOF
|
|
[program:whatsapp-worker]
|
|
command=/usr/bin/php $PROJECT_DIR/worker.php --daemon
|
|
process_name=%(program_name)s_%(process_num)02d
|
|
numprocs=3
|
|
directory=$PROJECT_DIR
|
|
autostart=true
|
|
autorestart=true
|
|
startsecs=1
|
|
startretries=3
|
|
user=$(whoami)
|
|
redirect_stderr=true
|
|
stdout_logfile=$PROJECT_DIR/logs/supervisor-worker.log
|
|
stdout_logfile_maxbytes=10MB
|
|
stdout_logfile_backups=10
|
|
stopwaitsecs=30
|
|
stopsignal=TERM
|
|
EOF
|
|
|
|
# Recargar supervisor
|
|
sudo supervisorctl reread
|
|
sudo supervisorctl update
|
|
sudo supervisorctl start whatsapp-worker:*
|
|
|
|
sleep 2
|
|
|
|
# Verificar estado
|
|
WORKER_STATUS=$(sudo supervisorctl status whatsapp-worker:* | grep RUNNING | wc -l)
|
|
if [ "$WORKER_STATUS" -ge 1 ]; then
|
|
echo -e "${GREEN}✓ Workers iniciados con Supervisor ($WORKER_STATUS procesos)${NC}"
|
|
else
|
|
echo -e "${RED}❌ Error iniciando workers${NC}"
|
|
sudo supervisorctl status whatsapp-worker:*
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}⚠️ Puedes iniciar workers manualmente con: php worker.php --daemon${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Resumen final
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo -e "${GREEN}✅ Instalación completada${NC}"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "📋 Próximos pasos:"
|
|
echo ""
|
|
echo "1. Configurar WhatsApp en .env:"
|
|
echo " nano .env"
|
|
echo ""
|
|
echo "2. Actualizar webhook en WhatsApp:"
|
|
echo " https://tudominio.com/api/webhook_optimized.php"
|
|
echo ""
|
|
echo "3. Verificar workers:"
|
|
echo " sudo supervisorctl status"
|
|
echo ""
|
|
echo "4. Ver logs en tiempo real:"
|
|
echo " tail -f logs/webhook.log"
|
|
echo " tail -f logs/worker.log"
|
|
echo ""
|
|
echo "5. Monitorear Redis:"
|
|
echo " redis-cli"
|
|
echo " KEYS whatsapp:queue:*"
|
|
echo ""
|
|
echo "📚 Documentación completa: ARQUITECTURA_MEJORADA.md"
|
|
echo ""
|