Files

48 lines
2.7 KiB
Markdown
Raw Permalink Normal View History

# PlantAI 桌面端(Electron 瘦客户端)
把 PlantAI 的 Vue 单页应用(`ui/`)封装成 Electron 桌面 App。**后端(Python/BFF/向量库)不打包进 App**,桌面端只是指向后端的瘦客户端。本仓库只含前端 + Electron 壳,与后端 monorepo 分离。
## 目录结构
- 根目录 = Electron 壳(`main.js` / `server.js` / `config.js` / `preload.js` / `settings.html` / `package.json`)。
- `ui/` = 前端 Vue 3 + Vite 单页应用(全部功能)。
## 原理
- Electron 主进程内起一个**只监听 `127.0.0.1`** 的本地 HTTP 服务(`server.js`):
- 静态托管 `renderer-dist`(即 `ui/dist` 的副本);
- 把 `/api` 反代到**可配置的后端地址(BFF)**。
- 前端源码 `ui/` **零改动**、后端 **CORS 零改动**:相对路径 `/api` 与 SSE 流靠同源天然可用。
- 后端各服务地址配置(`config.js`,存 `userData/config.json` 的 `services` 对象;应用内菜单「设置 → 后端服务地址…」逐项修改,保存后重载):
- `bff`(8090,总入口)、`qa`(8091)、`rag`(8092)、`legacy`(8093)、`vstore`(8094)、`paper`(8097)、`bioflow`(8098)——每项都可指向本机或其它服务器。
- `PLANTAI_BFF_URL` 环境变量可覆盖 `bff`(脚本/CI 用)。
- **关于多服务路由**:前端只调用 `/api/*`,`bff`(BFF)是唯一入口;反代把 `/api` 转到 `bff`,由 BFF 内部再路由到 qa/rag/vstore/paper/bioflow。因此要把某个服务挪到别的服务器,需改 BFF 自己的配置(`sdk/app/config.py` 的 `qa_base_url` / `rag_base_url` / `rag_legacy_base_url` / `vstore_base_url` / `paper_writer_url` / `bioflow_service_url`,或用 `.env` 覆盖);桌面端设置里其余服务的地址当前仅作记录/预留。
## 环境要求
- Node.js ≥ 18、npm。
## 开发运行
```bash
npm install
npm run build:ui # 构建 ui/ 并复制产物到 renderer-dist/
npm start # 启动 Electron 窗口
```
## 打包
```bash
npm run dist:linux # AppImage + deb
npm run dist:win # NSIS 安装包 + portable
npm run dist:mac # dmg + zip(必须在 macOS 上构建)
```
## 跨平台注意事项
- `package.json` 的 `author` / `homepage` 为占位值,发布前请替换为真实作者与主页(deb 等安装包会写入这些元数据)。
- **macOS 安装包必须在 macOS 机器上构建**(或 macOS CI);Linux 无法产出 dmg。
- **Windows 可从 Linux 交叉打包**,个别步骤(图标/rcedit)可能依赖 wine;更稳的方式是用 CI 三平台矩阵产出。
- 应用图标:`build/icon.png`(512×512,PNG)。electron-builder 会据此自动派生 `.ico`/`.icns`;未提供时使用默认 Electron 图标。
- **后端可达性**:桌面端要能访问配置的后端地址(公网 HTTPS / VPN / SSH 隧道均可),属网络环境问题,非代码范围。