2026-05-20 21:39:12 +08:00

71 lines
3.4 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.

---
title: Windows Runtime 与安装器
created: 2026-04-26
updated: 2026-04-26
type: concept
tags: [deploy, backend, config]
sources: [packages/backend/src/comm/, packages/backend/src/modules/base/controller/app/runtime.ts, packages/backend/scripts/pkg-build.js, packages/backend/scripts/build-windows-installer.js, packages/backend/installer/setup.iss, packages/windows-tray/]
---
# Windows Runtime 与安装器
Windows runtime 是 2026-04-25 后新增的本地部署子系统,目标是把后端打包成 `backend.exe`,再配合 .NET 托盘程序和 Inno Setup 安装器运行。它和 [[project-overview]] 的开发态不同,重点处理配置文件、数据目录、运行时状态、进程生命周期和本机控制接口。
## 组件
| 组件 | 路径 | 职责 |
|------|------|------|
| 后端可执行文件 | `packages/backend/scripts/pkg-build.js` | 使用 pkg/yao-pkg 打包后端 |
| 安装器构建 | `packages/backend/scripts/build-windows-installer.js` | 构建 backend.exe、发布托盘 exe、调用 Inno Setup |
| 安装器脚本 | `packages/backend/installer/setup.iss` | 生成 Windows 安装包 |
| 托盘程序 | `packages/windows-tray/Neta.Tray/` | 启动/附着/停止后端,打开系统、日志、配置目录 |
| 运行时控制 API | `modules/base/controller/app/runtime.ts` | `/app/base/runtime/status``/stop` |
| 配置加载 | `comm/config-loader.ts` | pkg 模式读取 `config.yaml` |
| 数据目录 | `comm/data-dir.ts` | 统一可写路径 |
| runtime info | `comm/runtime-info.ts` | 写入 pid、端口、URL、控制密钥、目录信息 |
## 配置与数据目录
pkg 模式下,后端要求 `config.yaml``backend.exe` 同目录。配置必须包含:
- `server.port`
- `data.dir`
- `database.host/username/database`
- `autoOpenBrowser`
数据目录解析顺序:
1. 外部配置的 `data.dir`
2. 环境变量 `NETA_DATA_DIR`
3. pkg 模式下的 `<exe-dir>/data`
4. 开发态下的 `<cwd>/dist`
这条规则影响 SQLite 记忆、Session Tree file provider、skill 目录、日志、runtime info 等所有可写路径,避免安装目录和源码目录混用。
## 托盘控制
托盘程序会读取安装目录中的 runtime 信息,如果后端已就绪就附着;否则启动 `backend.exe` 并等待 runtime info 可用。菜单能力包括:
- 打开系统:使用后端返回的本机 URL。
- 重启服务:先走 `/stop`,再重新启动后端。
- 停止服务:先尝试控制 API超时后按 pid 和安装目录内 backend 进程强制结束。
- 打开日志目录 / 配置目录。
- 退出程序:停止后端并退出托盘。
控制 API 只允许 loopback 地址,并通过 `x-neta-tray-secret` 校验 `NETA_TRAY_SECRET`,避免远程请求停止本机服务。
## 构建与部署边界
- `config.prod.ts` 从外部配置读取数据库和端口,并保持 EPS 在后端生产配置里关闭。
- 前端生产配置使用 same-origin API base URL安装器场景下避免协议相对 URL 和双斜杠。
- SPA history fallback 在后端静态文件服务中兜底,支持刷新前端路由。
- bundled skills 会进入安装包,运行时按需初始化 skill 目录和 tool catalog。
## 相关页面
- [[project-overview]] — Monorepo 和部署入口
- [[skill-system]] — bundled skills 与运行时 skill 目录
- [[memory-system]] — SQLite 记忆路径受 dataDir 影响
- [[session-tree-runtime]] — file provider 的 rootDir 受 dataDir 影响
- [[base-module]] — runtime 控制接口挂在 base 模块下