101 lines
3.5 KiB
Bash
101 lines
3.5 KiB
Bash
#!/bin/bash
|
||
# ============================================================
|
||
# 迁移收尾:修 P3015(删残缺 migration 目录)、migrate deploy、启动、健康检查
|
||
# 用法:在服务器上
|
||
# cd /var/www/wildgrowth-backend/backend && bash deploy/scripts/migration-fix-and-start.sh
|
||
# 或(若脚本在 deploy 下):bash deploy/scripts/migration-fix-and-start.sh
|
||
# ============================================================
|
||
|
||
set -e
|
||
|
||
GIT_ROOT="${GIT_ROOT:-/var/www/wildgrowth-backend}"
|
||
APP_ROOT="${APP_ROOT:-/var/www/wildgrowth-backend/backend}"
|
||
MIGRATIONS="$APP_ROOT/prisma/migrations"
|
||
|
||
echo "═══════════════════════════════════════════════════════════"
|
||
echo " 迁移收尾:修复 P3015、migrate、启动、健康检查"
|
||
echo " APP_ROOT=$APP_ROOT"
|
||
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
|
||
|
||
cd "$APP_ROOT"
|
||
|
||
# 1. 删除缺 migration.sql 的目录(解决 P3015)
|
||
echo ""
|
||
echo "1️⃣ 检查 migrations,删除残缺目录..."
|
||
if [ -d "$MIGRATIONS" ]; then
|
||
for d in "$MIGRATIONS"/*/; do
|
||
[ -d "$d" ] || continue
|
||
name=$(basename "$d")
|
||
if [ ! -f "${d}migration.sql" ]; then
|
||
echo " 删除残缺目录(无 migration.sql): $name"
|
||
rm -rf "$d"
|
||
else
|
||
echo " OK: $name"
|
||
fi
|
||
done
|
||
else
|
||
echo " ⚠️ prisma/migrations 不存在,跳过"
|
||
fi
|
||
|
||
# 2. Prisma migrate deploy
|
||
echo ""
|
||
echo "2️⃣ 执行 prisma migrate deploy..."
|
||
npx prisma migrate deploy
|
||
echo "✅ 迁移完成"
|
||
|
||
# 3. 若未 build 则 build(迁移后可能已有 dist,避免重复)
|
||
if [ ! -d "dist" ] || [ ! -f "dist/index.js" ]; then
|
||
echo ""
|
||
echo "3️⃣ 构建..."
|
||
npm run build
|
||
else
|
||
echo ""
|
||
echo "3️⃣ dist 已存在,跳过 build"
|
||
fi
|
||
|
||
# 4. 启动
|
||
echo ""
|
||
echo "4️⃣ 启动服务..."
|
||
if pm2 describe wildgrowth-api >/dev/null 2>&1; then
|
||
pm2 restart wildgrowth-api
|
||
echo " pm2 restart wildgrowth-api"
|
||
else
|
||
# 未在 pm2 中则 start
|
||
pm2 start dist/index.js --name wildgrowth-api
|
||
echo " pm2 start dist/index.js --name wildgrowth-api"
|
||
fi
|
||
|
||
# 5. 健康检查
|
||
echo ""
|
||
echo "5️⃣ 健康检查..."
|
||
sleep 3
|
||
if curl -sf http://localhost:3000/health >/dev/null; then
|
||
echo "✅ 本机 health 正常"
|
||
else
|
||
echo "❌ 本机 health 失败: curl http://localhost:3000/health"
|
||
pm2 logs wildgrowth-api --lines 30 --nostream
|
||
exit 1
|
||
fi
|
||
|
||
# 6. 记录 .deploy-last(若在 Git 根可拿到 HEAD)
|
||
if [ -d "$GIT_ROOT/.git" ]; then
|
||
(cd "$GIT_ROOT" && git rev-parse HEAD) > "$APP_ROOT/.deploy-last"
|
||
echo " .deploy-last 已更新"
|
||
fi
|
||
|
||
echo ""
|
||
echo "═══════════════════════════════════════════════════════════"
|
||
echo " ✅ 迁移收尾完成,服务已启动"
|
||
echo " 请自测: https://api.muststudy.xin/health"
|
||
echo " 回滚: bash deploy/deploy-from-github.sh rollback"
|
||
echo "═══════════════════════════════════════════════════════════"
|