modify:进程插件开发环境目录结构变更
This commit is contained in:
@@ -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 打包
|
||||
|
||||
Reference in New Issue
Block a user