桌面 GUI(Electron)
本文档由 README 拆分而来:Headless 与 Desktop 两种产物、构建与运行。 返回 README。
桌面 GUI(Electron)
可选独立产物,面向内网桌面端用户:内嵌 ModelRouter 核心(桌面壳形态), 一键启停、系统托盘常驻、开机自启、静默启动,内容区一比一内嵌完整 WebUI (状态/对话/密钥/优先级/源/适配器 六个页面,免登录)。服务器用户继续使用纯 Go 二进制。
两种安装包:Headless 与 Desktop
发布到 Release 的安装包分为两类,面向不同用户:
- Headless(服务器版):纯核心二进制(无 Electron),配置驱动,适合服务器、
容器、systemd 等无人值守场景。发布包含
deb+rpm(含 systemd unit、内存调优 与示例配置)与tar.gz(二进制 +config.example.yaml+adapters/+ README), Windows 为.zip。 - Desktop(桌面版):Electron GUI 安装包,内嵌核心,适合个人桌面日常使用。
选择 GUI 还是纯后端
| 场景 | 推荐 | 理由 |
|---|---|---|
| 服务器 / 内网网关 / 无人值守常驻 | Headless(单二进制) | 极轻量(二进制 ~8MB;RSS 随源数量,单源 ~10MB、16 源 ~32–35MB,见内存占用),零依赖单进程,直接跑在 systemd/任意容器里,远程管理 |
| 个人桌面日常使用 / 多设备内网共享 | Desktop(GUI) | 免登录内嵌 WebUI、系统托盘一键启停、开机自启、静默后台,适合不懂命令行的使用者 |
| Windows 桌面 | Desktop | 纯后端在 Windows 上需自行注册服务,GUI 提供原生托盘/自启体验 |
| CI 一键出三平台安装包 | Desktop 打包脚本 | make gui-* 系列出 deb/AppImage/NSIS,可进发行流水线 |
两者完全同源:GUI 内嵌的就是纯后端的同一份 modelrouter 核心(LuaJIT 版),
配置/适配器格式完全一致,可随时互换。
构建与运行
cd cmd/gui
npm install
make gui # 或 npm run dev —— 开发运行(需先 make build 生成 bin/modelrouter)
make gui-deb # 本机构建 deb(分享给其它 Linux 用户)
make gui-dist # 构建 deb + rpm + AppImage(linux,rpm 需系统 rpmbuild)
make core-dist # 构建核心 deb + rpm + tar.gz(服务器版,需 nfpm)
make gui-win # 构建 Windows nsis 安装包(本机 mingw + wine)
make gui-win-docker # 构建 Windows nsis 安装包(全 docker 自足,含 wine)
make gui-dist-dir # 仅解包产物(调试用,不产安装包)
产物在 cmd/build/gui-dist/:ModelRouter-<ver>.AppImage、
modelrouter-gui_<ver>_amd64.deb、ModelRouter Setup <ver>.exe(win);
核心包在 cmd/build/dist/:modelrouter_<ver>_amd64.deb、modelrouter-<ver>.x86_64.rpm。
rpm 需系统 rpmbuild。每次打包后都会跑 packaging/verify-dist.sh 产物体检
(大小下限门禁——1.3.0 曾因宿主 wine 损坏产出 264KB 的残缺 exe 却没有被拦住)。
发布时会把产物重命名为 ModelRouter-Desktop-*(GUI)与 ModelRouter-Headless-*(纯后端)
两类上传到 GitCode Release。
Windows 打包(docker 固化方案,推荐)
make gui-win-docker 一步完成:交叉编译核心 + NSIS 打包全在 docker 内,宿主机
无需 mingw、无需 wine、无需 node。镜像内置 wine(含 i386 运行时),修复了
此前宿主 wine 损坏(缺 syswow64 → c0000135)导致产出 264KB 残缺 exe 的问题。
- 构建镜像:
cmd/gui/docker/win-builder/Dockerfile(golang:1.25+ mingw-w64 + node + wine32/wine64 + 预编译 LuaJIT windows 版lua51.dll与 import lib)。 LuaJIT 源码取自国内镜像,上游兜底;Go 依赖走https://goproxy.cn。 - 一键发布:
cmd/gui/scripts/dist-win-docker.sh—— 核心编译 + electron-builder NSIS 全部在容器内执行(USE_SYSTEM_WINE=true走镜像内的 wine);electron-builder 的 ~400MB 工具链缓存挂到 docker volume,二次构建增量复用。 - 首次运行自动构建
modelrouter/win-builder镜像(约 5–10 分钟);已存在则直接复用。 - 打包完成后自动跑
packaging/verify-dist.sh门禁:exe 低于 5MB / deb·rpm·7z 低于 10MB 即失败——残缺安装包不可能再溜进 Release。
# 全 Windows 发布(核心重编 + NSIS):
make gui-win-docker
特性
- 内嵌核心:自动拉起捆绑的
modelrouter(LuaJIT 版),配置/密钥/adapter 存于 用户数据目录<userData>/profile/,首次运行自动生成随机 admin key 写入keys(非 seed)并自注入,WebUI 免登录、不会提示"更换初始密钥"。端口可在设置中更改(默认 8787)。 - 系统托盘:内核状态点、开机自启/静默启动开关、启停/重启内核、退出。
- 静默启动:
--silent参数或设置项,启动仅驻托盘不弹窗;首次运行始终显示窗口。 - 开机自启:Windows/macOS 用
setLoginItemSettings;Linux 写~/.config/autostart/modelrouter-gui.desktop,静默开启时自动附加--silent。