#!/bin/bash # 最终部署脚本 set -e SERVER="156.225.27.52" PORT="5204" USER="root" PASSWORD="${DEPLOY_SSH_PASSWORD:?set DEPLOY_SSH_PASSWORD}" ssh_cmd() { sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=30 -p $PORT $USER@$SERVER "$1" } echo "==========================================" echo "开始最终部署..." echo "==========================================" echo "" echo "步骤 1: 上传更新的 package.json..." sshpass -p "$PASSWORD" scp -o StrictHostKeyChecking=no -o ConnectTimeout=30 -P $PORT package.json root@$SERVER:/var/www/ai-chatbot/ echo "" echo "步骤 2: 安装依赖..." ssh_cmd " cd /var/www/ai-chatbot export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\" echo '安装依赖包...' pnpm install 2>&1 | tail -20 " echo "" echo "步骤 3: 运行数据库迁移..." ssh_cmd " cd /var/www/ai-chatbot export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\" pnpm db:migrate 2>&1 | grep -E '(Migrations|Error|✅|❌)' || echo '迁移完成' " echo "" echo "步骤 4: 构建项目..." ssh_cmd " cd /var/www/ai-chatbot export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\" echo '开始构建...' pnpm build 2>&1 | tail -50 " echo "" echo "步骤 5: 启动/重启应用..." ssh_cmd " cd /var/www/ai-chatbot export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\" # 停止旧进程 pm2 delete ai-chatbot 2>/dev/null || true # 启动应用 pm2 start ecosystem.config.js pm2 save echo '应用已启动' " echo "" echo "步骤 6: 配置 Nginx..." ssh_cmd " cat > /etc/nginx/sites-available/ai-chatbot << 'NGINX' server { listen 80; server_name $SERVER; location / { proxy_pass http://localhost:3000; 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; proxy_cache_bypass \$http_upgrade; proxy_read_timeout 300s; proxy_connect_timeout 75s; } } NGINX ln -sf /etc/nginx/sites-available/ai-chatbot /etc/nginx/sites-enabled/ rm -f /etc/nginx/sites-enabled/default nginx -t && systemctl restart nginx echo 'Nginx 配置完成' " echo "" echo "步骤 7: 检查部署状态..." ssh_cmd " echo '=== PM2 状态 ===' pm2 status echo '' echo '=== 应用信息 ===' pm2 info ai-chatbot 2>/dev/null | head -15 || echo '应用未运行' echo '' echo '=== 端口监听 ===' netstat -tulpn | grep -E ':(80|3000)' || ss -tulpn | grep -E ':(80|3000)' || echo '端口检查完成' echo '' echo '=== Nginx 状态 ===' systemctl status nginx --no-pager -l | head -5 " echo "" echo "==========================================" echo "部署完成!" echo "==========================================" echo "" echo "访问地址: http://$SERVER" echo "管理员设置: http://$SERVER/admin/settings" echo "" echo "查看日志: ssh -p $PORT $USER@$SERVER 'pm2 logs ai-chatbot'" echo "查看状态: ssh -p $PORT $USER@$SERVER 'pm2 status'" echo ""