Files
aaaamoooo 3951134940
CI / test (push) Canceled after 0s
CI / anytls-smoke (push) Canceled after 0s
feat: Go port of the panel in panel-go/ — drop-in replacement for server.js
Pure-stdlib Go implementation of the whole control plane: same
nexusgate.json schema (unknown fields preserved verbatim, explicit
null/false tri-states modeled), same HTTP API and error strings,
embedded frontend (NG_PUBLIC_DIR override), self-implemented scrypt
auth, X25519 Reality keys, panel-hosted keyStore and heartbeat
reconciliation included. Version stays 0.6.8.

Verified: Go tests 33/33 (scrypt + Reality vectors generated from
the Node implementation, subscription goldens byte-identical),
Node suite 52/52 untouched, differential E2E against the Node
panel 50/50 including two-way DB swap. See panel-go/PARITY.md
and panel-go/INSTALL-GO.md.
2026-10-20 08:21:54 +00:00

70 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# NexusGate 面板 Go 版 — 部署与回滚(路由器主控)
Go 版面板是单文件静态二进制:前端已 embed、零运行时依赖、读写与 Node
版**同一个** `nexusgate.json`。切换只是把 procd 的启动命令从 node 换成
二进制,环境变量与数据文件都不动;agent 协议与版本串(0.6.8)不变,
节点机无需任何改动。
## 产物
| 架构 | 文件 | 用途 |
|---|---|---|
| arm64 | `nexusgate-panel-linux-arm64` | AX6600 路由器(主控) |
| amd64 | `nexusgate-panel-linux-amd64` | x86 服务器/VPS |
## 部署(OpenWrt 主控)
1. 把 arm64 二进制放到路由器,如 `/opt/nexusgate/nexusgate-panel`:
```sh
chmod +x /opt/nexusgate/nexusgate-panel
```
2. 先单独冒烟(用现有库与空闲端口,不停现服务):
```sh
NG_DATA_FILE=/etc/nexusgate/data/nexusgate.json NG_PORT=8899 /opt/nexusgate/nexusgate-panel
# 另一终端: curl http://127.0.0.1:8899/healthz → {"ok":true,"version":"0.6.8",...}
```
数据库已有管理员用户,不会触发 BOOTSTRAP;冒烟完 Ctrl-C 停掉。
3. 改 procd 服务 `/etc/init.d/nexusgate` 的启动命令:把
`node ... server.js`(含其参数)换成二进制路径,**其余保持不变**
(`NG_DATA_FILE` 等 env、respawn、procd 的 env 文件引用都不要动):
```
procd_set_param command /opt/nexusgate/nexusgate-panel
```
若原服务通过 `/etc/nexusgate.env` 注入环境变量,Go 版读的是同名
变量(NG_DATA_FILE、NG_HOST、NG_PORT、NG_COOKIE_SECURE、
NG_ADMIN_USERNAME、NG_ADMIN_PASSWORD),无需改动。
4. 重启并验证(**只用 init 脚本,不要手动起进程**):
```sh
/etc/init.d/nexusgate restart
curl http://127.0.0.1:8787/healthz
```
再开面板确认:登录、概览计数、节点列表、任务队列、订阅链接各看一眼。
5. 可选:`NG_PUBLIC_DIR=/opt/nexusgate/public` 可让面板改从磁盘目录
读前端(调试前端时免重编);不设则用二进制内嵌的前端。
## 回滚
把 `/etc/init.d/nexusgate` 的启动命令改回原来的 `node ... server.js`,
`/etc/init.d/nexusgate restart` 即可。数据文件未做任何格式变更,
Node 版直接读 Go 版写过的库(已在差分测试中双向验证)。
## 备注
- 内存参考(沙箱实测、同一种子库):Go 版空闲 VmRSS 约 10.5MB,
一轮登录+列表请求后约 30MB(Go 堆保留口径);Node 版空闲约 66MB
(生产路由器实测约 54MB)。
- 二进制本体不含 data/,更新面板不会触碰数据库;更新前仍建议在
面板设置页下载一份 JSON 备份。
- agent 侧(各节点机)与本次切换无关,仍用现有 Go agent。