|
|
@@ -13,116 +13,33 @@ GIT_REPO_WITH_AUTH="https://${username}:${password}@git.izouma.com/wuyi/tweb-api
|
|
|
|
|
|
echo "🚀 开始部署 $PROJECT_NAME..."
|
|
|
|
|
|
-# 检查项目目录是否存在
|
|
|
-if [ ! -d "$PROJECT_DIR" ]; then
|
|
|
- echo "📥 克隆项目..."
|
|
|
- if git clone -b main "$GIT_REPO_WITH_AUTH" "$PROJECT_DIR"; then
|
|
|
- echo "✅ 项目克隆成功"
|
|
|
- else
|
|
|
- echo "❌ 项目克隆失败"
|
|
|
- exit 1
|
|
|
- fi
|
|
|
-fi
|
|
|
-
|
|
|
# 进入项目目录
|
|
|
cd "$PROJECT_DIR"
|
|
|
|
|
|
-# 检查是否是 Git 仓库
|
|
|
-if [ ! -d ".git" ]; then
|
|
|
- echo "❌ 项目目录不是 Git 仓库"
|
|
|
- exit 1
|
|
|
-fi
|
|
|
-
|
|
|
-# 检查 package.json 是否存在
|
|
|
-if [ ! -f "package.json" ]; then
|
|
|
- echo "❌ package.json 文件不存在"
|
|
|
- exit 1
|
|
|
-fi
|
|
|
-
|
|
|
-# Git 操作函数
|
|
|
-handle_git_operations() {
|
|
|
- git remote set-url origin "$GIT_REPO_WITH_AUTH"
|
|
|
-
|
|
|
- # 修复 Git 权限问题
|
|
|
- git config --global --add safe.directory "$PROJECT_DIR"
|
|
|
-
|
|
|
- if git pull origin main; then
|
|
|
- echo "✅ 代码更新成功"
|
|
|
- echo "📝 当前提交: $(git log --oneline -1)"
|
|
|
- else
|
|
|
- echo "❌ Git 拉取失败"
|
|
|
- echo "是否继续部署(跳过代码拉取)?(y/N)"
|
|
|
- read -r response
|
|
|
- if [[ "$response" != "y" && "$response" != "Y" ]]; then
|
|
|
- echo "部署已取消"
|
|
|
- exit 1
|
|
|
- fi
|
|
|
- fi
|
|
|
-}
|
|
|
+# 设置 Git 远程仓库 URL(包含认证信息)
|
|
|
+echo "🔧 配置 Git 远程仓库..."
|
|
|
+git remote set-url origin "$GIT_REPO_WITH_AUTH"
|
|
|
|
|
|
-handle_git_operations
|
|
|
-
|
|
|
-# 停止现有的 PM2 进程并清理配置
|
|
|
-echo "🛑 停止并清理 PM2 应用..."
|
|
|
-pm2 delete tweb-api 2>/dev/null || true
|
|
|
-pm2 save 2>/dev/null || true
|
|
|
-pm2 kill 2>/dev/null || true
|
|
|
-
|
|
|
-# 删除 package-lock.json 以避免包管理器冲突
|
|
|
-if [ -f "package-lock.json" ]; then
|
|
|
- echo "🗑️ 删除 package-lock.json 以避免包管理器冲突..."
|
|
|
- rm package-lock.json
|
|
|
-fi
|
|
|
+# Git 拉取最新代码
|
|
|
+echo "📥 拉取最新代码..."
|
|
|
+git pull origin main
|
|
|
|
|
|
# 安装依赖
|
|
|
echo "📦 安装依赖..."
|
|
|
yarn install
|
|
|
|
|
|
-# 清理旧的构建文件
|
|
|
-rm -rf dist
|
|
|
-
|
|
|
# 构建项目
|
|
|
echo "🔨 构建项目..."
|
|
|
yarn build
|
|
|
|
|
|
-# 检查构建是否成功
|
|
|
-if [ ! -f "dist/server.js" ]; then
|
|
|
- echo "❌ 构建失败: dist/server.js 文件不存在"
|
|
|
- exit 1
|
|
|
-fi
|
|
|
-
|
|
|
-echo "✅ 构建成功,文件存在: dist/server.js"
|
|
|
-
|
|
|
-# 显示关键文件内容用于调试
|
|
|
-echo "🔍 检查 database.ts 配置..."
|
|
|
-if [ -f "dist/config/database.js" ]; then
|
|
|
- echo "📄 dist/config/database.js 存在"
|
|
|
- grep -A 10 -B 5 "entities" dist/config/database.js || echo "未找到 entities 配置"
|
|
|
-else
|
|
|
- echo "❌ dist/config/database.js 不存在"
|
|
|
-fi
|
|
|
-
|
|
|
-# 替换配置文件
|
|
|
+# 复制配置文件
|
|
|
+echo "📋 复制配置文件..."
|
|
|
cp .env.production dist/.env
|
|
|
cp package.json dist/package.json
|
|
|
|
|
|
-# 设置环境变量
|
|
|
-export NODE_ENV=production
|
|
|
-
|
|
|
-# 检查 PM2 应用是否已存在并启动
|
|
|
-if pm2 list | grep -q "tweb-api"; then
|
|
|
- echo "🔄 重启现有的 PM2 应用..."
|
|
|
- pm2 delete tweb-api
|
|
|
- NODE_ENV=production pm2 start dist/server.js --name tweb-api
|
|
|
-else
|
|
|
- echo "🚀 启动新的 PM2 应用..."
|
|
|
- echo "📁 启动文件: $(pwd)/dist/server.js"
|
|
|
- NODE_ENV=production pm2 start dist/server.js --name tweb-api
|
|
|
-fi
|
|
|
-pm2 save
|
|
|
+# 重启 PM2 应用
|
|
|
+echo "🔄 重启 PM2 应用..."
|
|
|
+pm2 restart tweb-api
|
|
|
|
|
|
echo "✅ 部署完成!"
|
|
|
-pm2 status
|
|
|
-
|
|
|
-echo "📋 显示日志(按 Ctrl+C 退出):"
|
|
|
-pm2 logs tweb-api
|
|
|
+pm2 status
|