130 lines
3.2 KiB
Bash
Executable File
130 lines
3.2 KiB
Bash
Executable File
#!/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 ""
|
|
|