4.8 KiB
4.8 KiB
项目部署流程设计文档
概述
本文档描述了项目管理模块与 1Panel 服务器的集成方案,采用前后端分离架构:
- 前端:负责 UI 交互,调用后端 API
- 后端:存储项目数据到数据库,调用 1Panel API 执行部署
架构设计
┌─────────────────────────────────────────────────────────────────────────┐
│ 架构示意图 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 前端 │──────│ 后端 API │──────│ 1Panel │ │
│ │ (Vue.js) │ HTTP │ (Spring) │ HTTP │ 服务器 │ │
│ └─────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │
│ │ ▼ │
│ │ ┌──────────┐ │
│ │ │ MySQL │ │
│ │ │ 数据库 │ │
│ │ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
后端实现
1. 实体类扩展 (PlatformProject.java)
新增字段:
shortName- 项目简称projectGroup- 项目分组logo- Logo 文字color- 主题色domain- 绑定域名enableHttps- 是否启用 HTTPSpanelWebsiteId- 1Panel 网站 IDpanelSslId- 1Panel 证书 IDlastDeployTime- 最后部署时间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. 项目管理页面
- 部署按钮
- 部署确认弹窗
- 部署进度抽屉
完整部署流程
- 前端:用户点击"部署"按钮
- 前端:打开部署确认弹窗,配置 HTTPS 选项
- 前端:调用后端 POST /platform/project/deploy
- 后端:从数据库获取项目和服务器信息
- 后端:检查/创建网站
- 后端:如启用 HTTPS,检查/申请证书
- 后端:配置网站 HTTPS
- 后端:更新项目状态到数据库
- 前端:显示部署结果
1Panel Token 生成算法
// 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- 部署路径
安全注意事项
- API 密钥存储在后端数据库,不暴露给前端
- 每次请求生成新 Token,防止重放攻击
- 建议在 1Panel 中配置 API 白名单