概述:这是什么
这是「魔法纪录复兴计划」的服务端。如果你想为本计划的客户端(一个安卓 APK)搭一个自己的后端,你来对地方了。
本章面向只想把服务器跑起来的人 —— 不需要读 Go 源码,照着做即可。
服务端负责什么
客户端是装在玩家手机上的 APK,不可信。所有关键判断都放在服务端:
mermaid
flowchart LR
C["📱 客户端 APK"] -->|"① 握手 /client/init"| S["🖥️ 业务节点"]
S -->|"版本能不能玩 / 要不要更新<br/>是否被封禁 / 资源去哪下<br/>签名节点目录"| C
C -->|"② 登录 / 云存档"| S
C -->|"③ 下资源"| R["📦 资源镜像<br/>(业务节点 or 边缘节点 or CDN)"]具体来说,服务端提供:
| 能力 | 说明 |
|---|---|
| 客户端握手 | 校验版本/签名/渠道,下发服务器状态、资源镜像列表、更新提示、伪装字段 |
| 账号系统 | 注册、登录、找回密码(邮箱验证码)、云存档同步 |
| 资源分发 | 在线下载(镜像组 + S3 自发现)、离线整包、热更新包 |
| 封禁与风控 | 设备封禁、版本闸门、限流、PoW 人机验证 |
| 管理后台 | 浏览器里可视化管理上述一切(12 个页面) |
| 用户中心 | 玩家自助管理设备、存档、邮箱、密码 |
节点与面板
mermaid
flowchart TB
Panel["🖥️ 面板 panel(可选)<br/>节点注册表 + WS 监控"]
subgraph B["业务节点 node·business(必需)"]
DB[("数据库")]
API["全部业务 API + 管理后台"]
RES1["本地资源 /res (可选)"]
end
subgraph E["边缘节点 node·edge(可选)"]
RES2["本地资源 /res"]
end
Panel -.->|"WS 管控(遥测/指令)"| B
Panel -.->|"WS 管控(遥测/指令)"| E- 业务节点(
CNV_NODE_ROLE=business) — 必需。持有数据库与全部业务逻辑、管理后台、(可选)本地资源分发,并挂管控 WS。 - 边缘节点(
CNV_NODE_ROLE=edge) — 可选。只做本地资源分发,不需要数据库。由签名节点目录告诉客户端去哪就近下载。 - 面板(panel) — 可选。通过管控 WebSocket 连接并监控各节点、维护节点注册表;节点首次启动生成的连接密钥复制到面板即完成配对。
只跑一个业务节点就能完整工作。边缘节点 + 面板是用来在多地分摊下载带宽、集中监控的,等有需要再加。
技术栈一览
| 层 | 选型 |
|---|---|
| 语言/运行时 | Go(单二进制,CGO_ENABLED=0 可静态编译) |
| Web 框架 | go-chi 路由 + 自研中间件 |
| 数据库 | PostgreSQL / MySQL / SQLite 三选一 |
| 前端面板 | React + 浏览器内 Babel,无构建步骤(直接发 .jsx) |
| 验证码 | 内置 PoW(SHA-256 leading-zero),无需第三方 |
没有 Redis、没有消息队列、没有前端构建链 —— 刻意保持单二进制 + 一个数据库的极简部署。
最小部署长什么样
一台云服务器 + 一个数据库,五分钟可跑通:
bash
export CNV_DB_URL='sqlite:///srv/magireco/magireco.db' # 单机最简:SQLite
export CNV_ADMIN_JWT_SECRET='换成你自己的 32+ 字符随机串'
go run ./cmd/node # 默认监听 :8080然后用 admintool 建第一个管理员,登录后台即可。完整步骤见 快速部署。
