# Gitea Actions 部署配置说明 ## 文件说明 - `online-deploy.yml` - 生产环境部署 workflow(main 分支和 tag) - `develop-deploy.yml` - 开发环境部署 workflow(develop 分支) ## 配置步骤 ### 1. 准备 SSH 密钥 在服务器上生成 SSH 密钥对(如果还没有): ```bash ssh-keygen -t rsa -b 4096 -C "gitea-actions-deploy" -f ~/.ssh/gitea_deploy_key ``` 将公钥添加到服务器的 `~/.ssh/authorized_keys`: ```bash cat ~/.ssh/gitea_deploy_key.pub >> ~/.ssh/authorized_keys ``` ### 2. 在 Gitea 中配置 Secrets 1. 进入仓库设置 → Secrets 2. 添加以下 Secret: - **名称**: `SSH_PRIVATE_KEY` - **值**: 服务器上 `~/.ssh/gitea_deploy_key` 的**私钥内容**(整个文件内容,包括 `-----BEGIN` 和 `-----END` 行) ### 3. 确保服务器环境 确保服务器上已安装: - Node.js 和 npm - PM2 - Git - Prisma CLI(通过 npm 全局安装或使用 npx) ### 4. 触发部署 #### 生产环境部署(online-deploy.yml) **自动触发:** - 推送到 `main` 分支 - 推送标签(格式:`v*`,如 `v1.0.0`) **手动触发:** 1. 进入仓库的 Actions 页面 2. 选择 "生产环境部署" workflow 3. 点击 "Run workflow" 4. 选择要部署的分支或标签 5. 点击 "Run workflow" 开始部署 #### 开发环境部署(develop-deploy.yml) **自动触发:** - 推送到 `develop` 分支 **手动触发:** 1. 进入仓库的 Actions 页面 2. 选择 "开发环境部署" workflow 3. 点击 "Run workflow" 4. 选择要部署的分支(默认 develop) 5. 点击 "Run workflow" 开始部署 ## Workflow 执行流程 1. ✅ 检出代码 2. ✅ 设置部署分支 3. ✅ 配置 SSH 连接 4. ✅ 测试 SSH 连接 5. ✅ 执行部署脚本(调用服务器上的 `deploy-from-github.sh`) - 拉取最新代码 - 安装依赖 - Prisma generate - 数据库迁移 - 迁移 Prompt 配置(如果存在) - 构建项目 - 重启 PM2 服务 - 健康检查 6. ✅ 清理 SSH 密钥 7. ✅ 部署完成通知 ## 回滚 如果部署出现问题,可以通过 SSH 连接到服务器手动回滚: ```bash ssh root@120.55.112.195 cd /var/www/wildgrowth-backend/backend bash deploy/deploy-from-github.sh rollback ``` ## 环境配置说明 ### 生产环境(online-deploy.yml) - **PM2 服务名**: `wildgrowth-api` - **健康检查**: `http://localhost:3000/health` - **部署路径**: `/var/www/wildgrowth-backend/backend` ### 开发环境(develop-deploy.yml) - **PM2 服务名**: `wildgrowth-api-dev`(注意:如果开发环境使用不同的服务名,请修改 workflow) - **健康检查**: `http://localhost:3001/health`(注意:如果开发环境使用不同端口,请修改 workflow) - **部署路径**: `/var/www/wildgrowth-backend/backend`(注意:如果开发环境使用不同路径,请修改 workflow) > **提示**: 如果开发环境和生产环境使用相同的服务器但不同的目录或端口,请修改 `develop-deploy.yml` 中的 `APP_ROOT`、`PM2_APP_NAME` 和 `HEALTH_CHECK_URL` 环境变量。 ## 注意事项 1. **SSH 密钥安全**: 确保私钥安全,不要提交到代码仓库 2. **服务器权限**: 确保 SSH 用户有足够的权限执行部署操作 3. **环境变量**: 确保服务器上的 `.env` 文件已正确配置 4. **健康检查**: - 生产环境检查 `http://localhost:3000/health` - 开发环境检查 `http://localhost:3001/health`(如果使用不同端口) 5. **PM2 服务名**: - 生产环境使用 `wildgrowth-api` - 开发环境使用 `wildgrowth-api-dev`(如果使用不同服务名) ## 故障排查 ### SSH 连接失败 - 检查 SSH 私钥是否正确配置在 Gitea Secrets 中 - 检查服务器防火墙是否允许 SSH 连接 - 检查服务器的 `~/.ssh/authorized_keys` 是否包含公钥 ### 部署失败 - 查看 Actions 日志中的详细错误信息 - SSH 到服务器检查:`pm2 logs wildgrowth-api` - 检查服务器磁盘空间:`df -h` - 检查 Node.js 版本:`node -v` ### 健康检查失败 - 检查服务是否正常启动:`pm2 status` - 查看服务日志: - 生产环境:`pm2 logs wildgrowth-api --lines 50` - 开发环境:`pm2 logs wildgrowth-api-dev --lines 50` - 检查端口是否被占用: - 生产环境:`netstat -tlnp | grep 3000` - 开发环境:`netstat -tlnp | grep 3001`