# 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。