introduction - yumi-furry/AstralGame-cli GitHub Wiki
项目概述
Astral Game P2P Server(astral-server)是基于 EasyTier 开发的服务器版 Astral 联机工具,适配 Debian/Ubuntu 无头服务器。内置 Web 管理界面,可通过浏览器管理服务器、创建/加入房间。当前版本 1.5.1_1。
核心特性
- 联机:创建房间 / 加入房间(支持短码、
AG1.离线串、完整链接) - 成员:房间内成员列表自动过滤中继节点,仅显示真实用户;本机标记「本机」
- 编辑资料:自定义昵称、emoji 图标、上传头像图片;昵称与头像通过 peer-RPC
user.getInfo广播给房间内客户端(与 Astral Game 客户端互通) - 网络设置:可开关「禁用 P2P 打洞」(仅走中继转发)、TUN 虚拟网卡与静态虚拟 IP
- 守护进程:开机自动加入或自动创建预设房间(二选一),服务器重启免人工
- WebSocket 推送:房间内容、房间码、运行状态变动时自动广播给已连接的第三方服务(1.4.2_4 起还支持第三方服务发送控制指令)
- 邮件通知:SMTP 配置后,房间码变动自动发送同风格 HTML 邮件,支持测试邮件、一键发送当前房间详情、模板可自由编辑
- 配色方案:设置页内置昼间 5 种 + 夜间 5 种(共 10 种)配色,本地记忆
- 服务器:添加/编辑/删除中继服务器,一键测速查看延迟
- 设置:查看运行状态、编辑配置、管理进网凭据、查看实时日志、在线检查更新
- 响应式面板(1.5.1_1 起):适配手机 / 平板 / 电脑三种视口,窄屏自动折叠侧边栏
- 操作记录(1.5.1_1 起):登录、登出与全部修改操作按 IP 记录,保留 14 天并实时滚动
适用场景
- Debian / Ubuntu 无头服务器(无需图形界面);
- 需要长时间稳定在线、重启后自动恢复房间的游戏联机服务器;
- 面向第三方插件(如 AstrBOT)开放房间状态推送与控制能力。
整体架构
单进程内嵌四层:
┌────────────────────────────────────────────────┐
│ Web 管理端(单页前端,编译时内嵌 index.html) │
├────────────────────────────────────────────────┤
│ Axum HTTP 层:REST API + WebSocket 事件推送 │
│ 鉴权:Cookie 会话(面板)/ Basic Auth / ws_key │
├────────────────────────────────────────────────┤
│ 业务层:房间管理、服务器列表、凭据、SMTP、更新 │
│ 事件中心:一处发布,同时驱动 WS 广播与通知邮件 │
├────────────────────────────────────────────────┤
│ EasyTier 内核:组网节点、TUN、P2P 打洞、中继 │
└────────────────────────────────────────────────┘
源码模块划分
| 模块 | 职责 |
|---|---|
main.rs |
入口:解析 run / init / export-web 子命令,组装共享状态,启动 HTTP 服务 |
config.rs |
config.toml 的加载、解析、写回与示例配置生成 |
http.rs |
Axum 路由装配与鉴权中间件(Cookie 会话优先,Basic Auth 兼容) |
api.rs |
REST API 处理器(登录、房间、服务器、凭据、SMTP、更新等) |
ws.rs |
WebSocket:面板事件推送 + 第三方服务密钥接入 + 控制指令协议 |
notify.rs |
事件中心:一处发布,同时驱动 WebSocket 广播与通知邮件 |
invite.rs |
AG1. 离线邀请串 / 短码 / 分享链接的生成与解析 |
mailer.rs |
SMTP 发信(房间变动通知、测试邮件,模板可外置编辑) |
node.rs |
EasyTier 实例生命周期:启动/停止/重启、事件日志、状态快照、凭据 |
peer_rpc.rs |
EasyTier 应用层 peer-RPC 入站处理(向客户端广播昵称/头像) |
status.rs |
EasyTier 运行信息 → 前端节点列表 DTO 的转换 |
store.rs |
本地文件持久化(servers.json 服务器列表、avatar.bin 头像) |
audit.rs |
操作记录:登录 / 登出 / 修改操作按 IP 留痕,落盘 audit_log.json(保留 14 天),并实时广播 audit 事件 |
update.rs |
在线更新:检查 GitHub Releases、下载替换二进制、systemctl 重启 |
web.rs |
通过 include_str! 内嵌的单文件 Web 管理端 |
部署目录
/opt/astral-server/ # 部署后统一目录
├── astral-server # 可执行文件
├── config.toml # 配置文件(Web 端口、账号密码等)
├── servers.json # 服务器列表数据(自动生成)
├── audit_log.json # 操作记录(保留最近 14 天,自动生成)
└── Email/ # 邮件模板(首次运行自动生成,可自由编辑)
├── room_notification.html # HTML 模板
└── room_notification.txt # 纯文本模板
所有运行期数据(config.toml、servers.json、avatar.bin、Email/ 模板)统一放在可执行文件同目录,单目录即可维护整套服务。