GameServerManager/docs/云构建部署功能说明.md
2025-10-23 20:32:25 +08:00

476 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 云构建部署功能说明
## 功能概述
云构建部署是 GameServerManager3 提供的一项创新功能,通过 GSManager 云端构建服务在云端直接运行核心成功后将其打包,拥有接近百分百的开服成功率,从根源解决因本地环境和问题造成的启动失败等疑难杂症。
### 核心优势
-**高成功率**:云端构建确保环境一致性,避免本地环境问题
-**零配置**无需本地安装Java、Python等依赖环境
-**快速部署**:预构建缓存加速,支持一键部署
-**智能检测**:自动识别启动命令和运行环境
-**实时监控**:可视化构建进度和日志输出
## 功能特性
### 1. 支持的构建平台
目前支持以下构建平台:
- **我的世界原版Java部署** (`msl_Official`)
- Paper
- Purpur
- Fabric
- Spigot
- 等多种主流服务端核心
### 2. 核心功能
#### 2.1 核心列表获取
- 自动从云端获取可用的服务端核心列表
- 支持版本筛选和排序
- 显示核心描述和特性
#### 2.2 构建与缓存
- 智能缓存机制:已构建的版本直接从缓存获取
- 实时构建:未缓存版本在云端实时构建
- 构建限流防止滥用1小时内最多2次构建
#### 2.3 下载与解压
- 后端自动下载zip文件到临时目录
- 自动解压到用户指定的部署目录
- 自动清理临时文件
#### 2.4 启动命令检测
智能检测启动脚本,优先级如下:
**Windows平台**
1. `.\run.bat` / `.\run` (优先)
2. `.\start.bat` (次选)
3. `.\start.bat` (默认)
**Linux/Unix平台**
1. `bash run.sh` / `./run` (优先)
2. `bash start.sh` (次选)
3. `bash start.sh` (默认)
#### 2.5 实例创建
- 自动填充实例名称(核心名称+版本号)
- 自动设置启动命令
- 支持手动修改所有配置
## 使用指南
### 1. 进入云构建部署页面
1. 登录 GameServerManager3
2. 进入"游戏部署"页面
3. 点击"云构建部署"标签页
### 2. 选择构建平台
在左侧面板中:
1. **选择构建平台**:当前支持"我的世界原版Java部署"
2. **选择服务端核心**:从下拉列表中选择(如 Paper、Purpur 等)
3. **选择Minecraft版本**:选择要部署的版本
### 3. 配置部署
在右侧面板中:
1. **设置部署路径**:输入服务端要安装到的目录
- 系统会自动填充默认游戏路径
- 可以手动修改为自定义路径
- 路径会根据选择的核心和版本自动生成
2. **查看统计信息**(可选):
- 显示该核心的总下载次数
- 显示当前版本的下载次数
### 4. 开始构建部署
1. 点击"开始构建部署"按钮
2. 系统会执行以下步骤:
- 检查缓存状态
- 创建构建任务(如需)
- 实时显示构建进度
- 下载文件到后端
- 自动解压到部署目录
- 检测启动命令
3. 观察实时日志输出:
- 查看构建进度百分比
- 查看详细日志信息
- 等待部署完成
### 5. 创建实例
部署完成后:
1. 点击"创建实例"按钮
2. 确认自动填充的信息:
- 实例名称
- 实例描述
- 启动命令
3. 点击"创建实例"完成
## 技术实现
### 前端实现
**位置**`client/src/pages/GameDeploymentPage.tsx`
**核心状态管理**
```typescript
// 云构建相关状态
const [cloudBuildType, setCloudBuildType] = useState('msl_Official')
const [cloudBuildCores, setCloudBuildCores] = useState<any[]>([])
const [selectedCloudCore, setSelectedCloudCore] = useState<any>(null)
const [selectedCloudVersion, setSelectedCloudVersion] = useState<string>('')
const [cloudBuildPath, setCloudBuildPath] = useState('')
const [buildingCloud, setBuildingCloud] = useState(false)
const [cloudBuildProgress, setCloudBuildProgress] = useState<number>(0)
const [cloudBuildLogs, setCloudBuildLogs] = useState<string[]>([])
```
**主要功能函数**
- `fetchCloudBuildCores()` - 获取核心列表
- `fetchCloudBuildStats()` - 获取统计数据
- `handleCloudBuild()` - 开始构建
- `monitorCloudBuildProgress()` - 监控进度
- `handleCloudDownload()` - 下载和解压
- `handleCreateCloudInstance()` - 创建实例
### 后端实现
**位置**`server/src/routes/cloudBuild.ts`
**API路由**
| 路由 | 方法 | 说明 |
|------|------|------|
| `/:type/cores` | GET | 获取核心列表 |
| `/build` | POST | 创建构建任务 |
| `/build/:taskId` | GET | 查询构建状态 |
| `/download` | POST | 下载并解压到目标目录 |
| `/stats` | GET | 获取统计数据 |
**核心逻辑**
```typescript
// 下载并解压流程
1. 生成下载链接
2. 下载文件到临时目录 (server/temp/)
3. 解压到用户指定目录
4. 检测启动脚本
5. 清理临时文件
6. 返回部署结果
```
### API客户端
**位置**`client/src/utils/api.ts`
**新增方法**
```typescript
// 获取核心列表
async getCloudBuildCores(type: string = 'msl_Official')
// 创建构建任务
async createCloudBuildTask(data: {
coreName: string
version: string
type?: string
})
// 查询构建状态
async getCloudBuildTaskStatus(taskId: string)
// 下载并解压
async downloadAndExtractCloudBuild(data: {
fileName?: string
taskId?: string
coreName: string
version: string
targetPath: string
})
// 获取统计数据
async getCloudBuildStats()
```
## 云端服务API
**服务器地址**`https://download.mc.xiaozhuhouses.asia:4433`
### 1. 获取核心列表
**请求**
```
GET /api/{type}/cores
```
**参数**
- `type`:构建平台类型(如:`msl_Official`
**响应**
```json
{
"success": true,
"data": [
{
"name": "paper",
"version": "1.21.10",
"versions": ["1.21.10", "1.21.9", ...],
"displayName": "Paper",
"description": "高性能的 Minecraft 服务端"
}
],
"cached": true
}
```
### 2. 创建构建任务
**请求**
```
POST /api/build
```
**请求体**
```json
{
"coreName": "paper",
"version": "1.21.10",
"type": "msl_Official"
}
```
**响应(缓存命中)**
```json
{
"success": true,
"message": "已从缓存获取",
"data": {
"cached": true,
"fileName": "paper-1.21.10.zip"
}
}
```
**响应(需要构建)**
```json
{
"success": true,
"message": "构建任务已创建",
"data": {
"taskId": "e2a4d9f2-2637-4e02-af21-980a44910e44",
"status": "PROCESSING",
"message": "任务已创建,正在处理",
"queued": false
}
}
```
**错误响应(超限)**
```json
{
"success": false,
"message": "您已超过部署次数限制1小时内最多 2 次)。请在 14:30:00 后重试。",
"resetTime": 1729567890000
}
```
状态码429
### 3. 查询构建状态
**请求**
```
GET /api/build/{taskId}
```
**响应**
```json
{
"success": true,
"data": {
"taskId": "e2a4d9f2-2637-4e02-af21-980a44910e44",
"status": "COMPLETED",
"progress": 100,
"downloadUrl": "/download/723d5aa3-79b7-4836-8b93-0cfbe5f188af",
"expireTime": "2025-10-22 09:30:55",
"message": "构建完成",
"activeBuilds": 0,
"queueSize": 0
}
}
```
### 4. 下载文件
**请求**
```
POST /api/download
```
**请求体**
```json
{
"fileName": "paper-1.21.10.zip",
"taskId": "task-id",
"coreName": "paper",
"version": "1.21.10"
}
```
### 5. 获取统计数据
**请求**
```
GET /api/stats
```
**响应**
```json
{
"success": true,
"data": [
{
"coreName": "paper",
"totalDownloads": 1250,
"versions": {
"1.21.10": 350,
"1.21.9": 280
}
}
]
}
```
## 工作流程图
```
用户操作 前端 后端 云端服务
│ │ │ │
├─选择核心和版本────────>│ │ │
│ ├─获取核心列表─────────>│ │
│ │ ├─请求核心列表─────────>│
│ │ │<──返回核心列表─────────┤
│ │<──返回核心列表─────────┤ │
│ │ │ │
├─开始构建部署────────>│ │ │
│ ├─创建构建任务─────────>│ │
│ │ ├─创建构建任务─────────>│
│ │ │<──返回任务ID/缓存──────┤
│ │<──返回任务状态─────────┤ │
│ │ │ │
│ ├─轮询构建进度─────────>│ │
│ │(每2秒) ├─查询任务状态─────────>│
│ │ │<──返回进度─────────────┤
│<───显示进度和日志─────┤<──返回进度─────────────┤ │
│ │ │ │
│ │(构建完成) │ │
│ ├─下载并解压───────────>│ │
│ │ ├─下载zip文件──────────>│
│ │ │<──返回文件流───────────┤
│ │ ├─解压到部署目录 │
│ │ ├─检测启动命令 │
│ │ ├─清理临时文件 │
│ │<──返回部署结果─────────┤ │
│<───显示部署完成───────┤ │ │
│ │ │ │
├─创建实例──────────────>│ │ │
│ ├─创建实例请求─────────>│ │
│ │ ├─创建实例配置 │
│ │<──返回创建结果─────────┤ │
│<───实例创建成功────────┤ │ │
```
## 注意事项
### 1. 部署限制
- 构建限流1小时内最多2次构建请求
- 下载链接有效期24小时
- 临时文件存储:使用 `server/temp/` 目录
### 2. 路径要求
- 部署路径必须存在或可创建
- 建议使用绝对路径
- Windows路径使用反斜杠 `\`Linux使用正斜杠 `/`
### 3. 网络要求
- 需要能够访问云端服务器
- 建议稳定的网络连接
- 下载大文件时请耐心等待
### 4. 权限要求
- 需要对部署目录有写入权限
- 临时目录需要可写
- 所有API请求需要认证token
## 故障排除
### 1. 无法获取核心列表
- 检查网络连接
- 确认云端服务器可访问
- 检查后端日志
### 2. 构建失败
- 查看详细日志信息
- 检查是否超过构建限制
- 尝试选择其他版本
### 3. 下载失败
- 检查磁盘空间
- 确认部署路径可写
- 查看后端错误日志
### 4. 解压失败
- 确认zip文件完整
- 检查目标目录权限
- 查看后端日志详情
### 5. 启动命令错误
- 手动修改启动命令
- 检查解压后的文件列表
- 确认平台类型正确
## 最佳实践
1. **使用默认路径**:让系统自动生成部署路径,避免路径冲突
2. **查看统计信息**:选择下载量高的版本,通常更稳定
3. **保留日志**:部署完成后可以截图保存日志,便于排查问题
4. **测试启动**:创建实例后先测试启动,确认一切正常
5. **定期更新**:关注新版本发布,及时更新服务端
## 更新日志
### v1.0.0 (2024-10-23)
- ✅ 初始版本发布
- ✅ 支持我的世界原版Java部署
- ✅ 实现云端构建和缓存机制
- ✅ 自动下载解压功能
- ✅ 智能启动命令检测
- ✅ 实时进度监控
- ✅ 统计数据展示
## 相关链接
- [开发文档](../开发.md)
- [运行指令](./运行指令.md)
- [网络检测功能](./网络检测功能说明.md)
- [项目主页](../README.md)
## 技术支持
如遇到问题或有建议,请通过以下方式联系:
- 提交 Issue
- 查看项目文档
- 联系开发团队
---
**注意**:本功能依赖于云端服务的稳定性,建议在生产环境使用前充分测试。