deploy.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/bin/bash
  2. # 设置错误时退出
  3. set -e
  4. # 配置变量
  5. PROJECT_NAME="tweb-api"
  6. PROJECT_DIR="/var/www/$PROJECT_NAME"
  7. username="wuyi"
  8. password="hXE8ZjQ^Q46V7n"
  9. GIT_REPO="https://git.izouma.com/wuyi/tweb-api.git"
  10. GIT_REPO_WITH_AUTH="https://${username}:${password}@git.izouma.com/wuyi/tweb-api.git"
  11. echo "🚀 开始部署 $PROJECT_NAME..."
  12. # 检查项目目录是否存在
  13. if [ ! -d "$PROJECT_DIR" ]; then
  14. echo "📥 克隆项目..."
  15. if git clone -b main "$GIT_REPO_WITH_AUTH" "$PROJECT_DIR"; then
  16. echo "✅ 项目克隆成功"
  17. else
  18. echo "❌ 项目克隆失败"
  19. exit 1
  20. fi
  21. fi
  22. # 进入项目目录
  23. cd "$PROJECT_DIR"
  24. # 检查是否是 Git 仓库
  25. if [ ! -d ".git" ]; then
  26. echo "❌ 项目目录不是 Git 仓库"
  27. exit 1
  28. fi
  29. # 检查 package.json 是否存在
  30. if [ ! -f "package.json" ]; then
  31. echo "❌ package.json 文件不存在"
  32. exit 1
  33. fi
  34. # Git 操作函数
  35. handle_git_operations() {
  36. git remote set-url origin "$GIT_REPO_WITH_AUTH"
  37. if git pull origin main; then
  38. echo "✅ 代码更新成功"
  39. else
  40. echo "❌ Git 拉取失败"
  41. echo "是否继续部署(跳过代码拉取)?(y/N)"
  42. read -r response
  43. if [[ ! "$response" =~ ^[Yy]$ ]]; then
  44. echo "部署已取消"
  45. exit 1
  46. fi
  47. fi
  48. }
  49. handle_git_operations
  50. # 停止现有的 PM2 进程
  51. pm2 delete tweb-api 2>/dev/null || true
  52. # 删除 package-lock.json 以避免包管理器冲突
  53. if [ -f "package-lock.json" ]; then
  54. echo "🗑️ 删除 package-lock.json 以避免包管理器冲突..."
  55. rm package-lock.json
  56. fi
  57. # 安装依赖
  58. echo "📦 安装依赖..."
  59. yarn install
  60. # 清理旧的构建文件
  61. rm -rf dist
  62. # 构建项目
  63. echo "🔨 构建项目..."
  64. yarn build
  65. # 检查构建是否成功
  66. if [ ! -f "dist/server.js" ]; then
  67. echo "❌ 构建失败: dist/server.js 文件不存在"
  68. exit 1
  69. fi
  70. # 替换配置文件
  71. cp .env.production dist/.env
  72. cp package.json dist/package.json
  73. # 检查 PM2 应用是否已存在并启动
  74. if pm2 list | grep -q "tweb-api"; then
  75. echo "🔄 重启现有的 PM2 应用..."
  76. pm2 restart tweb-api
  77. else
  78. echo "🚀 启动新的 PM2 应用..."
  79. pm2 start dist/server.js --name tweb-api
  80. fi
  81. pm2 save
  82. echo "✅ 部署完成!"
  83. pm2 status
  84. echo "📋 显示日志(按 Ctrl+C 退出):"
  85. pm2 logs tweb-api