145 lines
4.3 KiB
Markdown
145 lines
4.3 KiB
Markdown
# 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`
|