#!/bin/bash set -e # 一键部署:编译产物 + 源码同步到生产服务器 + PM2 重启 # 用法: bash scripts/deploy.sh SSH_HOST="ubuntu@172.81.241.109" DEPLOY_DIR="/opt/pingtai" SSHPASS_VAR="${SSHPASS:-Jubianshuzi@2026}" SSH_CMD="sshpass -p $SSHPASS_VAR ssh -o StrictHostKeyChecking=no" RSYNC_CMD="sshpass -p $SSHPASS_VAR rsync -avz --delete" echo "==========================================" echo " 部署开始: $(date '+%Y-%m-%d %H:%M:%S')" echo "==========================================" # 1. 构建 echo "" echo "[1/5] 构建 API..." npm run build -w apps/api 2>&1 | tail -3 echo " ✅ API 构建完成" echo "[2/5] 构建 Web..." npm run build -w apps/web 2>&1 | tail -3 echo " ✅ Web 构建完成" # 2. 同步编译产物 echo "" echo "[3/5] 同步编译产物..." $RSYNC_CMD apps/api/dist/ $SSH_HOST:$DEPLOY_DIR/apps/api/dist/ 2>&1 | tail -1 echo " ✅ API dist 同步完成" $RSYNC_CMD apps/web/.next/ $SSH_HOST:$DEPLOY_DIR/apps/web/.next/ 2>&1 | tail -1 echo " ✅ Web .next 同步完成" # 3. 同步源码(排除构建产物和依赖) echo "" echo "[4/5] 同步源码..." $RSYNC_CMD \ --exclude='node_modules' \ --exclude='dist' \ --exclude='.next' \ --exclude='*.db' \ --exclude='*.db-journal' \ --exclude='.env' \ --exclude='.env.*' \ --exclude='.git' \ --exclude='.dev-api.pid' \ --exclude='.dev-web.pid' \ --exclude='public/uploads' \ /Users/zou/Documents/02-平台开发/平台助手/ \ $SSH_HOST:$DEPLOY_DIR/ 2>&1 | tail -1 echo " ✅ 源码同步完成" # 4. 重启 PM2 echo "" echo "[5/5] 重启 PM2..." $SSH_CMD $SSH_HOST "source ~/.nvm/nvm.sh 2>/dev/null; pm2 restart pingtai-api pingtai-web --update-env" 2>&1 | tail -3 echo " ✅ PM2 重启完成" echo "" echo "==========================================" echo " 部署完成: $(date '+%Y-%m-%d %H:%M:%S')" echo "=========================================="