跨平台的进程管理与监控平台,适用于 Minecraft 服务端等长期运行的进程。
- 进程管理 - 启动、停止、重启服务,支持自动重启和优雅关闭命令
- 实时终端 - 通过 WebSocket + PTY 实现终端 attach,支持输入输出交互
- 日志管理 - 实时日志流、历史日志查看、自动截断
- 定时调度 - 基于 Cron 表达式的定时启动/停止/重启
- 用户认证 - JWT 认证,支持 Token 刷新与撤销
- 权限控制 - 管理员和普通用户角色,用户级服务访问权限
- 安全策略 - 可配置命令白名单和工作目录限制
- Web 管理界面 - 服务分组、标签筛选、拖拽排序
从 Releases 页面下载。
后端服务
# 1. 创建环境配置文件(参考下方"环境变量"章节)
# 2. 启动 API 服务
.\hypercraft-api.exe
# 3. 使用 CLI 工具
.\hypercraft-cli.exe list
.\hypercraft-cli.exe start <service-id>Web 管理界面
下载 web-standalone-windows.zip,解压后运行:
.\start.ps1
# 或
start.cmd默认运行在 http://localhost:3000。
# 添加执行权限
chmod +x hypercraft-api hypercraft-cli
# 启动 API 服务
./hypercraft-api
# 使用 CLI 工具
./hypercraft-cli list- Rust 1.75+
- Node.js 20+ & pnpm
cd backend
cp .env.example .env
# 编辑 .env 配置
cargo run -p hypercraft-apicd web
pnpm install
pnpm dev访问 http://localhost:3000。
# 设置 API 地址
export HC_API_BASE="http://127.0.0.1:8080"
# 服务管理
hypercraft-cli list # 列出所有服务
hypercraft-cli get <id> # 查看服务详情
hypercraft-cli start <id> # 启动服务
hypercraft-cli stop <id> # 停止服务
hypercraft-cli restart <id> # 重启服务
hypercraft-cli attach <id> # 附加到终端
hypercraft-cli logs <id> --follow # 实时日志
hypercraft-cli shell # 交互式命令行
# 定时调度
hypercraft-cli schedule get <id>
hypercraft-cli schedule set <id> --cron "0 0 8 * * *" --action start
hypercraft-cli schedule enable <id>
hypercraft-cli schedule disable <id>
hypercraft-cli schedule remove <id>
# 用户管理(管理员)
hypercraft-cli user list
hypercraft-cli user create -u <username> -p <password>
hypercraft-cli user grant <user-id> <service-id>
hypercraft-cli user revoke <user-id> <service-id>hypercraft/
├── backend/ # Rust 后端 (Cargo workspace)
│ ├── hypercraft-core/ # 核心库
│ │ ├── manager/ # 进程生命周期、attach、日志、调度
│ │ └── user/ # 用户认证、权限、JWT
│ ├── hypercraft-api/ # HTTP/WebSocket API (Axum)
│ └── hypercraft-cli/ # 命令行工具 (Clap)
└── web/ # Next.js 管理界面
├── app/ # 页面路由 (services, users, login, profile)
├── components/ # UI 组件
├── hooks/ # 自定义 Hooks (useTerminal, useXterm)
└── lib/ # API 客户端、认证上下文
| 变量 | 说明 | 默认值 |
|---|---|---|
HC_DATA_DIR |
数据存储目录 | ./data |
HC_BIND |
API 监听地址 | 127.0.0.1:8080 |
HC_DEV_TOKEN |
管理员开发令牌(>=32 字符) | - |
HC_JWT_SECRET |
JWT 签名密钥 | 运行时生成 |
HC_JWT_ISSUER |
JWT 签发者 | hypercraft-api |
HC_JWT_AUDIENCE |
JWT 受众 | hypercraft-clients |
HC_ALLOWED_COMMANDS |
命令白名单(逗号分隔) | * |
HC_ALLOWED_CWD_PREFIXES |
工作目录白名单(分号分隔) | * |
HC_CORS_ORIGINS |
CORS 允许的来源(逗号分隔) | * |
HC_WEB_GATEWAY_BASE_DOMAIN |
服务 Web 反代根域名(按服务 id 子域) | - |
Linux 上建议用 两个 unit:hypercraft-api(Rust 后端)与 hypercraft-web(Next standalone)。被管理的业务进程仍由 API 写入 HC_DATA_DIR(默认 ./data),与 systemd 无关。
- 将 Release 中的
hypercraft-api、hypercraft-cli放到同一目录(下文记为BACKEND_DIR),例如/opt/hypercraft/backend。 - 在
BACKEND_DIR复制backend/.env.example为.env,设置HC_BIND、HC_DATA_DIR等(见「环境变量」)。密钥与HC_DEV_TOKEN只保留在服务器上的.env,不要提交仓库。 - 解压
web-standalone到WEB_DIR(例如/opt/hypercraft/web),确认存在server.js;包内通常自带node可执行文件。 - 若构建时已写入 API 地址,检查 standalone 内的
NEXT_PUBLIC_API_URL;否则按「跨域部署」在构建或运行前配置,使浏览器能访问 API。
运行用户需对 BACKEND_DIR(含 data/)和 WEB_DIR 有读写/执行权限;不要用 root 跑长期服务。
新建 /etc/systemd/system/hypercraft-api.service:
| 配置项 | 作用 |
|---|---|
WorkingDirectory |
必须为 BACKEND_DIR,保证相对路径 HC_DATA_DIR=./data 落在正确位置 |
EnvironmentFile |
指向 BACKEND_DIR/.env,由 systemd 注入进程环境 |
ExecStart |
BACKEND_DIR/hypercraft-api 的绝对路径 |
User / Group |
专用系统用户,避免 root |
After=network-online.target |
网络就绪后再启动 |
Restart=always |
进程退出后自动拉起 |
示例(替换路径与用户):
[Unit]
Description=HyperCraft API
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=hypercraft
Group=hypercraft
WorkingDirectory=/opt/hypercraft/backend
EnvironmentFile=/opt/hypercraft/backend/.env
ExecStart=/opt/hypercraft/backend/hypercraft-api
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target监听地址与端口仅由 .env 中的 HC_BIND 控制,unit 里不必再写 Environment=HC_BIND。
新建 /etc/systemd/system/hypercraft-web.service:
| 配置项 | 作用 |
|---|---|
After=hypercraft-api.service |
面板依赖 API;仅保证启动顺序,不表示 API 必须已监听成功 |
WorkingDirectory |
WEB_DIR,Next standalone 的根目录 |
Environment=PORT / HOSTNAME |
standalone 用 PORT 监听;0.0.0.0 表示对外网卡开放 |
ExecStart |
使用包内 node 的绝对路径执行 server.js,避免依赖系统 Node 版本 |
示例:
[Unit]
Description=HyperCraft Web
After=network-online.target hypercraft-api.service
Wants=network-online.target
[Service]
Type=simple
User=hypercraft
Group=hypercraft
WorkingDirectory=/opt/hypercraft/web
Environment=PORT=3000
Environment=HOSTNAME=0.0.0.0
ExecStart=/opt/hypercraft/web/node /opt/hypercraft/web/server.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetWeb 的环境变量一般不用 EnvironmentFile,除非你在运行前用脚本生成 .env 并由 standalone 读取;API 地址应在构建时写入或通过反向代理统一入口。
sudo systemctl daemon-reload
sudo systemctl enable hypercraft-api.service
sudo systemctl enable hypercraft-web.service
sudo systemctl start hypercraft-api.service
sudo systemctl start hypercraft-web.servicesystemctl status hypercraft-api hypercraft-web
journalctl -u hypercraft-api -f
journalctl -u hypercraft-web -f- API 无响应:核对
HC_BIND、防火墙、以及curl http://127.0.0.1:<端口>/health。 - Web 白屏或登录失败:核对
NEXT_PUBLIC_API_URL、Nginx/Caddy 反代与「跨域部署」中的HC_CORS_ORIGINS。 - 更新二进制后:
systemctl restart hypercraft-api(或 web);仅改.env同样需要 restart 才会读入新环境。
服务配置保存为 JSON 格式:
{
"id": "minecraft-server",
"name": "Minecraft Server",
"command": "java",
"args": ["-Xmx4G", "-jar", "server.jar", "nogui"],
"cwd": "/opt/minecraft",
"env": {
"JAVA_HOME": "/usr/lib/jvm/java-17"
},
"auto_start": false,
"auto_restart": true,
"shutdown_command": "stop",
"tags": ["game", "production"],
"schedule": {
"enabled": true,
"cron": "0 0 8 * * *",
"action": "start"
}
}当前端和后端部署在不同域名时:
后端配置
# backend/.env
HC_CORS_ORIGINS=https://panel.example.com前端配置
# web/.env
NEXT_PUBLIC_API_URL=https://api.example.comNginx 示例
# 后端
server {
listen 443 ssl;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# 前端
server {
listen 443 ssl;
server_name panel.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}MIT


