| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #!/bin/bash
- # 设置错误时退出
- set -e
- # 配置变量
- PROJECT_NAME="tweb-api"
- PROJECT_DIR="/var/www/$PROJECT_NAME"
- username="wuyi"
- password="hXE8ZjQ^Q46V7n"
- GIT_REPO="https://git.izouma.com/wuyi/tweb-api.git"
- GIT_REPO_WITH_AUTH="https://${username}:${password}@git.izouma.com/wuyi/tweb-api.git"
- 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"
-
- if git pull origin main; then
- echo "✅ 代码更新成功"
- else
- echo "❌ Git 拉取失败"
- echo "是否继续部署(跳过代码拉取)?(y/N)"
- read -r response
- if [[ ! "$response" =~ ^[Yy]$ ]]; then
- echo "部署已取消"
- exit 1
- fi
- fi
- }
- handle_git_operations
- # 停止现有的 PM2 进程
- pm2 delete tweb-api 2>/dev/null || true
- # 删除 package-lock.json 以避免包管理器冲突
- if [ -f "package-lock.json" ]; then
- echo "🗑️ 删除 package-lock.json 以避免包管理器冲突..."
- rm package-lock.json
- fi
- # 安装依赖
- echo "📦 安装依赖..."
- yarn install
- # 清理旧的构建文件
- rm -rf dist
- # 构建项目
- echo "🔨 构建项目..."
- yarn build
- # 检查构建是否成功
- if [ ! -f "dist/server.js" ]; then
- echo "❌ 构建失败: dist/server.js 文件不存在"
- exit 1
- fi
- # 替换配置文件
- cp .env.production dist/.env
- cp package.json dist/package.json
- # 检查 PM2 应用是否已存在并启动
- if pm2 list | grep -q "tweb-api"; then
- echo "🔄 重启现有的 PM2 应用..."
- pm2 restart tweb-api
- else
- echo "🚀 启动新的 PM2 应用..."
- pm2 start dist/server.js --name tweb-api
- fi
- pm2 save
- echo "✅ 部署完成!"
- pm2 status
- echo "📋 显示日志(按 Ctrl+C 退出):"
- pm2 logs tweb-api
|