261 lines
7.6 KiB
Bash
261 lines
7.6 KiB
Bash
#!/bin/bash
|
|
# Script de despliegue automático para WhatsApp Bot Manager
|
|
# Uso: ./deploy.sh [dominio] [usuario_db] [password_db]
|
|
|
|
echo "🚀 Iniciando despliegue de WhatsApp Bot Manager..."
|
|
|
|
# Validar parámetros
|
|
if [ $# -ne 3 ]; then
|
|
echo "❌ Error: Faltan parámetros"
|
|
echo "Uso: $0 <dominio> <usuario_db> <password_db>"
|
|
echo "Ejemplo: $0 midominio.com db_user mi_password"
|
|
exit 1
|
|
fi
|
|
|
|
DOMAIN=$1
|
|
DB_USER=$2
|
|
DB_PASS=$3
|
|
PROJECT_PATH="/var/www/html/bot"
|
|
|
|
echo "📋 Configuración:"
|
|
echo " Dominio: $DOMAIN"
|
|
echo " Usuario DB: $DB_USER"
|
|
echo " Ruta: $PROJECT_PATH"
|
|
|
|
# Crear directorio del proyecto
|
|
echo "📁 Creando directorios..."
|
|
sudo mkdir -p $PROJECT_PATH
|
|
cd $PROJECT_PATH
|
|
|
|
# Configurar archivo de configuración
|
|
echo "⚙️ Configurando config.php..."
|
|
cat > config/config.php << EOF
|
|
<?php
|
|
/**
|
|
* Configuración de producción - WhatsApp Bot Manager
|
|
* Generado automáticamente: $(date)
|
|
*/
|
|
|
|
// Base de datos de producción
|
|
define('DB_HOST', 'localhost');
|
|
define('DB_NAME', 'whatsapp');
|
|
define('DB_USER', '$DB_USER');
|
|
define('DB_PASS', '$DB_PASS');
|
|
define('DB_CHARSET', 'utf8mb4');
|
|
|
|
// WhatsApp Business API (ACTUALIZAR CON TUS TOKENS)
|
|
define('WHATSAPP_TOKEN', 'TU_TOKEN_AQUI');
|
|
define('WHATSAPP_PHONE_NUMBER_ID', 'TU_PHONE_ID_AQUI');
|
|
define('WHATSAPP_API_URL', 'https://graph.facebook.com/v22.0/');
|
|
define('WEBHOOK_VERIFY_TOKEN', 'mi_token_secreto_123');
|
|
|
|
// Configuración de producción
|
|
define('APP_NAME', 'WhatsApp Bot Manager');
|
|
define('APP_VERSION', '1.0.0');
|
|
define('APP_URL', 'https://$DOMAIN/bot');
|
|
define('TIMEZONE', 'America/Bogota');
|
|
|
|
// Seguridad en producción
|
|
error_reporting(0);
|
|
ini_set('display_errors', 0);
|
|
ini_set('log_errors', 1);
|
|
|
|
// Headers de seguridad
|
|
header('X-Content-Type-Options: nosniff');
|
|
header('X-Frame-Options: DENY');
|
|
header('X-XSS-Protection: 1; mode=block');
|
|
|
|
// Autoloader
|
|
spl_autoload_register(function (\$class) {
|
|
\$directories = [
|
|
dirname(__DIR__) . '/classes/',
|
|
dirname(__DIR__) . '/services/'
|
|
];
|
|
|
|
foreach (\$directories as \$directory) {
|
|
\$file = \$directory . \$class . '.php';
|
|
if (file_exists(\$file)) {
|
|
require_once \$file;
|
|
return;
|
|
}
|
|
}
|
|
});
|
|
?>
|
|
EOF
|
|
|
|
# Crear .htaccess de seguridad
|
|
echo "🔒 Configurando seguridad..."
|
|
cat > .htaccess << EOF
|
|
RewriteEngine On
|
|
|
|
# Forzar HTTPS
|
|
RewriteCond %{HTTPS} off
|
|
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
|
|
|
# Proteger archivos sensibles
|
|
<Files "config.php">
|
|
Require all denied
|
|
</Files>
|
|
|
|
<Files "*.sql">
|
|
Require all denied
|
|
</Files>
|
|
|
|
<Files "*.log">
|
|
Require all denied
|
|
</Files>
|
|
|
|
# Cache headers
|
|
<IfModule mod_expires.c>
|
|
ExpiresActive on
|
|
ExpiresByType text/css "access plus 1 year"
|
|
ExpiresByType application/javascript "access plus 1 year"
|
|
ExpiresByType image/png "access plus 1 year"
|
|
ExpiresByType image/jpg "access plus 1 year"
|
|
</IfModule>
|
|
|
|
# Compresión GZIP
|
|
<IfModule mod_deflate.c>
|
|
AddOutputFilterByType DEFLATE text/plain
|
|
AddOutputFilterByType DEFLATE text/html
|
|
AddOutputFilterByType DEFLATE text/css
|
|
AddOutputFilterByType DEFLATE application/javascript
|
|
AddOutputFilterByType DEFLATE application/json
|
|
</IfModule>
|
|
EOF
|
|
|
|
# Configurar permisos
|
|
echo "📝 Configurando permisos..."
|
|
sudo chown -R www-data:www-data $PROJECT_PATH
|
|
sudo find $PROJECT_PATH -type f -exec chmod 644 {} \;
|
|
sudo find $PROJECT_PATH -type d -exec chmod 755 {} \;
|
|
sudo chmod 600 $PROJECT_PATH/config/config.php
|
|
|
|
# Configurar Virtual Host de Apache
|
|
echo "🌐 Configurando Apache Virtual Host..."
|
|
sudo tee /etc/apache2/sites-available/whatsapp-bot.conf > /dev/null << EOF
|
|
<VirtualHost *:80>
|
|
ServerName $DOMAIN
|
|
ServerAlias www.$DOMAIN
|
|
DocumentRoot $PROJECT_PATH
|
|
|
|
<Directory $PROJECT_PATH>
|
|
AllowOverride All
|
|
Require all granted
|
|
DirectoryIndex index.php
|
|
</Directory>
|
|
|
|
ErrorLog \${APACHE_LOG_DIR}/whatsapp-bot_error.log
|
|
CustomLog \${APACHE_LOG_DIR}/whatsapp-bot_access.log combined
|
|
|
|
# Redirigir HTTP a HTTPS
|
|
RewriteEngine On
|
|
RewriteCond %{HTTPS} off
|
|
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
|
</VirtualHost>
|
|
|
|
<IfModule mod_ssl.c>
|
|
<VirtualHost *:443>
|
|
ServerName $DOMAIN
|
|
ServerAlias www.$DOMAIN
|
|
DocumentRoot $PROJECT_PATH
|
|
|
|
SSLEngine on
|
|
SSLCertificateFile /etc/letsencrypt/live/$DOMAIN/fullchain.pem
|
|
SSLCertificateKeyFile /etc/letsencrypt/live/$DOMAIN/privkey.pem
|
|
|
|
<Directory $PROJECT_PATH>
|
|
AllowOverride All
|
|
Require all granted
|
|
DirectoryIndex index.php
|
|
</Directory>
|
|
|
|
ErrorLog \${APACHE_LOG_DIR}/whatsapp-bot_ssl_error.log
|
|
CustomLog \${APACHE_LOG_DIR}/whatsapp-bot_ssl_access.log combined
|
|
</VirtualHost>
|
|
</IfModule>
|
|
EOF
|
|
|
|
# Habilitar sitio
|
|
echo "✅ Habilitando sitio..."
|
|
sudo a2ensite whatsapp-bot.conf
|
|
sudo a2enmod rewrite ssl
|
|
sudo systemctl reload apache2
|
|
|
|
# Configurar SSL con Let's Encrypt
|
|
echo "🔐 Configurando SSL..."
|
|
if command -v certbot &> /dev/null; then
|
|
sudo certbot --apache -d $DOMAIN -d www.$DOMAIN --non-interactive --agree-tos --email admin@$DOMAIN
|
|
else
|
|
echo "⚠️ Certbot no instalado. Instala SSL manualmente:"
|
|
echo " sudo apt install certbot python3-certbot-apache"
|
|
echo " sudo certbot --apache -d $DOMAIN"
|
|
fi
|
|
|
|
# Crear base de datos
|
|
echo "🗄️ Configurando base de datos..."
|
|
sudo mysql -e "CREATE DATABASE IF NOT EXISTS whatsapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
|
sudo mysql -e "CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
|
sudo mysql -e "GRANT ALL PRIVILEGES ON whatsapp.* TO '$DB_USER'@'localhost';"
|
|
sudo mysql -e "FLUSH PRIVILEGES;"
|
|
|
|
# Crear script de backup
|
|
echo "💾 Configurando backup automático..."
|
|
sudo tee /usr/local/bin/backup-whatsapp.sh > /dev/null << EOF
|
|
#!/bin/bash
|
|
DATE=\$(date +%Y%m%d_%H%M%S)
|
|
BACKUP_DIR="/var/backups/whatsapp"
|
|
mkdir -p \$BACKUP_DIR
|
|
|
|
# Backup de base de datos
|
|
mysqldump -u $DB_USER -p'$DB_PASS' whatsapp > \$BACKUP_DIR/whatsapp_\$DATE.sql
|
|
|
|
# Backup de archivos
|
|
tar -czf \$BACKUP_DIR/files_\$DATE.tar.gz $PROJECT_PATH
|
|
|
|
# Eliminar backups antiguos (más de 7 días)
|
|
find \$BACKUP_DIR -name "*.sql" -mtime +7 -delete
|
|
find \$BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
|
|
|
|
echo "Backup completado: \$DATE"
|
|
EOF
|
|
|
|
sudo chmod +x /usr/local/bin/backup-whatsapp.sh
|
|
|
|
# Configurar cron para backup diario
|
|
echo "⏰ Configurando backup automático diario..."
|
|
(crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/backup-whatsapp.sh") | crontab -
|
|
|
|
# Mostrar información final
|
|
echo ""
|
|
echo "🎉 ¡Despliegue completado!"
|
|
echo ""
|
|
echo "📋 Información importante:"
|
|
echo " 🌐 Sitio web: https://$DOMAIN/migrador"
|
|
echo " ⚙️ Instalador: https://$DOMAIN/migrador/install.php"
|
|
echo " 🧪 Pruebas: https://$DOMAIN/migrador/test.php"
|
|
echo " 📱 Webhook: https://$DOMAIN/migrador/api/webhook.php"
|
|
echo ""
|
|
echo "🔧 Próximos pasos:"
|
|
echo " 1. Edita config/config.php con tus tokens de WhatsApp"
|
|
echo " 2. Ejecuta el instalador: https://$DOMAIN/migrador/install.php"
|
|
echo " 3. Configura webhook en Facebook Developers"
|
|
echo " 4. Prueba el sistema: https://$DOMAIN/migrador/test.php"
|
|
echo ""
|
|
echo "📁 Rutas importantes:"
|
|
echo " Config: $PROJECT_PATH/config/config.php"
|
|
echo " Logs: /var/log/apache2/whatsapp-bot_*.log"
|
|
echo " Backups: /var/backups/whatsapp/"
|
|
echo ""
|
|
echo "🔒 Webhook URL para Facebook:"
|
|
echo " https://$DOMAIN/migrador/api/webhook.php"
|
|
echo " Token de verificación: mi_token_secreto_123"
|
|
echo ""
|
|
|
|
# Verificar estado de servicios
|
|
echo "📊 Estado de servicios:"
|
|
sudo systemctl is-active apache2 && echo " ✅ Apache: Funcionando" || echo " ❌ Apache: Error"
|
|
sudo systemctl is-active mysql && echo " ✅ MySQL: Funcionando" || echo " ❌ MySQL: Error"
|
|
|
|
echo ""
|
|
echo "¡Tu WhatsApp Bot Manager está listo! 🚀" |