modify:进程插件开发环境目录结构变更

This commit is contained in:
2026-08-25 17:03:35 +08:00
parent d8cb69bb6b
commit 741d7cda09
5 changed files with 188 additions and 104 deletions
+20 -13
View File
@@ -366,7 +366,7 @@ load_mode = "external" # 独立进程运行,经 Zenoh 注册路由
- 网关进程内 import;路由由网关盘扫 TOML 生成;契约校验在网关启动时执行
**external 进程插件**(本地开发目录 `workers/`,不入库):
**external 进程插件**(本地开发目录 `workers/`,自包含项目,不入库):
- 与网关**零导入关系**:只依赖 `chongming-worker` SDK + zenoh,仅经 Zenoh 通讯
- 路由注册:worker 启动时 put 描述符到 `chongming/routes/<type>/...`,退出时 delete;每 10s 周期重发布自愈
@@ -376,12 +376,15 @@ load_mode = "external" # 独立进程运行,经 Zenoh 注册路由
路由注册与网关侧插件盘扫(`config/workers/*/config.toml`)解耦:**网关容器无需
放置 external 插件的配置文件**,盘扫发现的 external 条目仅用于启动日志观测;
inline 插件仍按盘扫在网关进程内加载,不受影响
- 代码结构与 inline 插件完全一致(Plugin 基类 + router/ + models/),示例见本地 `workers/demo/`
- 运行:
- 每个插件是**自包含项目**(`workers/<name>/` = 打包 zip 根 = 容器工作目录,
开发即产物),代码结构与 inline 插件完全一致(Plugin 基类 + router/ + models/),
示例见本地 `workers/demo/`;新项目用 `uv run gen_plugin <name> --process` 生成骨架
- 运行(在插件项目根 `workers/<name>/` 下):
```bash
uv run worker_serve --type demo # 本地调试
chongming-worker --type demo # 容器入口(chongming-worker SDK console script)
cd workers/demo
uv run worker_serve --type demo # 本地调试(首次先 uv sync 装依赖)
./start.sh # 与容器一致的启动方式(uv sync + 启动)
```
- 生产部署:进程插件与网关**分别打包到不同容器**
@@ -391,28 +394,32 @@ load_mode = "external" # 独立进程运行,经 Zenoh 注册路由
### 进程插件打包
将 external 进程插件一键打包为可部署 zip(插件代码 + 配置 + 依赖清单 + 容器入口):
`build_plugin` 把插件项目根直接压缩为可部署 zip(开发目录即产物,
插件代码 + 配置 + 依赖清单 + 容器入口都在 `workers/<name>/` 内):
```bash
uv run build_plugin demo # → dist/demo.zip
uv run build_plugin demo --output /tmp/pkg
```
产物布局(zip 根即容器工作目录):
产物布局(= 项目根,zip 根即容器工作目录):
```text
workers/<name>/ 插件代码(模块 workers.<name>)
config/workers/<name>/ 插件注册 + 端点配置
config/zenoh_config.json5 Zenoh 会话配置
config.toml 最小根配置(自动生成,仅 [zenoh] 节,不泄露网关配置)
config.toml 最小根配置(仅 [zenoh] 节,worker 启动必需)
pyproject.toml uv 依赖清单(chongming-worker 内网 git 源)
start.sh 容器入口:uv sync + worker_serve --type <name>
```
- 插件扩展依赖(可选):在 `workers/<name>/requirements.txt` 中逐行声明,打包时自动合并进 `pyproject.toml` 的 dependencies
- 打包自动排除 `__pycache__` / `*.pyc` / `.venv` 等,`start.sh` 权限强制 0o755
- 插件扩展依赖(可选):直接在项目根 `pyproject.toml` 的 dependencies 中追加
- 容器内部署:`unzip <name>.zip -d /app && cd /app && ./start.sh`(镜像需预装 uv)
- 打包前校验:`workers/<name>/` 与 `config/workers/<name>/config.toml` 必须存在,`load_mode` 非 `external` 时告警
- `config/workers/<name>/` 仅部署在**插件容器**(worker 自读);网关侧无需放置(RouteRegistry 常驻订阅 Zenoh 路由描述符,与盘扫解耦)
- 打包前校验:`workers/<name>/` 项目根、项目内 `config/workers/<name>/config.toml`
(含 `[workers]` 节)、`config/zenoh_config.json5` 与根 `config.toml`(含 `[zenoh]`)必须存在,
`load_mode` 非 `external` 时告警
- 插件配置随 zip 部署在**插件容器**(worker 自读);网关侧无需放置(RouteRegistry 常驻订阅 Zenoh 路由描述符,与盘扫解耦)
---
@@ -562,7 +569,7 @@ uv pip install -e utils/<name> # 安装/更新工具包
| **doubao** | `src/plugins/doubao/` | 豆包视觉理解,支持 AICC 安全通信通道 |
| **aibox_sophon_adapter** | `src/plugins/aibox_sophon_adapter/` | AI Box 设备心跳监控、离线检测、告警上报与查询、视频上传 |
| **example** | `src/plugins/example/` | 四则运算 + 心跳演示(含 MQTT 端点示例) |
| **demo**(进程插件示例) | `workers/demo/`(本地目录,不入库) | 独立进程运行(load_mode=external),经 Zenoh 注册路由 |
| **demo**(进程插件示例) | `workers/demo/`(本地自包含项目,不入库) | 独立进程运行(load_mode=external),经 Zenoh 注册路由 |
---
@@ -634,7 +641,7 @@ uv run build --only mbank,prepare,vue
```bash
uv run serve # 启动开发服务器
uv run gen_plugin <name> # 生成统一风格插件骨架
uv run gen_plugin <name> # 生成统一风格插件骨架(--process 生成进程插件项目)
uv run gen_models # 生成 Pydantic 模型
uv run build pyinstaller # PyInstaller 打包
uv run build nuitka # Nuitka 打包