Endless Node 是一个 Minecraft 服务器管理系统的节点端(被控端)。它提供了文件操作、服务器实例管理、认证等功能,可以与主控端配合使用,实现远程管理 Minecraft 服务器。
- 认证与注册:主控端可以通过 IP+端口+密钥与节点绑定
- 文件操作:支持上传、下载、删除、列表等文件操作,主控端可以指定任意路径
- 服务器实例管理:主控端可以远程创建、启动、停止、删除服务器实例
- 自定义启动脚本:主控端可以指定自定义的启动和停止脚本
- 控制台访问:可以查看服务器控制台输出
- 命令执行:可以向服务器发送命令
- 自动生成访问令牌:程序第一次启动时自动生成访问令牌
- 全局Token验证:除了注册接口外,所有接口都需要在请求头中携带有效的token
- Spring Boot 3.4.4
- MyBatis-Plus 3.5.7
- SQLite 数据库
- WebSocket 支持
- JDK 17 或更高版本
- Maven 3.6 或更高版本
- 克隆仓库
git clone https://github.com/yourusername/Endless-Node.git
cd Endless-Node
- 构建项目
mvn clean package
- 运行项目
java -jar target/Endless-Node-0.0.1-SNAPSHOT.jar
配置文件位于 src/main/resources/application.yml
,可以根据需要修改以下配置:
server:
port: 8080 # 服务端口
endless:
node:
max-instances: 20 # 最大允许的服务器实例数
default-memory-mb: 1024 # 默认分配给每个服务器的内存(MB)
default-jvm-args: -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 # 默认JVM参数
POST /api/auth/register
请求体:
{
"ipAddress": "192.168.1.100",
"port": "8080",
"secretKey": "your_secret_key"
}
响应:
{
"success": true,
"message": "Node registered successfully",
"nodeId": 1,
"token": "your_access_token",
"expiresAt": "2023-12-31T23:59:59"
}
GET /api/auth/verify
请求头:
X-Endless-Token: your_access_token
响应:
{
"valid": true,
"masterId": 1,
"scope": "SERVER_CONTROL,FILE_MANAGE",
"expiresAt": "2023-12-31T23:59:59"
}
GET /api/files/list?path=path/to/directory
请求头:
X-Endless-Token: your_access_token
响应:
{
"path": "path/to/directory",
"files": [
{
"name": "file1.txt",
"path": "file1.txt",
"isDirectory": false,
"size": 1024,
"lastModified": 1621234567890
},
{
"name": "directory1",
"path": "directory1",
"isDirectory": true,
"size": 0,
"lastModified": 1621234567890
}
]
}
GET /api/files/download?path=path/to/file
请求头:
X-Endless-Token: your_access_token
POST /api/files/upload?path=path/to/directory
请求头:
X-Endless-Token: your_access_token
请求体:multipart/form-data 格式,包含文件
响应:
{
"success": true,
"path": "path/to/directory/file.txt",
"size": 1024
}
DELETE /api/files/delete?path=path/to/file_or_directory
请求头:
X-Endless-Token: your_access_token
响应:
{
"success": true,
"path": "path/to/file_or_directory"
}
GET /api/servers/list
请求头:
X-Endless-Token: your_access_token
响应:
{
"servers": [
{
"id": 1,
"instanceName": "生存主世界",
"version": "1.20.1",
"coreType": "PAPER",
"filePath": "/data/mc_servers/survival",
"status": "STOPPED",
"port": 25565,
"jvmArgs": "-Xmx2G -Xms1G",
"memoryMb": 2048,
"createdBy": 1,
"createdAt": "2023-01-01T00:00:00",
"updatedAt": null
}
]
}
POST /api/servers/create
请求头:
X-Endless-Token: your_access_token
请求体:
{
"instanceName": "生存主世界",
"version": "1.20.1",
"coreType": "PAPER",
"filePath": "/data/mc_servers/survival",
"port": 25565,
"jvmArgs": "-Xmx2G -Xms1G",
"memoryMb": 2048
}
响应:
{
"success": true,
"serverId": 1
}
POST /api/servers/{serverId}/start
请求头:
X-Endless-Token: your_access_token
可选请求体(自定义启动脚本):
{
"script": "#!/bin/bash\ncd /data/mc_servers/survival\njava -Xmx2G -Xms1G -jar paper-1.20.1.jar nogui"
}
响应:
{
"success": true,
"message": "Server started successfully"
}
POST /api/servers/{serverId}/stop
请求头:
X-Endless-Token: your_access_token
可选请求体(自定义停止脚本):
{
"script": "#!/bin/bash\ncd /data/mc_servers/survival\nscreen -S mc_server -X stuff \"stop\\n\""
}
响应:
{
"success": true,
"message": "Server stopped successfully"
}
DELETE /api/servers/{serverId}
请求头:
X-Endless-Token: your_access_token
响应:
{
"success": true,
"message": "Server deleted successfully"
}
GET /api/servers/{serverId}/console
请求头:
X-Endless-Token: your_access_token
响应:
{
"console": "Server console output..."
}
POST /api/servers/{serverId}/command
请求头:
X-Endless-Token: your_access_token
请求体:
{
"command": "say Hello, World!"
}
响应:
{
"success": true,
"message": "Command sent successfully"
}
GNU General Public License v3.0
- Pilgrimage233 (admin@mcpeach.cc)