| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- #!/bin/bash
- # 设置错误时退出
- set -e
- # 配置变量
- PROJECT_NAME="tweb-api"
- PROJECT_DIR="/var/www/$PROJECT_NAME"
- GIT_REPO="https://wuiii@foxmail.com:hXE8ZjQ^Q46V7n@git.izouma.com/wuyi/tweb-api.git"
- echo "🚀 开始完整部署 $PROJECT_NAME..."
- # 检查项目目录是否存在
- if [ ! -d "$PROJECT_DIR" ]; then
- echo "📁 项目目录不存在,开始克隆..."
-
- # 克隆项目
- echo "📥 克隆项目到 $PROJECT_DIR..."
- if git clone "$GIT_REPO" "$PROJECT_DIR"; then
- echo "✅ 项目克隆成功"
- else
- echo "❌ 项目克隆失败"
- echo "💡 请检查:"
- echo " 1. Git 仓库地址是否正确"
- echo " 2. 是否有访问权限"
- echo " 3. 网络连接是否正常"
- exit 1
- fi
- else
- echo "✅ 项目目录已存在: $PROJECT_DIR"
- 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() {
- echo "📥 处理 Git 操作..."
-
- # 固定使用 main 分支
- echo "当前分支: main"
-
- # 尝试拉取最新代码
- echo "🔄 拉取最新代码..."
- if git pull origin main; then
- echo "✅ Git 拉取成功"
- else
- echo "❌ Git 拉取失败,请检查网络连接和认证信息"
- echo "💡 提示:确保已配置 Git 认证(用户名密码或 SSH 密钥)"
- echo "是否继续部署(跳过代码拉取)?(y/N)"
- read -r response
- if [[ ! "$response" =~ ^[Yy]$ ]]; then
- echo "部署已取消"
- exit 1
- fi
- echo "⚠️ 继续部署,使用当前代码..."
- fi
- }
- # 执行 Git 操作
- handle_git_operations
- # 停止现有的 PM2 进程(如果存在)
- echo "📦 停止现有的 PM2 进程..."
- pm2 delete tweb-api 2>/dev/null || echo "没有找到现有的 tweb-api 进程"
- # 安装依赖(如果需要)
- echo "📦 检查并安装依赖..."
- yarn install
- # 清理旧的构建文件
- echo "🧹 清理旧的构建文件..."
- rm -rf dist
- # 构建项目
- echo "🔨 构建项目..."
- yarn build
- # 检查构建是否成功
- if [ ! -f "dist/app.js" ]; then
- echo "❌ 构建失败:dist/app.js 文件不存在"
- exit 1
- fi
- # 启动 PM2
- echo "🚀 启动 PM2..."
- pm2 start dist/app.js --name tweb-api
- # 保存 PM2 配置
- echo "💾 保存 PM2 配置..."
- pm2 save
- # 显示状态
- echo "📊 PM2 状态:"
- 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 退出):"
- pm2 logs tweb-api
|