257 lines
7.0 KiB
Bash
Executable File
257 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# scripts/install_translation_system.sh
|
|
# Script automatizado para instalar y configurar el sistema de traducción optimizado
|
|
# Uso: sudo bash scripts/install_translation_system.sh [pruebas|reod]
|
|
|
|
set -e # Detener si hay algún error
|
|
|
|
# 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 imprimir con color
|
|
print_step() {
|
|
echo -e "${BLUE}==>${NC} $1"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}✓${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}⚠${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}✗${NC} $1"
|
|
}
|
|
|
|
# Verificar que se ejecuta como root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
print_error "Este script debe ejecutarse como root (usa sudo)"
|
|
exit 1
|
|
fi
|
|
|
|
# Obtener environment (pruebas o reod)
|
|
ENVIRONMENT=${1:-reod}
|
|
if [ "$ENVIRONMENT" != "pruebas" ] && [ "$ENVIRONMENT" != "reod" ]; then
|
|
print_error "Environment inválido. Usa: pruebas o reod"
|
|
exit 1
|
|
fi
|
|
|
|
print_step "Instalando sistema de traducción optimizado para environment: $ENVIRONMENT"
|
|
echo ""
|
|
|
|
# ============================================
|
|
# PASO 1: Instalar Redis Server
|
|
# ============================================
|
|
print_step "PASO 1/6: Instalando Redis Server..."
|
|
|
|
if command -v redis-server &> /dev/null; then
|
|
print_warning "Redis ya está instalado"
|
|
else
|
|
apt-get update -qq
|
|
apt-get install -y redis-server redis-tools
|
|
print_success "Redis instalado"
|
|
fi
|
|
|
|
# Iniciar y habilitar Redis
|
|
systemctl start redis-server
|
|
systemctl enable redis-server
|
|
|
|
# Verificar que Redis funciona
|
|
if redis-cli ping &> /dev/null; then
|
|
print_success "Redis funcionando correctamente"
|
|
else
|
|
print_error "Redis no responde"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# ============================================
|
|
# PASO 2: Instalar extensión PHP Redis
|
|
# ============================================
|
|
print_step "PASO 2/6: Instalando extensión PHP Redis..."
|
|
|
|
if php -m | grep -q redis; then
|
|
print_warning "Extensión PHP Redis ya está instalada"
|
|
else
|
|
apt-get install -y php-redis
|
|
print_success "Extensión PHP Redis instalada"
|
|
fi
|
|
|
|
# Reiniciar servicios PHP
|
|
if systemctl list-units --type=service | grep -q php.*fpm; then
|
|
systemctl restart php*-fpm
|
|
print_success "PHP-FPM reiniciado"
|
|
fi
|
|
|
|
if systemctl list-units --type=service | grep -q apache2; then
|
|
systemctl restart apache2
|
|
print_success "Apache reiniciado"
|
|
fi
|
|
|
|
# Verificar extensión
|
|
if php -m | grep -q redis; then
|
|
print_success "Extensión PHP Redis verificada"
|
|
else
|
|
print_error "Extensión PHP Redis no está disponible"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# ============================================
|
|
# PASO 3: Verificar extensión PCNTL
|
|
# ============================================
|
|
print_step "PASO 3/6: Verificando extensión PHP PCNTL..."
|
|
|
|
if php -m | grep -q pcntl; then
|
|
print_success "Extensión PCNTL disponible"
|
|
else
|
|
print_warning "Instalando extensión PCNTL..."
|
|
apt-get install -y php-pcntl
|
|
systemctl restart php*-fpm 2>/dev/null || true
|
|
|
|
if php -m | grep -q pcntl; then
|
|
print_success "Extensión PCNTL instalada"
|
|
else
|
|
print_error "No se pudo instalar PCNTL"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# ============================================
|
|
# PASO 4: Actualizar configuración de Supervisor
|
|
# ============================================
|
|
print_step "PASO 4/6: Actualizando configuración de Supervisor..."
|
|
|
|
SUPERVISOR_CONF="/etc/supervisor/conf.d/bot.conf"
|
|
|
|
# Hacer backup de la configuración actual
|
|
if [ -f "$SUPERVISOR_CONF" ]; then
|
|
cp "$SUPERVISOR_CONF" "$SUPERVISOR_CONF.backup.$(date +%Y%m%d_%H%M%S)"
|
|
print_success "Backup de configuración creado"
|
|
fi
|
|
|
|
# Detener worker antiguo si existe
|
|
if supervisorctl status translation-worker &> /dev/null; then
|
|
supervisorctl stop translation-worker
|
|
print_success "Worker antiguo detenido"
|
|
fi
|
|
|
|
# Crear nueva configuración
|
|
cat > "$SUPERVISOR_CONF" << 'EOF'
|
|
# Bot de Discord (sin cambios)
|
|
[program:discordbot]
|
|
command=/usr/bin/php /var/www/html/bot/discord_bot.php
|
|
environment=APP_ENVIRONMENT="reod"
|
|
directory=/var/www/html/bot/
|
|
autostart=true
|
|
autorestart=true
|
|
stderr_logfile=/var/www/html/bot/logs/discordbot.err.log
|
|
stdout_logfile=/var/www/html/bot/logs/discordbot.out.log
|
|
user=www-data
|
|
|
|
# Pool de Workers de Traducción (NUEVO)
|
|
[program:translation-worker-pool]
|
|
command=/usr/bin/php /var/www/html/bot/scripts/start_worker_pool.php
|
|
environment=APP_ENVIRONMENT="reod"
|
|
directory=/var/www/html/bot/
|
|
autostart=true
|
|
autorestart=true
|
|
stderr_logfile=/var/www/html/bot/logs/translation-worker-pool.err.log
|
|
stdout_logfile=/var/www/html/bot/logs/translation-worker-pool.out.log
|
|
user=www-data
|
|
numprocs=1
|
|
stopwaitsecs=30
|
|
stopsignal=TERM
|
|
EOF
|
|
|
|
print_success "Configuración de Supervisor actualizada"
|
|
|
|
# Recargar Supervisor
|
|
supervisorctl reread
|
|
supervisorctl update
|
|
print_success "Supervisor recargado"
|
|
|
|
echo ""
|
|
|
|
# ============================================
|
|
# PASO 5: Iniciar pool de workers
|
|
# ============================================
|
|
print_step "PASO 5/6: Iniciando pool de workers..."
|
|
|
|
# Dar permisos de ejecución a scripts
|
|
chmod +x /var/www/html/bot/scripts/*.sh
|
|
chmod +x /var/www/html/bot/scripts/*.php
|
|
|
|
# Iniciar pool
|
|
supervisorctl start translation-worker-pool
|
|
sleep 3
|
|
|
|
# Verificar estado
|
|
if supervisorctl status translation-worker-pool | grep -q RUNNING; then
|
|
print_success "Pool de workers iniciado"
|
|
else
|
|
print_error "Pool de workers no se inició correctamente"
|
|
supervisorctl tail translation-worker-pool stderr
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# ============================================
|
|
# PASO 6: Verificar instalación
|
|
# ============================================
|
|
print_step "PASO 6/6: Verificando instalación..."
|
|
|
|
# Verificar workers activos
|
|
WORKER_COUNT=$(ps aux | grep -c '[T]ranslationWorker' || echo "0")
|
|
if [ "$WORKER_COUNT" -ge 4 ]; then
|
|
print_success "Workers activos: $WORKER_COUNT"
|
|
else
|
|
print_warning "Workers activos: $WORKER_COUNT (esperados: 4+)"
|
|
fi
|
|
|
|
# Verificar Redis
|
|
if redis-cli -h 10.10.4.17 -p 6379 ping &> /dev/null; then
|
|
print_success "Conexión a Redis: OK"
|
|
else
|
|
print_warning "No se puede conectar a Redis en 10.10.4.17:6379"
|
|
fi
|
|
|
|
# Verificar supervisor
|
|
if supervisorctl status | grep -q "translation-worker-pool.*RUNNING"; then
|
|
print_success "Supervisor: OK"
|
|
else
|
|
print_warning "Supervisor: Verificar estado"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${GREEN} INSTALACIÓN COMPLETADA EXITOSAMENTE ${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo ""
|
|
|
|
# Mostrar estadísticas
|
|
print_step "Estadísticas del sistema:"
|
|
php /var/www/html/bot/scripts/translation_stats.php
|
|
|
|
echo ""
|
|
print_step "Comandos útiles:"
|
|
echo " Ver logs: tail -f /var/www/html/bot/logs/translation-worker-pool.out.log"
|
|
echo " Ver estadísticas: php /var/www/html/bot/scripts/translation_stats.php"
|
|
echo " Reiniciar: sudo supervisorctl restart translation-worker-pool"
|
|
echo " Detener: sudo supervisorctl stop translation-worker-pool"
|
|
echo ""
|
|
|
|
print_success "Sistema de traducción optimizado instalado y funcionando"
|
|
print_success "Capacidad: ~400 traducciones/minuto (13x más que antes)"
|