#!/bin/bash # ============================================ # 部署课程生成重构(支持三种模式) # ============================================ # 使用方法: # ssh root@120.55.112.195 # cd /var/www/wildgrowth-backend/backend && bash deploy/deploy-course-generation-refactor.sh # ============================================ set -e GIT_ROOT="/var/www/wildgrowth-backend" APP_ROOT="/var/www/wildgrowth-backend/backend" BRANCH=${1:-main} echo "═══════════════════════════════════════════════════════════" echo " 🚀 开始部署课程生成重构" echo " 📦 部署分支: $BRANCH" echo "═══════════════════════════════════════════════════════════" echo "" if [ ! -d "$APP_ROOT" ]; then echo "❌ 错误: $APP_ROOT 不存在" exit 1 fi if [ ! -f "$APP_ROOT/.env" ]; then echo "❌ 错误: $APP_ROOT/.env 不存在" exit 1 fi # 1. 拉取最新代码 echo "📥 步骤 1: 拉取最新代码..." (cd "$GIT_ROOT" && git fetch origin) (cd "$GIT_ROOT" && git checkout $BRANCH && git pull origin $BRANCH) echo "✅ 代码已更新 (分支: $BRANCH)" echo "" # 2. 安装依赖 echo "📦 步骤 2: 安装依赖..." (cd "$APP_ROOT" && npm install) echo "✅ 依赖已安装" echo "" # 3. Prisma generate echo "🔧 步骤 3: Prisma generate..." (cd "$APP_ROOT" && npx prisma generate) echo "✅ Prisma generate 完成" echo "" # 4. 数据库迁移 echo "🗄️ 步骤 4: 数据库迁移..." MIGRATIONS="$APP_ROOT/prisma/migrations" if [ -d "$MIGRATIONS" ]; then for d in "$MIGRATIONS"/*/; do [ -d "$d" ] || continue if [ ! -f "${d}migration.sql" ]; then echo " 删除残缺 migration 目录: $(basename "$d")" rm -rf "$d" fi done fi (cd "$APP_ROOT" && npx prisma migrate deploy) echo "✅ 数据库迁移完成" echo "" # 5. 迁移Prompt配置 echo "📝 步骤 5: 迁移Prompt配置..." (cd "$APP_ROOT" && npx ts-node scripts/migrate-prompt-configs.ts) echo "✅ Prompt配置迁移完成" echo "" # 6. 构建 echo "🔨 步骤 6: 构建项目..." (cd "$APP_ROOT" && npm run build) echo "✅ 项目已构建" echo "" # 7. 重启服务 echo "🔄 步骤 7: 重启服务..." pm2 restart wildgrowth-api echo "✅ 服务已重启" echo "" # 8. 健康检查 echo "🏥 步骤 8: 健康检查..." sleep 3 if curl -sf http://localhost:3000/health > /dev/null; then echo "✅ 健康检查通过" (cd "$GIT_ROOT" && git rev-parse HEAD) > "$APP_ROOT/.deploy-last" echo " (已记录到 .deploy-last,供 rollback 使用)" else echo "❌ 健康检查失败: curl http://localhost:3000/health 未返回成功" echo " 请检查: pm2 logs wildgrowth-api" exit 1 fi echo "" # 9. 状态与日志 echo "📊 步骤 9: 服务状态" pm2 status wildgrowth-api echo "📝 最近日志:" pm2 logs wildgrowth-api --lines 20 --nostream echo "" echo "═══════════════════════════════════════════════════════════" echo " ✅ 部署完成!分支: $BRANCH" echo "═══════════════════════════════════════════════════════════" echo "💡 回滚: bash deploy/deploy-from-github.sh rollback" echo ""