Expose a management DELETE endpoint that refuses to remove an active Deployment, delegates Actor and compiled Component cleanup to Runtime, and removes stored artifacts. Reconcile Toasty snapshots by deleting absent service and Deployment rows so removed revisions do not reappear after restart. Persist unregister lifecycle events and verify active-revision protection, artifact deletion, Runtime cleanup, and restart behavior.
Wasmeld Console
wasmeld-console 是 wasmeld-runtime 的本地 HTTP 管理适配器。它负责:
- 接收
.wasmpkg,校验并保存component.wasm与运行时 manifest - 发布、查询和下载不可变的二进制 WIT Package
- 启动、停止和重启内嵌的
wasmeld-runtime - 启动、停止和重启常驻 Actor
- 管理服务 ID 到活动版本的 Deployment
- 通过独立 Gateway 转发原始二进制调用
- 为导入
wasmeld:kv/store@0.1.0的 Component 提供持久化 KV - 暴露调用计数、状态和最近事件
Wasm 制品保存在本地文件系统。服务 manifest、调用计数和最近 256 条事件通过
Toasty 写入本地 libSQL 数据库,默认路径是
var/wasmeld/console.db。Deployment 也存储在同一数据库中。
Host KV 使用 (service_id, key) 复合主键存储在该数据库中:同一服务的 Revision
共享数据,不同服务互相隔离,Runtime 或 Console 重启不会清空 KV。
wasmeld-console 启动时会在同一进程内创建 wasmeld-runtime、加载 Wasmtime Engine,
并重新注册已保存的 Component。Runtime 停止后 Console HTTP 和数据库仍然在线;
再次启动 Runtime 会重新注册 Component。未部署的版本恢复为 stopped;Deployment
指向的版本会用空初始化配置创建新的 Actor。Actor 的 Store 和线性内存不做快照。
启动
wasmeld-console 需要 Rust 1.95 或更高版本;Wasm 组件继续使用项目约定的 Rust 1.90
工具链构建。
cargo +stable run -p wasmeld-console
进程默认启动两个独立 Listener:
- 管理 API:
127.0.0.1:8080 - Gateway:
0.0.0.0:8081
管理 Router 不会挂载到 Gateway Listener,Gateway 也不暴露注册、Runtime 生命周期和 WIT Registry 路由。
可用环境变量:
WASMELD_ADDRWASMELD_GATEWAY_ADDRWASMELD_ARTIFACT_DIRWASMELD_DATABASE_PATHWASMELD_WIT_REGISTRY_DIRWASMELD_ALLOWED_ORIGINS,多个 Origin 使用逗号分隔RUST_LOG
API
| 方法 | 路径 | 用途 |
|---|---|---|
GET |
/healthz |
健康检查 |
GET |
/api/v1/runtime |
Runtime 状态 |
POST |
/api/v1/runtime/start |
启动 Runtime 并重新注册受管 Component |
POST |
/api/v1/runtime/stop |
停止 Runtime 并释放所有 Actor |
POST |
/api/v1/runtime/restart |
重建 Runtime,并重新创建活动 Deployment 的 Actor |
GET |
/api/v1/services |
服务版本及精确 Host Capability 列表 |
POST |
/api/v1/services |
multipart 上传单个 package 字段(.wasmpkg) |
POST |
/api/v1/services/{id}/{revision}/start |
启动 Actor |
POST |
/api/v1/services/{id}/{revision}/stop |
停止 Actor |
POST |
/api/v1/services/{id}/{revision}/restart |
重启 Actor |
POST |
/api/v1/services/{id}/{revision}/invoke |
Base64 二进制调用 |
GET |
/api/v1/deployments |
活动 Deployment 列表 |
GET |
/api/v1/deployments/{id} |
查询服务的活动版本 |
POST |
/api/v1/deployments/{id}/activate |
启动目标版本并原子切换活动版本 |
GET |
/api/v1/events |
最近 256 条持久化事件 |
GET |
/api/v1/wit/packages |
WIT 包版本列表 |
POST |
/api/v1/wit/packages |
multipart 发布单个二进制 WIT package 字段 |
GET |
/api/v1/wit/packages/{namespace}/{name}/{version} |
WIT 包元数据 |
GET |
/api/v1/wit/packages/{namespace}/{name}/{version}/content |
下载 WIT 包 |
激活已注册版本:
curl -X POST http://127.0.0.1:8080/api/v1/deployments/echo/activate \
-H 'Content-Type: application/json' \
-d '{"revision":"0.1.0"}'
Gateway 只提供 GET /healthz 和
POST /v1/services/{id}/invoke。调用请求与成功响应的
Content-Type 都是 application/octet-stream:
curl http://127.0.0.1:8081/v1/services/echo/invoke \
-H 'Content-Type: application/octet-stream' \
--data-binary 'hello'
成功响应通过 X-Wasmeld-Revision 返回实际路由的版本。Gateway 错误统一返回 JSON;
未部署为 404,Actor 不可用为 503,过载为 429,执行超时为 504。
服务响应的 capabilities 来自 Component 二进制中的 WIT imports,例如
wasmeld:clock/monotonic-clock@0.1.0。Console 不接受手工能力声明,Runtime 只会链接
注册表中存在且版本完全匹配的接口。
Host KV
wasmeld:kv/store@0.1.0 提供 get、set 和 delete。Key 必须是非空 UTF-8,
最大 256 B;Value 最大 64 KiB。数据库命令通过有界专用工作线程执行,Host 等待时间
不会超过服务的 deadline_ms。v0.1.0 不提供 TTL、遍历、事务或 CAS。
组件包的构建与格式说明见
docs/design/wasmeld-component-package.md。
WIT 依赖、Registry 和本地 replace 说明见
docs/design/wit-package-management.md。