#!/bin/bash # WhatsApp Gateway - Deployment Script # Para VPS Ubuntu/Debian set -e echo "šŸš€ WhatsApp Gateway Deployment Script" echo "======================================" # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Functions log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Check if running as root if [[ $EUID -eq 0 ]]; then log_error "This script should not be run as root!" exit 1 fi # Update system log_info "Updating system packages..." sudo apt update && sudo apt upgrade -y # Install Node.js log_info "Installing Node.js 18+..." if ! command -v node &> /dev/null; then curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs else log_warn "Node.js already installed: $(node --version)" fi # Install PM2 log_info "Installing PM2 process manager..." if ! command -v pm2 &> /dev/null; then sudo npm install -g pm2 else log_warn "PM2 already installed: $(pm2 --version)" fi # Install Nginx (optional) log_info "Installing Nginx..." if ! command -v nginx &> /dev/null; then sudo apt install -y nginx else log_warn "Nginx already installed: $(nginx -v 2>&1)" fi # Create deployment directory DEPLOY_DIR="/opt/whatsapp-gateway" log_info "Creating deployment directory: $DEPLOY_DIR" sudo mkdir -p $DEPLOY_DIR sudo chown $USER:$USER $DEPLOY_DIR # Copy files (assuming script is run from project root) log_info "Copying project files..." cp -r gateway $DEPLOY_DIR/ cp -r manager $DEPLOY_DIR/ cp README.md $DEPLOY_DIR/ # Install dependencies log_info "Installing Gateway dependencies..." cd $DEPLOY_DIR/gateway npm install log_info "Installing Manager dependencies..." cd $DEPLOY_DIR/manager npm install # Build Manager log_info "Building Manager Web interface..." npm run build # Create PM2 ecosystem file log_info "Creating PM2 ecosystem configuration..." cat > $DEPLOY_DIR/ecosystem.config.js << 'EOF' module.exports = { apps: [ { name: 'whatsapp-gateway', script: './gateway/dist/index.js', cwd: '/opt/whatsapp-gateway', instances: 1, autorestart: true, watch: false, max_memory_restart: '1G', env: { NODE_ENV: 'production', PORT: 3001 }, error_file: '/var/log/whatsapp-gateway-error.log', out_file: '/var/log/whatsapp-gateway-out.log', log_file: '/var/log/whatsapp-gateway-combined.log', time: true }, { name: 'whatsapp-manager', script: 'serve', cwd: '/opt/whatsapp-gateway/manager', args: '-s dist -l 3002', instances: 1, autorestart: true, watch: false, max_memory_restart: '500M', error_file: '/var/log/whatsapp-manager-error.log', out_file: '/var/log/whatsapp-manager-out.log', log_file: '/var/log/whatsapp-manager-combined.log', time: true } ] }; EOF # Install serve for Manager cd $DEPLOY_DIR/manager npm install serve # Build Gateway log_info "Building Gateway..." cd $DEPLOY_DIR/gateway npm run build # Create auth_info directory mkdir -p $DEPLOY_DIR/gateway/auth_info # Set permissions chmod +x $DEPLOY_DIR/gateway/auth_info # Create log directory sudo mkdir -p /var/log/whatsapp-gateway sudo chown $USER:$USER /var/log/whatsapp-gateway # Start services with PM2 log_info "Starting services with PM2..." cd $DEPLOY_DIR pm2 start ecosystem.config.js # Save PM2 configuration pm2 save pm2 startup # Configure Nginx log_info "Configuring Nginx..." sudo tee /etc/nginx/sites-available/whatsapp-gateway << 'EOF' server { listen 80; server_name _; # Manager Web location / { proxy_pass http://localhost:3002; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # API Gateway location /api/ { proxy_pass http://localhost:3001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # WebSocket location /ws { proxy_pass http://localhost:3003; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } EOF # Enable Nginx site sudo ln -sf /etc/nginx/sites-available/whatsapp-gateway /etc/nginx/sites-enabled/ sudo rm -f /etc/nginx/sites-enabled/default # Test Nginx configuration sudo nginx -t # Restart Nginx sudo systemctl restart nginx sudo systemctl enable nginx # Configure firewall log_info "Configuring firewall..." sudo ufw --force reset sudo ufw allow 22 # SSH sudo ufw allow 80 # HTTP sudo ufw allow 443 # HTTPS sudo ufw --force enable # Create status script log_info "Creating status monitoring script..." cat > $DEPLOY_DIR/status.sh << 'EOF' #!/bin/bash echo "šŸ” WhatsApp Gateway Status" echo "==========================" # Check PM2 processes echo -e "\nšŸ“Š PM2 Processes:" pm2 status # Check service health echo -e "\nšŸ„ Service Health:" curl -s http://localhost:3001/api/health | jq '.' 2>/dev/null || echo "āŒ Gateway API not responding" # Check logs echo -e "\nšŸ“ Recent Logs:" pm2 logs whatsapp-gateway --lines 10 --nostream # Check system resources echo -e "\nšŸ’» System Resources:" echo "Memory: $(free -h | grep '^Mem:' | awk '{print $3 "/" $2}')" echo "Disk: $(df -h / | tail -1 | awk '{print $3 "/" $2}')" echo "Uptime: $(uptime -p)" EOF chmod +x $DEPLOY_DIR/status.sh # Create update script log_info "Creating update script..." cat > $DEPLOY_DIR/update.sh << 'EOF' #!/bin/bash echo "šŸ”„ Updating WhatsApp Gateway..." echo "==============================" # Backup current version BACKUP_DIR="/opt/whatsapp-gateway-backup-$(date +%Y%m%d-%H%M%S)" sudo mkdir -p $BACKUP_DIR sudo cp -r /opt/whatsapp-gateway/* $BACKUP_DIR/ # Pull latest changes (if git repo) cd /opt/whatsapp-gateway if [ -d ".git" ]; then git pull origin main fi # Rebuild and restart cd gateway npm install npm run build cd ../manager npm install npm run build # Restart services pm2 restart whatsapp-gateway whatsapp-manager echo "āœ… Update completed!" echo "šŸ“ Backup available at: $BACKUP_DIR" EOF chmod +x $DEPLOY_DIR/update.sh # Final status log_info "Deployment completed successfully!" echo "" echo -e "${GREEN}šŸŽ‰ WhatsApp Gateway is now running!${NC}" echo "" echo "šŸ“ Access URLs:" echo " Manager Web: http://$(curl -s ifconfig.me)/" echo " API: http://$(curl -s ifconfig.me)/api/" echo " WebSocket: ws://$(curl -s ifconfig.me)/ws" echo "" echo "šŸ”§ Management Commands:" echo " Status: $DEPLOY_DIR/status.sh" echo " Update: $DEPLOY_DIR/update.sh" echo " PM2: pm2 status | pm2 logs | pm2 restart" echo "" echo "šŸ“ Important Paths:" echo " Project: $DEPLOY_DIR" echo " Logs: /var/log/whatsapp-gateway/" echo " Auth: $DEPLOY_DIR/gateway/auth_info/" echo "" echo -e "${YELLOW}āš ļø Next Steps:${NC}" echo " 1. Open Manager Web in browser" echo " 2. Scan QR code with WhatsApp" echo " 3. Test API endpoints" echo " 4. Configure n8n integration" echo "" echo -e "${GREEN}āœ… All services are running and ready!${NC}"