Repository files navigation

Beacon

面向 Minecraft 多群组服务器的集群调度中间件控制面
区服治理 · 健康调度 · 跨服消息 · 可观测审计 · 配置与交付

versionlicenseGoCI

Beacon 把多个 BungeeCord / Velocity 代理Bukkit / Paper 子服 串成可治理的集群:用独立 Go 控制面(内嵌 React 管理台,单二进制同端口)统一做身份绑定、区服分配、健康调度、跨服消息追踪、审计告警与灰度交付;游戏服只跑轻量 Kotlin / TabooLib Agent,业务插件只依赖本机 agent-api,禁止直连控制面。

控制面挂 ≠ 数据面挂:Agent 持本地快照 fail-static,控制面不可用时按快照继续跑,不阻断玩家进服。

发布状态:当前公开 GA 为 GitHub Release v1.0.01.1.0 已完成本地验收与发布基线固定,仍待远端 RC/GA 工作流创建不可变资产。正式 GA 以实际创建的 GitHub Release vX.Y.Z 为准;在线更新只消费严格 vX.Y.Z GA。


界面预览

管理台演示模式截图(数据加载完成后):

运维总览服务器资产

集群拓扑UI 控件博物馆

说明
运维总览健康 KPI、服务器状态墙、连接流、告警与调度概览
服务器资产注册待确认、身份 / 健康与资产运维
集群拓扑BC → 小区放射链路与异常边
UI 控件博物馆@beacon/ui 控件展示,见 docs/UI-WIKI.md
# 管理台演示(免登录 + mock)
pnpm --filter @beacon/web dev
# UI 控件博物馆
pnpm --filter @beacon/ui-wiki dev

为什么用 Beacon

痛点Beacon 的做法
多 BC + 上百子服靠配置硬维护Web 管理 namespace / BC 集群 / 大区 / 小区 / 子服与默认入口
误改 serverId 导致区数据串首启 identityId 绑定,后台确认后才可调度
业务插件直连中控难降级只走本机 Agent API;中控挂了可本地快照
跨服消息、选服失败难查调度决策、消息链路、连接明细与审计可追踪
插件与配置发布靠手工变更单 + 流式数据面 + 灰度批次与整单回滚

核心能力

  • Agent 自连接与身份绑定 — 地址 / token / namespace / serverId 接入;pending → 人工确认 → active
  • namespace 强隔离 — 默认禁止跨域调度与消息;跨域须后台显式信任并额外审计
  • 区服治理 — 环境、BC 集群、大区、小区、默认入口、排空(draining)
  • 健康调度 — TPS / CPU / 在线 / 连接 / 告警等综合评分;业务插件 scheduling() 取候选
  • 跨服消息 — 定向、RPC、主题广播、按玩家寻址;控制面存元数据与受控 payload(非业务库)
  • 可观测 — 运维总览、服务分析、拓扑、命令 / 审计 / 告警、连接与消息链路
  • 配置与交付 V2 — 作用域配置、文件资产、变更单灰度、热重载 / 重启生效、整单回滚
  • 热冷数据 — 近期热库;过期归档与冷查询;清理前必归档
  • 在线自更新(GA only) — 单二进制自我替换;只发现正式 GA,不把 RC 当自动更新源
  • 统一审批与受控正文 — 高风险写入由审批 worker 与执行回执同事务完成;敏感配置、文件、反向抓取和命令结果使用一次性授权读取
  • 资源生命周期与 MCP 自动化 — 归档、恢复、墓碑化均保留影响预览与审批轨迹;MCP 以 OAuth 客户端身份、最小权限和审批交接运行

架构一览

 浏览器 ──HTTP──┐
▼
┌──────────────────────────────────────────────┐
│ Beacon 控制面(Go 单二进制 + 内嵌 React) │
│ /admin/* 管理台 API /beacon/* agent API │
│ 内存:在线连接 · 健康 TTL · SSE │
│ MySQL:身份 · 区服 · 审计 · 指标 · 归档索引 │
└──────────────────────────────────────────────┘
▲ REST 注册/心跳/拉配置/上报 · SSE 推送
│
┌─────┴───────┬───────────────┐
▼ ▼ ▼
Agent Agent Agent (Kotlin / TabooLib)
Bukkit Bukkit Bungee 本地快照 fail-static

快速开始

1. 部署控制面

docker compose up -d # 单 Beacon 容器 + SQLite 持久卷# 管理台与 API:http://localhost:8848

浏览器打开 http://localhost:8848,使用 BEACON_ADMIN_USERNAME / BEACON_ADMIN_PASSWORD 登录。

也可直接跑单二进制(默认 SQLite、首启释放 config.yml)。生产若使用 MySQL,应自行提供外置数据库并在控制面配置中填写连接信息;Compose 不会创建 MySQL。完整的单机入门、集群搭建与功能教程见 docs/wiki/,日常运维见 docs/OPERATIONS.md

2. 接入 Agent

将对应版本的 BeaconAgent(Bukkit) / BeaconAgentProxy(Bungee) 放入插件目录,仅配置控制面 endpoint 列表与 namespace token。首次注册后在管理台 服务器 → 待确认 中批准身份、分配 serverId 与拓扑归属。

3. 业务插件(compileOnly)

repositories { mavenLocal() /* 或贵方私有仓库 */ }
dependencies {
compileOnly("top.wcpe.beacon:beacon-agent-api:<GA_VERSION>")
compileOnly("top.wcpe.beacon:beacon-agent-kit:<GA_VERSION>")
}

调度、消息、配置读取示例见 docs/SDK.md
运行期版本:部署的 Agent ≥ 编译所用 api/kit 版本。

4. 从源码构建

make package # 控制面单二进制(内嵌前端)+ 双端 agent jar# 或:make web · make build · make agent

需要 Go 1.26+、Node + pnpm、JDK 21。


文档

面向使用与接入(不含内部需求 / 路线图 / ADR):

文档说明
docs/UI-WIKI.mdUI 控件博物馆:启动、覆盖率门禁、新增控件流程
docs/wiki/运维使用 Wiki:全局大厅、BC 与 Agent 接入及玩家验收
docs/OPERATIONS.md部署 / 升级 / 备份 / 排障
docs/SDK.md业务插件接入 Agent API
SECURITY.md安全边界
CHANGELOG.md更新日志

许可

MIT License · Copyright (c) wcpe

About

Minecraft 服务器集群控制面:身份与拓扑治理、健康调度、审批审计、配置与交付。

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Beacon

面向 Minecraft 多群组服务器的集群调度中间件控制面
区服治理 · 健康调度 · 跨服消息 · 可观测审计 · 配置与交付

versionlicenseGoCI

Beacon 把多个 BungeeCord / Velocity 代理Bukkit / Paper 子服 串成可治理的集群:用独立 Go 控制面(内嵌 React 管理台,单二进制同端口)统一做身份绑定、区服分配、健康调度、跨服消息追踪、审计告警与灰度交付;游戏服只跑轻量 Kotlin / TabooLib Agent,业务插件只依赖本机 agent-api,禁止直连控制面。

控制面挂 ≠ 数据面挂:Agent 持本地快照 fail-static,控制面不可用时按快照继续跑,不阻断玩家进服。

发布状态:当前公开 GA 为 GitHub Release v1.0.01.1.0 已完成本地验收与发布基线固定,仍待远端 RC/GA 工作流创建不可变资产。正式 GA 以实际创建的 GitHub Release vX.Y.Z 为准;在线更新只消费严格 vX.Y.Z GA。


界面预览

管理台演示模式截图(数据加载完成后):

运维总览服务器资产

集群拓扑UI 控件博物馆

说明
运维总览健康 KPI、服务器状态墙、连接流、告警与调度概览
服务器资产注册待确认、身份 / 健康与资产运维
集群拓扑BC → 小区放射链路与异常边
UI 控件博物馆@beacon/ui 控件展示,见 docs/UI-WIKI.md
# 管理台演示(免登录 + mock)
pnpm --filter @beacon/web dev
# UI 控件博物馆
pnpm --filter @beacon/ui-wiki dev

为什么用 Beacon

痛点Beacon 的做法
多 BC + 上百子服靠配置硬维护Web 管理 namespace / BC 集群 / 大区 / 小区 / 子服与默认入口
误改 serverId 导致区数据串首启 identityId 绑定,后台确认后才可调度
业务插件直连中控难降级只走本机 Agent API;中控挂了可本地快照
跨服消息、选服失败难查调度决策、消息链路、连接明细与审计可追踪
插件与配置发布靠手工变更单 + 流式数据面 + 灰度批次与整单回滚

核心能力

  • Agent 自连接与身份绑定 — 地址 / token / namespace / serverId 接入;pending → 人工确认 → active
  • namespace 强隔离 — 默认禁止跨域调度与消息;跨域须后台显式信任并额外审计
  • 区服治理 — 环境、BC 集群、大区、小区、默认入口、排空(draining)
  • 健康调度 — TPS / CPU / 在线 / 连接 / 告警等综合评分;业务插件 scheduling() 取候选
  • 跨服消息 — 定向、RPC、主题广播、按玩家寻址;控制面存元数据与受控 payload(非业务库)
  • 可观测 — 运维总览、服务分析、拓扑、命令 / 审计 / 告警、连接与消息链路
  • 配置与交付 V2 — 作用域配置、文件资产、变更单灰度、热重载 / 重启生效、整单回滚
  • 热冷数据 — 近期热库;过期归档与冷查询;清理前必归档
  • 在线自更新(GA only) — 单二进制自我替换;只发现正式 GA,不把 RC 当自动更新源
  • 统一审批与受控正文 — 高风险写入由审批 worker 与执行回执同事务完成;敏感配置、文件、反向抓取和命令结果使用一次性授权读取
  • 资源生命周期与 MCP 自动化 — 归档、恢复、墓碑化均保留影响预览与审批轨迹;MCP 以 OAuth 客户端身份、最小权限和审批交接运行

架构一览

 浏览器 ──HTTP──┐
▼
┌──────────────────────────────────────────────┐
│ Beacon 控制面(Go 单二进制 + 内嵌 React) │
│ /admin/* 管理台 API /beacon/* agent API │
│ 内存:在线连接 · 健康 TTL · SSE │
│ MySQL:身份 · 区服 · 审计 · 指标 · 归档索引 │
└──────────────────────────────────────────────┘
▲ REST 注册/心跳/拉配置/上报 · SSE 推送
│
┌─────┴───────┬───────────────┐
▼ ▼ ▼
Agent Agent Agent (Kotlin / TabooLib)
Bukkit Bukkit Bungee 本地快照 fail-static

快速开始

1. 部署控制面

docker compose up -d # 单 Beacon 容器 + SQLite 持久卷# 管理台与 API:http://localhost:8848

浏览器打开 http://localhost:8848,使用 BEACON_ADMIN_USERNAME / BEACON_ADMIN_PASSWORD 登录。

也可直接跑单二进制(默认 SQLite、首启释放 config.yml)。生产若使用 MySQL,应自行提供外置数据库并在控制面配置中填写连接信息;Compose 不会创建 MySQL。完整的单机入门、集群搭建与功能教程见 docs/wiki/,日常运维见 docs/OPERATIONS.md

2. 接入 Agent

将对应版本的 BeaconAgent(Bukkit) / BeaconAgentProxy(Bungee) 放入插件目录,仅配置控制面 endpoint 列表与 namespace token。首次注册后在管理台 服务器 → 待确认 中批准身份、分配 serverId 与拓扑归属。

3. 业务插件(compileOnly)

repositories { mavenLocal() /* 或贵方私有仓库 */ }
dependencies {
compileOnly("top.wcpe.beacon:beacon-agent-api:<GA_VERSION>")
compileOnly("top.wcpe.beacon:beacon-agent-kit:<GA_VERSION>")
}

调度、消息、配置读取示例见 docs/SDK.md
运行期版本:部署的 Agent ≥ 编译所用 api/kit 版本。

4. 从源码构建

make package # 控制面单二进制(内嵌前端)+ 双端 agent jar# 或:make web · make build · make agent

需要 Go 1.26+、Node + pnpm、JDK 21。


文档

面向使用与接入(不含内部需求 / 路线图 / ADR):

文档说明
docs/UI-WIKI.mdUI 控件博物馆:启动、覆盖率门禁、新增控件流程
docs/wiki/运维使用 Wiki:全局大厅、BC 与 Agent 接入及玩家验收
docs/OPERATIONS.md部署 / 升级 / 备份 / 排障
docs/SDK.md业务插件接入 Agent API
SECURITY.md安全边界
CHANGELOG.md更新日志

许可

MIT License · Copyright (c) wcpe

About

Minecraft 服务器集群控制面:身份与拓扑治理、健康调度、审批审计、配置与交付。

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Beacon

面向 Minecraft 多群组服务器的集群调度中间件控制面
区服治理 · 健康调度 · 跨服消息 · 可观测审计 · 配置与交付

versionlicenseGoCI

Beacon 把多个 BungeeCord / Velocity 代理Bukkit / Paper 子服 串成可治理的集群:用独立 Go 控制面(内嵌 React 管理台,单二进制同端口)统一做身份绑定、区服分配、健康调度、跨服消息追踪、审计告警与灰度交付;游戏服只跑轻量 Kotlin / TabooLib Agent,业务插件只依赖本机 agent-api,禁止直连控制面。

控制面挂 ≠ 数据面挂:Agent 持本地快照 fail-static,控制面不可用时按快照继续跑,不阻断玩家进服。

发布状态:当前公开 GA 为 GitHub Release v1.0.01.1.0 已完成本地验收与发布基线固定,仍待远端 RC/GA 工作流创建不可变资产。正式 GA 以实际创建的 GitHub Release vX.Y.Z 为准;在线更新只消费严格 vX.Y.Z GA。


界面预览

管理台演示模式截图(数据加载完成后):

运维总览服务器资产

集群拓扑UI 控件博物馆

说明
运维总览健康 KPI、服务器状态墙、连接流、告警与调度概览
服务器资产注册待确认、身份 / 健康与资产运维
集群拓扑BC → 小区放射链路与异常边
UI 控件博物馆@beacon/ui 控件展示,见 docs/UI-WIKI.md
# 管理台演示(免登录 + mock)
pnpm --filter @beacon/web dev
# UI 控件博物馆
pnpm --filter @beacon/ui-wiki dev

为什么用 Beacon

痛点Beacon 的做法
多 BC + 上百子服靠配置硬维护Web 管理 namespace / BC 集群 / 大区 / 小区 / 子服与默认入口
误改 serverId 导致区数据串首启 identityId 绑定,后台确认后才可调度
业务插件直连中控难降级只走本机 Agent API;中控挂了可本地快照
跨服消息、选服失败难查调度决策、消息链路、连接明细与审计可追踪
插件与配置发布靠手工变更单 + 流式数据面 + 灰度批次与整单回滚

核心能力

  • Agent 自连接与身份绑定 — 地址 / token / namespace / serverId 接入;pending → 人工确认 → active
  • namespace 强隔离 — 默认禁止跨域调度与消息;跨域须后台显式信任并额外审计
  • 区服治理 — 环境、BC 集群、大区、小区、默认入口、排空(draining)
  • 健康调度 — TPS / CPU / 在线 / 连接 / 告警等综合评分;业务插件 scheduling() 取候选
  • 跨服消息 — 定向、RPC、主题广播、按玩家寻址;控制面存元数据与受控 payload(非业务库)
  • 可观测 — 运维总览、服务分析、拓扑、命令 / 审计 / 告警、连接与消息链路
  • 配置与交付 V2 — 作用域配置、文件资产、变更单灰度、热重载 / 重启生效、整单回滚
  • 热冷数据 — 近期热库;过期归档与冷查询;清理前必归档
  • 在线自更新(GA only) — 单二进制自我替换;只发现正式 GA,不把 RC 当自动更新源
  • 统一审批与受控正文 — 高风险写入由审批 worker 与执行回执同事务完成;敏感配置、文件、反向抓取和命令结果使用一次性授权读取
  • 资源生命周期与 MCP 自动化 — 归档、恢复、墓碑化均保留影响预览与审批轨迹;MCP 以 OAuth 客户端身份、最小权限和审批交接运行

架构一览

 浏览器 ──HTTP──┐
▼
┌──────────────────────────────────────────────┐
│ Beacon 控制面(Go 单二进制 + 内嵌 React) │
│ /admin/* 管理台 API /beacon/* agent API │
│ 内存:在线连接 · 健康 TTL · SSE │
│ MySQL:身份 · 区服 · 审计 · 指标 · 归档索引 │
└──────────────────────────────────────────────┘
▲ REST 注册/心跳/拉配置/上报 · SSE 推送
│
┌─────┴───────┬───────────────┐
▼ ▼ ▼
Agent Agent Agent (Kotlin / TabooLib)
Bukkit Bukkit Bungee 本地快照 fail-static

快速开始

1. 部署控制面

docker compose up -d # 单 Beacon 容器 + SQLite 持久卷# 管理台与 API:http://localhost:8848

浏览器打开 http://localhost:8848,使用 BEACON_ADMIN_USERNAME / BEACON_ADMIN_PASSWORD 登录。

也可直接跑单二进制(默认 SQLite、首启释放 config.yml)。生产若使用 MySQL,应自行提供外置数据库并在控制面配置中填写连接信息;Compose 不会创建 MySQL。完整的单机入门、集群搭建与功能教程见 docs/wiki/,日常运维见 docs/OPERATIONS.md

2. 接入 Agent

将对应版本的 BeaconAgent(Bukkit) / BeaconAgentProxy(Bungee) 放入插件目录,仅配置控制面 endpoint 列表与 namespace token。首次注册后在管理台 服务器 → 待确认 中批准身份、分配 serverId 与拓扑归属。

3. 业务插件(compileOnly)

repositories { mavenLocal() /* 或贵方私有仓库 */ }
dependencies {
compileOnly("top.wcpe.beacon:beacon-agent-api:<GA_VERSION>")
compileOnly("top.wcpe.beacon:beacon-agent-kit:<GA_VERSION>")
}

调度、消息、配置读取示例见 docs/SDK.md
运行期版本:部署的 Agent ≥ 编译所用 api/kit 版本。

4. 从源码构建

make package # 控制面单二进制(内嵌前端)+ 双端 agent jar# 或:make web · make build · make agent

需要 Go 1.26+、Node + pnpm、JDK 21。


文档

面向使用与接入(不含内部需求 / 路线图 / ADR):

文档说明
docs/UI-WIKI.mdUI 控件博物馆:启动、覆盖率门禁、新增控件流程
docs/wiki/运维使用 Wiki:全局大厅、BC 与 Agent 接入及玩家验收
docs/OPERATIONS.md部署 / 升级 / 备份 / 排障
docs/SDK.md业务插件接入 Agent API
SECURITY.md安全边界
CHANGELOG.md更新日志

许可

MIT License · Copyright (c) wcpe

About

Minecraft 服务器集群控制面:身份与拓扑治理、健康调度、审批审计、配置与交付。

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Beacon

面向 Minecraft 多群组服务器的集群调度中间件控制面
区服治理 · 健康调度 · 跨服消息 · 可观测审计 · 配置与交付

versionlicenseGoCI

Beacon 把多个 BungeeCord / Velocity 代理Bukkit / Paper 子服 串成可治理的集群:用独立 Go 控制面(内嵌 React 管理台,单二进制同端口)统一做身份绑定、区服分配、健康调度、跨服消息追踪、审计告警与灰度交付;游戏服只跑轻量 Kotlin / TabooLib Agent,业务插件只依赖本机 agent-api,禁止直连控制面。

控制面挂 ≠ 数据面挂:Agent 持本地快照 fail-static,控制面不可用时按快照继续跑,不阻断玩家进服。

发布状态:当前公开 GA 为 GitHub Release v1.0.01.1.0 已完成本地验收与发布基线固定,仍待远端 RC/GA 工作流创建不可变资产。正式 GA 以实际创建的 GitHub Release vX.Y.Z 为准;在线更新只消费严格 vX.Y.Z GA。


界面预览

管理台演示模式截图(数据加载完成后):

运维总览服务器资产

集群拓扑UI 控件博物馆

说明
运维总览健康 KPI、服务器状态墙、连接流、告警与调度概览
服务器资产注册待确认、身份 / 健康与资产运维
集群拓扑BC → 小区放射链路与异常边
UI 控件博物馆@beacon/ui 控件展示,见 docs/UI-WIKI.md
# 管理台演示(免登录 + mock)
pnpm --filter @beacon/web dev
# UI 控件博物馆
pnpm --filter @beacon/ui-wiki dev

为什么用 Beacon

痛点Beacon 的做法
多 BC + 上百子服靠配置硬维护Web 管理 namespace / BC 集群 / 大区 / 小区 / 子服与默认入口
误改 serverId 导致区数据串首启 identityId 绑定,后台确认后才可调度
业务插件直连中控难降级只走本机 Agent API;中控挂了可本地快照
跨服消息、选服失败难查调度决策、消息链路、连接明细与审计可追踪
插件与配置发布靠手工变更单 + 流式数据面 + 灰度批次与整单回滚

核心能力

  • Agent 自连接与身份绑定 — 地址 / token / namespace / serverId 接入;pending → 人工确认 → active
  • namespace 强隔离 — 默认禁止跨域调度与消息;跨域须后台显式信任并额外审计
  • 区服治理 — 环境、BC 集群、大区、小区、默认入口、排空(draining)
  • 健康调度 — TPS / CPU / 在线 / 连接 / 告警等综合评分;业务插件 scheduling() 取候选
  • 跨服消息 — 定向、RPC、主题广播、按玩家寻址;控制面存元数据与受控 payload(非业务库)
  • 可观测 — 运维总览、服务分析、拓扑、命令 / 审计 / 告警、连接与消息链路
  • 配置与交付 V2 — 作用域配置、文件资产、变更单灰度、热重载 / 重启生效、整单回滚
  • 热冷数据 — 近期热库;过期归档与冷查询;清理前必归档
  • 在线自更新(GA only) — 单二进制自我替换;只发现正式 GA,不把 RC 当自动更新源
  • 统一审批与受控正文 — 高风险写入由审批 worker 与执行回执同事务完成;敏感配置、文件、反向抓取和命令结果使用一次性授权读取
  • 资源生命周期与 MCP 自动化 — 归档、恢复、墓碑化均保留影响预览与审批轨迹;MCP 以 OAuth 客户端身份、最小权限和审批交接运行

架构一览

 浏览器 ──HTTP──┐
▼
┌──────────────────────────────────────────────┐
│ Beacon 控制面(Go 单二进制 + 内嵌 React) │
│ /admin/* 管理台 API /beacon/* agent API │
│ 内存:在线连接 · 健康 TTL · SSE │
│ MySQL:身份 · 区服 · 审计 · 指标 · 归档索引 │
└──────────────────────────────────────────────┘
▲ REST 注册/心跳/拉配置/上报 · SSE 推送
│
┌─────┴───────┬───────────────┐
▼ ▼ ▼
Agent Agent Agent (Kotlin / TabooLib)
Bukkit Bukkit Bungee 本地快照 fail-static

快速开始

1. 部署控制面

docker compose up -d # 单 Beacon 容器 + SQLite 持久卷# 管理台与 API:http://localhost:8848

浏览器打开 http://localhost:8848,使用 BEACON_ADMIN_USERNAME / BEACON_ADMIN_PASSWORD 登录。

也可直接跑单二进制(默认 SQLite、首启释放 config.yml)。生产若使用 MySQL,应自行提供外置数据库并在控制面配置中填写连接信息;Compose 不会创建 MySQL。完整的单机入门、集群搭建与功能教程见 docs/wiki/,日常运维见 docs/OPERATIONS.md

2. 接入 Agent

将对应版本的 BeaconAgent(Bukkit) / BeaconAgentProxy(Bungee) 放入插件目录,仅配置控制面 endpoint 列表与 namespace token。首次注册后在管理台 服务器 → 待确认 中批准身份、分配 serverId 与拓扑归属。

3. 业务插件(compileOnly)

repositories { mavenLocal() /* 或贵方私有仓库 */ }
dependencies {
compileOnly("top.wcpe.beacon:beacon-agent-api:<GA_VERSION>")
compileOnly("top.wcpe.beacon:beacon-agent-kit:<GA_VERSION>")
}

调度、消息、配置读取示例见 docs/SDK.md
运行期版本:部署的 Agent ≥ 编译所用 api/kit 版本。

4. 从源码构建

make package # 控制面单二进制(内嵌前端)+ 双端 agent jar# 或:make web · make build · make agent

需要 Go 1.26+、Node + pnpm、JDK 21。


文档

面向使用与接入(不含内部需求 / 路线图 / ADR):

文档说明
docs/UI-WIKI.mdUI 控件博物馆:启动、覆盖率门禁、新增控件流程
docs/wiki/运维使用 Wiki:全局大厅、BC 与 Agent 接入及玩家验收
docs/OPERATIONS.md部署 / 升级 / 备份 / 排障
docs/SDK.md业务插件接入 Agent API
SECURITY.md安全边界
CHANGELOG.md更新日志

许可

MIT License · Copyright (c) wcpe

About

Minecraft 服务器集群控制面:身份与拓扑治理、健康调度、审批审计、配置与交付。

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Beacon

面向 Minecraft 多群组服务器的集群调度中间件控制面
区服治理 · 健康调度 · 跨服消息 · 可观测审计 · 配置与交付

versionlicenseGoCI

Beacon 把多个 BungeeCord / Velocity 代理Bukkit / Paper 子服 串成可治理的集群:用独立 Go 控制面(内嵌 React 管理台,单二进制同端口)统一做身份绑定、区服分配、健康调度、跨服消息追踪、审计告警与灰度交付;游戏服只跑轻量 Kotlin / TabooLib Agent,业务插件只依赖本机 agent-api,禁止直连控制面。

控制面挂 ≠ 数据面挂:Agent 持本地快照 fail-static,控制面不可用时按快照继续跑,不阻断玩家进服。

发布状态:当前公开 GA 为 GitHub Release v1.0.01.1.0 已完成本地验收与发布基线固定,仍待远端 RC/GA 工作流创建不可变资产。正式 GA 以实际创建的 GitHub Release vX.Y.Z 为准;在线更新只消费严格 vX.Y.Z GA。


界面预览

管理台演示模式截图(数据加载完成后):

运维总览服务器资产

集群拓扑UI 控件博物馆

说明
运维总览健康 KPI、服务器状态墙、连接流、告警与调度概览
服务器资产注册待确认、身份 / 健康与资产运维
集群拓扑BC → 小区放射链路与异常边
UI 控件博物馆@beacon/ui 控件展示,见 docs/UI-WIKI.md
# 管理台演示(免登录 + mock)
pnpm --filter @beacon/web dev
# UI 控件博物馆
pnpm --filter @beacon/ui-wiki dev

为什么用 Beacon

痛点Beacon 的做法
多 BC + 上百子服靠配置硬维护Web 管理 namespace / BC 集群 / 大区 / 小区 / 子服与默认入口
误改 serverId 导致区数据串首启 identityId 绑定,后台确认后才可调度
业务插件直连中控难降级只走本机 Agent API;中控挂了可本地快照
跨服消息、选服失败难查调度决策、消息链路、连接明细与审计可追踪
插件与配置发布靠手工变更单 + 流式数据面 + 灰度批次与整单回滚

核心能力

  • Agent 自连接与身份绑定 — 地址 / token / namespace / serverId 接入;pending → 人工确认 → active
  • namespace 强隔离 — 默认禁止跨域调度与消息;跨域须后台显式信任并额外审计
  • 区服治理 — 环境、BC 集群、大区、小区、默认入口、排空(draining)
  • 健康调度 — TPS / CPU / 在线 / 连接 / 告警等综合评分;业务插件 scheduling() 取候选
  • 跨服消息 — 定向、RPC、主题广播、按玩家寻址;控制面存元数据与受控 payload(非业务库)
  • 可观测 — 运维总览、服务分析、拓扑、命令 / 审计 / 告警、连接与消息链路
  • 配置与交付 V2 — 作用域配置、文件资产、变更单灰度、热重载 / 重启生效、整单回滚
  • 热冷数据 — 近期热库;过期归档与冷查询;清理前必归档
  • 在线自更新(GA only) — 单二进制自我替换;只发现正式 GA,不把 RC 当自动更新源
  • 统一审批与受控正文 — 高风险写入由审批 worker 与执行回执同事务完成;敏感配置、文件、反向抓取和命令结果使用一次性授权读取
  • 资源生命周期与 MCP 自动化 — 归档、恢复、墓碑化均保留影响预览与审批轨迹;MCP 以 OAuth 客户端身份、最小权限和审批交接运行

架构一览

 浏览器 ──HTTP──┐
▼
┌──────────────────────────────────────────────┐
│ Beacon 控制面(Go 单二进制 + 内嵌 React) │
│ /admin/* 管理台 API /beacon/* agent API │
│ 内存:在线连接 · 健康 TTL · SSE │
│ MySQL:身份 · 区服 · 审计 · 指标 · 归档索引 │
└──────────────────────────────────────────────┘
▲ REST 注册/心跳/拉配置/上报 · SSE 推送
│
┌─────┴───────┬───────────────┐
▼ ▼ ▼
Agent Agent Agent (Kotlin / TabooLib)
Bukkit Bukkit Bungee 本地快照 fail-static

快速开始

1. 部署控制面

docker compose up -d # 单 Beacon 容器 + SQLite 持久卷# 管理台与 API:http://localhost:8848

浏览器打开 http://localhost:8848,使用 BEACON_ADMIN_USERNAME / BEACON_ADMIN_PASSWORD 登录。

也可直接跑单二进制(默认 SQLite、首启释放 config.yml)。生产若使用 MySQL,应自行提供外置数据库并在控制面配置中填写连接信息;Compose 不会创建 MySQL。完整的单机入门、集群搭建与功能教程见 docs/wiki/,日常运维见 docs/OPERATIONS.md

2. 接入 Agent

将对应版本的 BeaconAgent(Bukkit) / BeaconAgentProxy(Bungee) 放入插件目录,仅配置控制面 endpoint 列表与 namespace token。首次注册后在管理台 服务器 → 待确认 中批准身份、分配 serverId 与拓扑归属。

3. 业务插件(compileOnly)

repositories { mavenLocal() /* 或贵方私有仓库 */ }
dependencies {
compileOnly("top.wcpe.beacon:beacon-agent-api:<GA_VERSION>")
compileOnly("top.wcpe.beacon:beacon-agent-kit:<GA_VERSION>")
}

调度、消息、配置读取示例见 docs/SDK.md
运行期版本:部署的 Agent ≥ 编译所用 api/kit 版本。

4. 从源码构建

make package # 控制面单二进制(内嵌前端)+ 双端 agent jar# 或:make web · make build · make agent

需要 Go 1.26+、Node + pnpm、JDK 21。


文档

面向使用与接入(不含内部需求 / 路线图 / ADR):

文档说明
docs/UI-WIKI.mdUI 控件博物馆:启动、覆盖率门禁、新增控件流程
docs/wiki/运维使用 Wiki:全局大厅、BC 与 Agent 接入及玩家验收
docs/OPERATIONS.md部署 / 升级 / 备份 / 排障
docs/SDK.md业务插件接入 Agent API
SECURITY.md安全边界
CHANGELOG.md更新日志

许可

MIT License · Copyright (c) wcpe

About

Minecraft 服务器集群控制面:身份与拓扑治理、健康调度、审批审计、配置与交付。

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Beacon

面向 Minecraft 多群组服务器的集群调度中间件控制面
区服治理 · 健康调度 · 跨服消息 · 可观测审计 · 配置与交付

versionlicenseGoCI

Beacon 把多个 BungeeCord / Velocity 代理Bukkit / Paper 子服 串成可治理的集群:用独立 Go 控制面(内嵌 React 管理台,单二进制同端口)统一做身份绑定、区服分配、健康调度、跨服消息追踪、审计告警与灰度交付;游戏服只跑轻量 Kotlin / TabooLib Agent,业务插件只依赖本机 agent-api,禁止直连控制面。

控制面挂 ≠ 数据面挂:Agent 持本地快照 fail-static,控制面不可用时按快照继续跑,不阻断玩家进服。

发布状态:当前公开 GA 为 GitHub Release v1.0.01.1.0 已完成本地验收与发布基线固定,仍待远端 RC/GA 工作流创建不可变资产。正式 GA 以实际创建的 GitHub Release vX.Y.Z 为准;在线更新只消费严格 vX.Y.Z GA。


界面预览

管理台演示模式截图(数据加载完成后):

运维总览服务器资产

集群拓扑UI 控件博物馆

说明
运维总览健康 KPI、服务器状态墙、连接流、告警与调度概览
服务器资产注册待确认、身份 / 健康与资产运维
集群拓扑BC → 小区放射链路与异常边
UI 控件博物馆@beacon/ui 控件展示,见 docs/UI-WIKI.md
# 管理台演示(免登录 + mock)
pnpm --filter @beacon/web dev
# UI 控件博物馆
pnpm --filter @beacon/ui-wiki dev

为什么用 Beacon

痛点Beacon 的做法
多 BC + 上百子服靠配置硬维护Web 管理 namespace / BC 集群 / 大区 / 小区 / 子服与默认入口
误改 serverId 导致区数据串首启 identityId 绑定,后台确认后才可调度
业务插件直连中控难降级只走本机 Agent API;中控挂了可本地快照
跨服消息、选服失败难查调度决策、消息链路、连接明细与审计可追踪
插件与配置发布靠手工变更单 + 流式数据面 + 灰度批次与整单回滚

核心能力

  • Agent 自连接与身份绑定 — 地址 / token / namespace / serverId 接入;pending → 人工确认 → active
  • namespace 强隔离 — 默认禁止跨域调度与消息;跨域须后台显式信任并额外审计
  • 区服治理 — 环境、BC 集群、大区、小区、默认入口、排空(draining)
  • 健康调度 — TPS / CPU / 在线 / 连接 / 告警等综合评分;业务插件 scheduling() 取候选
  • 跨服消息 — 定向、RPC、主题广播、按玩家寻址;控制面存元数据与受控 payload(非业务库)
  • 可观测 — 运维总览、服务分析、拓扑、命令 / 审计 / 告警、连接与消息链路
  • 配置与交付 V2 — 作用域配置、文件资产、变更单灰度、热重载 / 重启生效、整单回滚
  • 热冷数据 — 近期热库;过期归档与冷查询;清理前必归档
  • 在线自更新(GA only) — 单二进制自我替换;只发现正式 GA,不把 RC 当自动更新源
  • 统一审批与受控正文 — 高风险写入由审批 worker 与执行回执同事务完成;敏感配置、文件、反向抓取和命令结果使用一次性授权读取
  • 资源生命周期与 MCP 自动化 — 归档、恢复、墓碑化均保留影响预览与审批轨迹;MCP 以 OAuth 客户端身份、最小权限和审批交接运行

架构一览

 浏览器 ──HTTP──┐
▼
┌──────────────────────────────────────────────┐
│ Beacon 控制面(Go 单二进制 + 内嵌 React) │
│ /admin/* 管理台 API /beacon/* agent API │
│ 内存:在线连接 · 健康 TTL · SSE │
│ MySQL:身份 · 区服 · 审计 · 指标 · 归档索引 │
└──────────────────────────────────────────────┘
▲ REST 注册/心跳/拉配置/上报 · SSE 推送
│
┌─────┴───────┬───────────────┐
▼ ▼ ▼
Agent Agent Agent (Kotlin / TabooLib)
Bukkit Bukkit Bungee 本地快照 fail-static

快速开始

1. 部署控制面

docker compose up -d # 单 Beacon 容器 + SQLite 持久卷# 管理台与 API:http://localhost:8848

浏览器打开 http://localhost:8848,使用 BEACON_ADMIN_USERNAME / BEACON_ADMIN_PASSWORD 登录。

也可直接跑单二进制(默认 SQLite、首启释放 config.yml)。生产若使用 MySQL,应自行提供外置数据库并在控制面配置中填写连接信息;Compose 不会创建 MySQL。完整的单机入门、集群搭建与功能教程见 docs/wiki/,日常运维见 docs/OPERATIONS.md

2. 接入 Agent

将对应版本的 BeaconAgent(Bukkit) / BeaconAgentProxy(Bungee) 放入插件目录,仅配置控制面 endpoint 列表与 namespace token。首次注册后在管理台 服务器 → 待确认 中批准身份、分配 serverId 与拓扑归属。

3. 业务插件(compileOnly)

repositories { mavenLocal() /* 或贵方私有仓库 */ }
dependencies {
compileOnly("top.wcpe.beacon:beacon-agent-api:<GA_VERSION>")
compileOnly("top.wcpe.beacon:beacon-agent-kit:<GA_VERSION>")
}

调度、消息、配置读取示例见 docs/SDK.md
运行期版本:部署的 Agent ≥ 编译所用 api/kit 版本。

4. 从源码构建

make package # 控制面单二进制(内嵌前端)+ 双端 agent jar# 或:make web · make build · make agent

需要 Go 1.26+、Node + pnpm、JDK 21。


文档

面向使用与接入(不含内部需求 / 路线图 / ADR):

文档说明
docs/UI-WIKI.mdUI 控件博物馆:启动、覆盖率门禁、新增控件流程
docs/wiki/运维使用 Wiki:全局大厅、BC 与 Agent 接入及玩家验收
docs/OPERATIONS.md部署 / 升级 / 备份 / 排障
docs/SDK.md业务插件接入 Agent API
SECURITY.md安全边界
CHANGELOG.md更新日志

许可

MIT License · Copyright (c) wcpe

About

Minecraft 服务器集群控制面:身份与拓扑治理、健康调度、审批审计、配置与交付。

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Beacon

面向 Minecraft 多群组服务器的集群调度中间件控制面
区服治理 · 健康调度 · 跨服消息 · 可观测审计 · 配置与交付

versionlicenseGoCI

Beacon 把多个 BungeeCord / Velocity 代理Bukkit / Paper 子服 串成可治理的集群:用独立 Go 控制面(内嵌 React 管理台,单二进制同端口)统一做身份绑定、区服分配、健康调度、跨服消息追踪、审计告警与灰度交付;游戏服只跑轻量 Kotlin / TabooLib Agent,业务插件只依赖本机 agent-api,禁止直连控制面。

控制面挂 ≠ 数据面挂:Agent 持本地快照 fail-static,控制面不可用时按快照继续跑,不阻断玩家进服。

发布状态:当前公开 GA 为 GitHub Release v1.0.01.1.0 已完成本地验收与发布基线固定,仍待远端 RC/GA 工作流创建不可变资产。正式 GA 以实际创建的 GitHub Release vX.Y.Z 为准;在线更新只消费严格 vX.Y.Z GA。


界面预览

管理台演示模式截图(数据加载完成后):

运维总览服务器资产

集群拓扑UI 控件博物馆

说明
运维总览健康 KPI、服务器状态墙、连接流、告警与调度概览
服务器资产注册待确认、身份 / 健康与资产运维
集群拓扑BC → 小区放射链路与异常边
UI 控件博物馆@beacon/ui 控件展示,见 docs/UI-WIKI.md
# 管理台演示(免登录 + mock)
pnpm --filter @beacon/web dev
# UI 控件博物馆
pnpm --filter @beacon/ui-wiki dev

为什么用 Beacon

痛点Beacon 的做法
多 BC + 上百子服靠配置硬维护Web 管理 namespace / BC 集群 / 大区 / 小区 / 子服与默认入口
误改 serverId 导致区数据串首启 identityId 绑定,后台确认后才可调度
业务插件直连中控难降级只走本机 Agent API;中控挂了可本地快照
跨服消息、选服失败难查调度决策、消息链路、连接明细与审计可追踪
插件与配置发布靠手工变更单 + 流式数据面 + 灰度批次与整单回滚

核心能力

  • Agent 自连接与身份绑定 — 地址 / token / namespace / serverId 接入;pending → 人工确认 → active
  • namespace 强隔离 — 默认禁止跨域调度与消息;跨域须后台显式信任并额外审计
  • 区服治理 — 环境、BC 集群、大区、小区、默认入口、排空(draining)
  • 健康调度 — TPS / CPU / 在线 / 连接 / 告警等综合评分;业务插件 scheduling() 取候选
  • 跨服消息 — 定向、RPC、主题广播、按玩家寻址;控制面存元数据与受控 payload(非业务库)
  • 可观测 — 运维总览、服务分析、拓扑、命令 / 审计 / 告警、连接与消息链路
  • 配置与交付 V2 — 作用域配置、文件资产、变更单灰度、热重载 / 重启生效、整单回滚
  • 热冷数据 — 近期热库;过期归档与冷查询;清理前必归档
  • 在线自更新(GA only) — 单二进制自我替换;只发现正式 GA,不把 RC 当自动更新源
  • 统一审批与受控正文 — 高风险写入由审批 worker 与执行回执同事务完成;敏感配置、文件、反向抓取和命令结果使用一次性授权读取
  • 资源生命周期与 MCP 自动化 — 归档、恢复、墓碑化均保留影响预览与审批轨迹;MCP 以 OAuth 客户端身份、最小权限和审批交接运行

架构一览

 浏览器 ──HTTP──┐
▼
┌──────────────────────────────────────────────┐
│ Beacon 控制面(Go 单二进制 + 内嵌 React) │
│ /admin/* 管理台 API /beacon/* agent API │
│ 内存:在线连接 · 健康 TTL · SSE │
│ MySQL:身份 · 区服 · 审计 · 指标 · 归档索引 │
└──────────────────────────────────────────────┘
▲ REST 注册/心跳/拉配置/上报 · SSE 推送
│
┌─────┴───────┬───────────────┐
▼ ▼ ▼
Agent Agent Agent (Kotlin / TabooLib)
Bukkit Bukkit Bungee 本地快照 fail-static

快速开始

1. 部署控制面

docker compose up -d # 单 Beacon 容器 + SQLite 持久卷# 管理台与 API:http://localhost:8848

浏览器打开 http://localhost:8848,使用 BEACON_ADMIN_USERNAME / BEACON_ADMIN_PASSWORD 登录。

也可直接跑单二进制(默认 SQLite、首启释放 config.yml)。生产若使用 MySQL,应自行提供外置数据库并在控制面配置中填写连接信息;Compose 不会创建 MySQL。完整的单机入门、集群搭建与功能教程见 docs/wiki/,日常运维见 docs/OPERATIONS.md

2. 接入 Agent

将对应版本的 BeaconAgent(Bukkit) / BeaconAgentProxy(Bungee) 放入插件目录,仅配置控制面 endpoint 列表与 namespace token。首次注册后在管理台 服务器 → 待确认 中批准身份、分配 serverId 与拓扑归属。

3. 业务插件(compileOnly)

repositories { mavenLocal() /* 或贵方私有仓库 */ }
dependencies {
compileOnly("top.wcpe.beacon:beacon-agent-api:<GA_VERSION>")
compileOnly("top.wcpe.beacon:beacon-agent-kit:<GA_VERSION>")
}

调度、消息、配置读取示例见 docs/SDK.md
运行期版本:部署的 Agent ≥ 编译所用 api/kit 版本。

4. 从源码构建

make package # 控制面单二进制(内嵌前端)+ 双端 agent jar# 或:make web · make build · make agent

需要 Go 1.26+、Node + pnpm、JDK 21。


文档

面向使用与接入(不含内部需求 / 路线图 / ADR):

文档说明
docs/UI-WIKI.mdUI 控件博物馆:启动、覆盖率门禁、新增控件流程
docs/wiki/运维使用 Wiki:全局大厅、BC 与 Agent 接入及玩家验收
docs/OPERATIONS.md部署 / 升级 / 备份 / 排障
docs/SDK.md业务插件接入 Agent API
SECURITY.md安全边界
CHANGELOG.md更新日志

许可

MIT License · Copyright (c) wcpe

About

Minecraft 服务器集群控制面:身份与拓扑治理、健康调度、审批审计、配置与交付。

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Beacon

面向 Minecraft 多群组服务器的集群调度中间件控制面
区服治理 · 健康调度 · 跨服消息 · 可观测审计 · 配置与交付

versionlicenseGoCI

Beacon 把多个 BungeeCord / Velocity 代理Bukkit / Paper 子服 串成可治理的集群:用独立 Go 控制面(内嵌 React 管理台,单二进制同端口)统一做身份绑定、区服分配、健康调度、跨服消息追踪、审计告警与灰度交付;游戏服只跑轻量 Kotlin / TabooLib Agent,业务插件只依赖本机 agent-api,禁止直连控制面。

控制面挂 ≠ 数据面挂:Agent 持本地快照 fail-static,控制面不可用时按快照继续跑,不阻断玩家进服。

发布状态:当前公开 GA 为 GitHub Release v1.0.01.1.0 已完成本地验收与发布基线固定,仍待远端 RC/GA 工作流创建不可变资产。正式 GA 以实际创建的 GitHub Release vX.Y.Z 为准;在线更新只消费严格 vX.Y.Z GA。


界面预览

管理台演示模式截图(数据加载完成后):

运维总览服务器资产

集群拓扑UI 控件博物馆

说明
运维总览健康 KPI、服务器状态墙、连接流、告警与调度概览
服务器资产注册待确认、身份 / 健康与资产运维
集群拓扑BC → 小区放射链路与异常边
UI 控件博物馆@beacon/ui 控件展示,见 docs/UI-WIKI.md
# 管理台演示(免登录 + mock)
pnpm --filter @beacon/web dev
# UI 控件博物馆
pnpm --filter @beacon/ui-wiki dev

为什么用 Beacon

痛点Beacon 的做法
多 BC + 上百子服靠配置硬维护Web 管理 namespace / BC 集群 / 大区 / 小区 / 子服与默认入口
误改 serverId 导致区数据串首启 identityId 绑定,后台确认后才可调度
业务插件直连中控难降级只走本机 Agent API;中控挂了可本地快照
跨服消息、选服失败难查调度决策、消息链路、连接明细与审计可追踪
插件与配置发布靠手工变更单 + 流式数据面 + 灰度批次与整单回滚

核心能力

  • Agent 自连接与身份绑定 — 地址 / token / namespace / serverId 接入;pending → 人工确认 → active
  • namespace 强隔离 — 默认禁止跨域调度与消息;跨域须后台显式信任并额外审计
  • 区服治理 — 环境、BC 集群、大区、小区、默认入口、排空(draining)
  • 健康调度 — TPS / CPU / 在线 / 连接 / 告警等综合评分;业务插件 scheduling() 取候选
  • 跨服消息 — 定向、RPC、主题广播、按玩家寻址;控制面存元数据与受控 payload(非业务库)
  • 可观测 — 运维总览、服务分析、拓扑、命令 / 审计 / 告警、连接与消息链路
  • 配置与交付 V2 — 作用域配置、文件资产、变更单灰度、热重载 / 重启生效、整单回滚
  • 热冷数据 — 近期热库;过期归档与冷查询;清理前必归档
  • 在线自更新(GA only) — 单二进制自我替换;只发现正式 GA,不把 RC 当自动更新源
  • 统一审批与受控正文 — 高风险写入由审批 worker 与执行回执同事务完成;敏感配置、文件、反向抓取和命令结果使用一次性授权读取
  • 资源生命周期与 MCP 自动化 — 归档、恢复、墓碑化均保留影响预览与审批轨迹;MCP 以 OAuth 客户端身份、最小权限和审批交接运行

架构一览

 浏览器 ──HTTP──┐
▼
┌──────────────────────────────────────────────┐
│ Beacon 控制面(Go 单二进制 + 内嵌 React) │
│ /admin/* 管理台 API /beacon/* agent API │
│ 内存:在线连接 · 健康 TTL · SSE │
│ MySQL:身份 · 区服 · 审计 · 指标 · 归档索引 │
└──────────────────────────────────────────────┘
▲ REST 注册/心跳/拉配置/上报 · SSE 推送
│
┌─────┴───────┬───────────────┐
▼ ▼ ▼
Agent Agent Agent (Kotlin / TabooLib)
Bukkit Bukkit Bungee 本地快照 fail-static

快速开始

1. 部署控制面

docker compose up -d # 单 Beacon 容器 + SQLite 持久卷# 管理台与 API:http://localhost:8848

浏览器打开 http://localhost:8848,使用 BEACON_ADMIN_USERNAME / BEACON_ADMIN_PASSWORD 登录。

也可直接跑单二进制(默认 SQLite、首启释放 config.yml)。生产若使用 MySQL,应自行提供外置数据库并在控制面配置中填写连接信息;Compose 不会创建 MySQL。完整的单机入门、集群搭建与功能教程见 docs/wiki/,日常运维见 docs/OPERATIONS.md

2. 接入 Agent

将对应版本的 BeaconAgent(Bukkit) / BeaconAgentProxy(Bungee) 放入插件目录,仅配置控制面 endpoint 列表与 namespace token。首次注册后在管理台 服务器 → 待确认 中批准身份、分配 serverId 与拓扑归属。

3. 业务插件(compileOnly)

repositories { mavenLocal() /* 或贵方私有仓库 */ }
dependencies {
compileOnly("top.wcpe.beacon:beacon-agent-api:<GA_VERSION>")
compileOnly("top.wcpe.beacon:beacon-agent-kit:<GA_VERSION>")
}

调度、消息、配置读取示例见 docs/SDK.md
运行期版本:部署的 Agent ≥ 编译所用 api/kit 版本。

4. 从源码构建

make package # 控制面单二进制(内嵌前端)+ 双端 agent jar# 或:make web · make build · make agent

需要 Go 1.26+、Node + pnpm、JDK 21。


文档

面向使用与接入(不含内部需求 / 路线图 / ADR):

文档说明
docs/UI-WIKI.mdUI 控件博物馆:启动、覆盖率门禁、新增控件流程
docs/wiki/运维使用 Wiki:全局大厅、BC 与 Agent 接入及玩家验收
docs/OPERATIONS.md部署 / 升级 / 备份 / 排障
docs/SDK.md业务插件接入 Agent API
SECURITY.md安全边界
CHANGELOG.md更新日志

许可

MIT License · Copyright (c) wcpe

About

Minecraft 服务器集群控制面:身份与拓扑治理、健康调度、审批审计、配置与交付。

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages