完成前端部署内容
This commit is contained in:
129
.agent/workflows/deploy-workflow.md
Normal file
129
.agent/workflows/deploy-workflow.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# 项目部署流程设计文档
|
||||
|
||||
## 概述
|
||||
|
||||
本文档描述了项目管理模块与 1Panel 服务器的集成方案,采用**前后端分离架构**:
|
||||
|
||||
- **前端**:负责 UI 交互,调用后端 API
|
||||
- **后端**:存储项目数据到数据库,调用 1Panel API 执行部署
|
||||
|
||||
## 架构设计
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────┐
|
||||
│ 架构示意图 │
|
||||
├─────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 前端 │──────│ 后端 API │──────│ 1Panel │ │
|
||||
│ │ (Vue.js) │ HTTP │ (Spring) │ HTTP │ 服务器 │ │
|
||||
│ └─────────────┘ └──────────────┘ └──────────────┘ │
|
||||
│ │ │ │
|
||||
│ │ ▼ │
|
||||
│ │ ┌──────────┐ │
|
||||
│ │ │ MySQL │ │
|
||||
│ │ │ 数据库 │ │
|
||||
│ │ └──────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 后端实现
|
||||
|
||||
### 1. 实体类扩展 (`PlatformProject.java`)
|
||||
|
||||
新增字段:
|
||||
|
||||
- `shortName` - 项目简称
|
||||
- `projectGroup` - 项目分组
|
||||
- `logo` - Logo 文字
|
||||
- `color` - 主题色
|
||||
- `domain` - 绑定域名
|
||||
- `enableHttps` - 是否启用 HTTPS
|
||||
- `panelWebsiteId` - 1Panel 网站 ID
|
||||
- `panelSslId` - 1Panel 证书 ID
|
||||
- `lastDeployTime` - 最后部署时间
|
||||
- `lastDeployStatus` - 最后部署状态
|
||||
- `lastDeployMessage` - 最后部署消息
|
||||
|
||||
### 2. DTO 类
|
||||
|
||||
- `DeployRequest.java` - 部署请求参数
|
||||
- `DeployResult.java` - 部署结果
|
||||
|
||||
### 3. 服务类
|
||||
|
||||
- `OnePanelService.java` - 1Panel 服务接口
|
||||
- `OnePanelServiceImpl.java` - 1Panel 服务实现
|
||||
|
||||
### 4. 控制器 (`PlatformProjectController.java`)
|
||||
|
||||
新增接口:
|
||||
| 接口 | 方法 | 说明 |
|
||||
|------|------|------|
|
||||
| `/platform/project/deploy` | POST | 部署项目 |
|
||||
| `/platform/project/{serverId}/websites` | GET | 获取网站列表 |
|
||||
| `/platform/project/{serverId}/certificates` | GET | 获取证书列表 |
|
||||
| `/platform/project/{serverId}/acme-accounts` | GET | 获取 Acme 账户 |
|
||||
| `/platform/project/{serverId}/dns-accounts` | GET | 获取 DNS 账户 |
|
||||
|
||||
### 5. 数据库迁移
|
||||
|
||||
执行 `src/main/resources/db/migration_project_deploy.sql`
|
||||
|
||||
## 前端实现
|
||||
|
||||
### 1. API 封装 (`src/api/project.ts`)
|
||||
|
||||
- `deployProject` - 部署项目
|
||||
- `getServerAcmeAccounts` - 获取 Acme 账户
|
||||
- `getServerDnsAccounts` - 获取 DNS 账户
|
||||
|
||||
### 2. 项目管理页面
|
||||
|
||||
- 部署按钮
|
||||
- 部署确认弹窗
|
||||
- 部署进度抽屉
|
||||
|
||||
## 完整部署流程
|
||||
|
||||
1. 前端:用户点击"部署"按钮
|
||||
2. 前端:打开部署确认弹窗,配置 HTTPS 选项
|
||||
3. 前端:调用后端 POST /platform/project/deploy
|
||||
4. 后端:从数据库获取项目和服务器信息
|
||||
5. 后端:检查/创建网站
|
||||
6. 后端:如启用 HTTPS,检查/申请证书
|
||||
7. 后端:配置网站 HTTPS
|
||||
8. 后端:更新项目状态到数据库
|
||||
9. 前端:显示部署结果
|
||||
|
||||
## 1Panel Token 生成算法
|
||||
|
||||
```java
|
||||
// Token = md5('1panel' + API-Key + UnixTimestamp)
|
||||
String rawToken = "1panel" + apiKey + timestamp;
|
||||
String token = DigestUtils.md5DigestAsHex(rawToken.getBytes());
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
### 服务器配置
|
||||
|
||||
在 `platform_server` 表中配置:
|
||||
|
||||
- `panel_port` - 1Panel 端口(默认 42588)
|
||||
- `panel_api_key` - 1Panel API 密钥
|
||||
|
||||
### 项目配置
|
||||
|
||||
创建项目时配置:
|
||||
|
||||
- `domain` - 绑定域名
|
||||
- `serverId` - 目标服务器
|
||||
- `deployPath` - 部署路径
|
||||
|
||||
## 安全注意事项
|
||||
|
||||
1. API 密钥存储在后端数据库,不暴露给前端
|
||||
2. 每次请求生成新 Token,防止重放攻击
|
||||
3. 建议在 1Panel 中配置 API 白名单
|
||||
Reference in New Issue
Block a user