|
@@ -11,46 +11,32 @@ password="hXE8ZjQ^Q46V7n"
|
|
|
GIT_REPO="https://git.izouma.com/wuyi/tweb-api.git"
|
|
GIT_REPO="https://git.izouma.com/wuyi/tweb-api.git"
|
|
|
GIT_REPO_WITH_AUTH="https://${username}:${password}@git.izouma.com/wuyi/tweb-api.git"
|
|
GIT_REPO_WITH_AUTH="https://${username}:${password}@git.izouma.com/wuyi/tweb-api.git"
|
|
|
|
|
|
|
|
-echo "🚀 开始完整部署 $PROJECT_NAME..."
|
|
|
|
|
|
|
+echo "🚀 开始部署 $PROJECT_NAME..."
|
|
|
|
|
|
|
|
# 检查并安装 yarn
|
|
# 检查并安装 yarn
|
|
|
check_and_install_yarn() {
|
|
check_and_install_yarn() {
|
|
|
- echo "🔍 检查 yarn 是否已安装..."
|
|
|
|
|
if ! command -v yarn &> /dev/null; then
|
|
if ! command -v yarn &> /dev/null; then
|
|
|
- echo "📦 yarn 未安装,开始安装..."
|
|
|
|
|
|
|
+ echo "📦 安装 yarn..."
|
|
|
if command -v npm &> /dev/null; then
|
|
if command -v npm &> /dev/null; then
|
|
|
- echo "使用 npm 安装 yarn..."
|
|
|
|
|
npm install -g yarn
|
|
npm install -g yarn
|
|
|
else
|
|
else
|
|
|
- echo "❌ npm 也未安装,请先安装 Node.js 和 npm"
|
|
|
|
|
|
|
+ echo "❌ 请先安装 Node.js 和 npm"
|
|
|
exit 1
|
|
exit 1
|
|
|
fi
|
|
fi
|
|
|
- else
|
|
|
|
|
- echo "✅ yarn 已安装"
|
|
|
|
|
fi
|
|
fi
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-# 检查并安装 yarn
|
|
|
|
|
check_and_install_yarn
|
|
check_and_install_yarn
|
|
|
|
|
|
|
|
# 检查项目目录是否存在
|
|
# 检查项目目录是否存在
|
|
|
if [ ! -d "$PROJECT_DIR" ]; then
|
|
if [ ! -d "$PROJECT_DIR" ]; then
|
|
|
- echo "📁 项目目录不存在,开始克隆..."
|
|
|
|
|
-
|
|
|
|
|
- # 克隆项目
|
|
|
|
|
- echo "📥 克隆项目到 $PROJECT_DIR..."
|
|
|
|
|
|
|
+ echo "📥 克隆项目..."
|
|
|
if git clone -b main "$GIT_REPO_WITH_AUTH" "$PROJECT_DIR"; then
|
|
if git clone -b main "$GIT_REPO_WITH_AUTH" "$PROJECT_DIR"; then
|
|
|
echo "✅ 项目克隆成功"
|
|
echo "✅ 项目克隆成功"
|
|
|
else
|
|
else
|
|
|
echo "❌ 项目克隆失败"
|
|
echo "❌ 项目克隆失败"
|
|
|
- echo "💡 请检查:"
|
|
|
|
|
- echo " 1. Git 仓库地址是否正确"
|
|
|
|
|
- echo " 2. 是否有访问权限"
|
|
|
|
|
- echo " 3. 网络连接是否正常"
|
|
|
|
|
exit 1
|
|
exit 1
|
|
|
fi
|
|
fi
|
|
|
-else
|
|
|
|
|
- echo "✅ 项目目录已存在: $PROJECT_DIR"
|
|
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
# 进入项目目录
|
|
# 进入项目目录
|
|
@@ -58,88 +44,63 @@ cd "$PROJECT_DIR"
|
|
|
|
|
|
|
|
# 检查是否是 Git 仓库
|
|
# 检查是否是 Git 仓库
|
|
|
if [ ! -d ".git" ]; then
|
|
if [ ! -d ".git" ]; then
|
|
|
- echo "❌ 错误:项目目录不是 Git 仓库"
|
|
|
|
|
|
|
+ echo "❌ 项目目录不是 Git 仓库"
|
|
|
exit 1
|
|
exit 1
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
# 检查 package.json 是否存在
|
|
# 检查 package.json 是否存在
|
|
|
if [ ! -f "package.json" ]; then
|
|
if [ ! -f "package.json" ]; then
|
|
|
- echo "❌ 错误:package.json 文件不存在"
|
|
|
|
|
|
|
+ echo "❌ package.json 文件不存在"
|
|
|
exit 1
|
|
exit 1
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
# Git 操作函数
|
|
# Git 操作函数
|
|
|
handle_git_operations() {
|
|
handle_git_operations() {
|
|
|
- echo "📥 处理 Git 操作..."
|
|
|
|
|
-
|
|
|
|
|
- # 固定使用 main 分支
|
|
|
|
|
- echo "当前分支: main"
|
|
|
|
|
-
|
|
|
|
|
- # 临时设置远程 URL 包含认证信息
|
|
|
|
|
- echo "🔐 设置 Git 认证..."
|
|
|
|
|
git remote set-url origin "$GIT_REPO_WITH_AUTH"
|
|
git remote set-url origin "$GIT_REPO_WITH_AUTH"
|
|
|
|
|
|
|
|
- # 尝试拉取最新代码
|
|
|
|
|
- echo "🔄 拉取最新代码..."
|
|
|
|
|
if git pull origin main; then
|
|
if git pull origin main; then
|
|
|
- echo "✅ Git 拉取成功"
|
|
|
|
|
|
|
+ echo "✅ 代码更新成功"
|
|
|
else
|
|
else
|
|
|
- echo "❌ Git 拉取失败,请检查网络连接和认证信息"
|
|
|
|
|
- echo "💡 提示:确保已配置 Git 认证(用户名密码或 SSH 密钥)"
|
|
|
|
|
|
|
+ echo "❌ Git 拉取失败"
|
|
|
echo "是否继续部署(跳过代码拉取)?(y/N)"
|
|
echo "是否继续部署(跳过代码拉取)?(y/N)"
|
|
|
read -r response
|
|
read -r response
|
|
|
if [[ ! "$response" =~ ^[Yy]$ ]]; then
|
|
if [[ ! "$response" =~ ^[Yy]$ ]]; then
|
|
|
echo "部署已取消"
|
|
echo "部署已取消"
|
|
|
exit 1
|
|
exit 1
|
|
|
fi
|
|
fi
|
|
|
- echo "⚠️ 继续部署,使用当前代码..."
|
|
|
|
|
fi
|
|
fi
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-# 执行 Git 操作
|
|
|
|
|
handle_git_operations
|
|
handle_git_operations
|
|
|
|
|
|
|
|
-# 停止现有的 PM2 进程(如果存在)
|
|
|
|
|
-echo "📦 停止现有的 PM2 进程..."
|
|
|
|
|
-pm2 delete tweb-api 2>/dev/null || echo "没有找到现有的 tweb-api 进程"
|
|
|
|
|
|
|
+# 停止现有的 PM2 进程
|
|
|
|
|
+pm2 delete tweb-api 2>/dev/null || true
|
|
|
|
|
|
|
|
-# 安装依赖(如果需要)
|
|
|
|
|
-echo "📦 检查并安装依赖..."
|
|
|
|
|
|
|
+# 安装依赖
|
|
|
yarn install
|
|
yarn install
|
|
|
|
|
|
|
|
# 清理旧的构建文件
|
|
# 清理旧的构建文件
|
|
|
-echo "🧹 清理旧的构建文件..."
|
|
|
|
|
rm -rf dist
|
|
rm -rf dist
|
|
|
|
|
|
|
|
# 构建项目
|
|
# 构建项目
|
|
|
-echo "🔨 构建项目..."
|
|
|
|
|
yarn build
|
|
yarn build
|
|
|
|
|
|
|
|
# 检查构建是否成功
|
|
# 检查构建是否成功
|
|
|
if [ ! -f "dist/app.js" ]; then
|
|
if [ ! -f "dist/app.js" ]; then
|
|
|
- echo "❌ 构建失败:dist/app.js 文件不存在"
|
|
|
|
|
|
|
+ echo "❌ 构建失败: dist/app.js 文件不存在"
|
|
|
exit 1
|
|
exit 1
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
|
|
+# 替换配置文件
|
|
|
|
|
+cp .env.production dist/.env
|
|
|
|
|
+cp package.json dist/package.json
|
|
|
|
|
+
|
|
|
# 启动 PM2
|
|
# 启动 PM2
|
|
|
-echo "🚀 启动 PM2..."
|
|
|
|
|
pm2 start dist/app.js --name tweb-api
|
|
pm2 start dist/app.js --name tweb-api
|
|
|
-
|
|
|
|
|
-# 保存 PM2 配置
|
|
|
|
|
-echo "💾 保存 PM2 配置..."
|
|
|
|
|
pm2 save
|
|
pm2 save
|
|
|
|
|
|
|
|
-# 显示状态
|
|
|
|
|
-echo "📊 PM2 状态:"
|
|
|
|
|
|
|
+echo "✅ 部署完成!"
|
|
|
pm2 status
|
|
pm2 status
|
|
|
|
|
|
|
|
-echo "✅ 完整部署完成!"
|
|
|
|
|
-echo "📁 项目路径: $PROJECT_DIR"
|
|
|
|
|
-echo "📝 查看日志:pm2 logs tweb-api"
|
|
|
|
|
-echo "🔄 重启服务:pm2 restart tweb-api"
|
|
|
|
|
-echo "⏹️ 停止服务:pm2 stop tweb-api"
|
|
|
|
|
-
|
|
|
|
|
-# 自动展示日志
|
|
|
|
|
-echo ""
|
|
|
|
|
-echo "📋 持续显示日志(按 Ctrl+C 退出):"
|
|
|
|
|
|
|
+echo "📋 显示日志(按 Ctrl+C 退出):"
|
|
|
pm2 logs tweb-api
|
|
pm2 logs tweb-api
|