From 9d3d57433fd3632e8fa4dd4e1e100db74a51a3af Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 15 Jul 2026 06:47:27 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A1=A5=E9=BD=90=20HWLAB=20Kafka=20ACL?= =?UTF-8?q?=20=E4=B8=8E=E5=85=A5=E5=8F=A3=E5=8F=A3=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/platform-infra/kafka.yaml | 2 ++ docs/reference/hwlab.md | 30 +++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/config/platform-infra/kafka.yaml b/config/platform-infra/kafka.yaml index 9472ae2b..e107d7a2 100644 --- a/config/platform-infra/kafka.yaml +++ b/config/platform-infra/kafka.yaml @@ -143,6 +143,7 @@ clients: - agentrun.event.v1 - agentrun.event.debug.v1 - agentrun.hwlab.event.v1 + - hwlab.event.v1 - hwlab.event.debug.v1 dlqTopics: - agentrun.hwlab.event.dlq.v1 @@ -159,6 +160,7 @@ clients: - agentrun.event.v1 - agentrun.event.debug.v1 - agentrun.hwlab.event.v1 + - hwlab.event.v1 - hwlab.event.debug.v1 dlqTopics: - agentrun.hwlab.event.dlq.v1 diff --git a/docs/reference/hwlab.md b/docs/reference/hwlab.md index 544a1480..65599eb0 100644 --- a/docs/reference/hwlab.md +++ b/docs/reference/hwlab.md @@ -73,7 +73,10 @@ HWLAB v0.2/v0.3 仓库内 `docs/reference/spec-*`,以及已收编的 `cloud-wo ## DEV 入口 - 当前入口必须从 `config/hwlab-node-lanes.yaml#lanes.v03.targets.NC01` 读取,不从长期文档硬编码推断。 -- NC01 `v0.3` 前端/API 入口固定为 `https://hwlab.pikapython.com`,只能按 `config/hwlab-node-lanes.yaml` 中的 `lanes.v03.targets.NC01.publicExposure` 验证;域名侧浏览器验收比裸 IP 或旧端口更能覆盖 Caddy、FRP、同源 cookie 和 Vue workbench 路由。 +- 当前 lane 入口: + - development `NC01/v03` 前端/API 入口为 `http://152.53.229.148:32009`; + - production release lane `NC01/production` 的正式入口为 `https://hwlab.pikapython.com`。 +- 两者都必须从 `config/hwlab-node-lanes.yaml` 中对应 target 的 `publicExposure` 读取并验证,不能把 production HTTPS 复用于 development 验收。 - HWLAB Cloud Web/Workbench 的最终 web-probe 证据必须来自 PR 合并并经 CI/CD/GitOps/Argo 部署后的公网入口;本地 fake-server、localhost dist、临时 `--url` 和源码/API preflight 只能证明开发面,不得作为关闭用户入口 issue 或声明上线成功的替代证据。公网 web-probe 发现问题时继续修复 PR 或运行面,再重新部署复测。 - 旧公网端口不是浏览器验收入口;内部 k3s service 仍可使用 `6667` 作为服务端口。 - 不要把 master 上的其他 UniDesk frontend/backend-core 路径误判为 HWLAB 前端。 @@ -86,7 +89,18 @@ NC01 `v0.3` 已按 `pikasTech/HWLAB#1176` 收敛到 Sub2API-style 的最小多 NC01 `v0.3` 的 DB 执行面不再硬编码为外置 PostgreSQL,而由 UniDesk YAML `config/hwlab-node-lanes.yaml` 中选中 target 的 `runtimeStore.postgres.mode` 决定。mode 为 `local-k3s` 时,Cloud API、user-billing、workbench-runtime、project-management 和 OpenFGA 消费 `hwlab-v03` namespace 内的本地 `hwlab-v03-postgres`;复验和关闭证据应来自 `hwlab nodes control-plane plan|status`、`hwlab nodes secret status`、运行面 workload/Secret 摘要和 `external bridge/secrets not-required`,而不是要求本地 PostgreSQL 缺失。`externalPostgres` 与 PK01 platform DB YAML 必须继续保留为 `platform-service` mode 的候选配置;把 mode 切回 `platform-service` 时应重新启用 bridge/Secret 路径,但不得因为当前使用 `local-k3s` 删除外置配置。 -复验 NC01 `v0.3` user-billing 管理闭环时使用 `https://hwlab.pikapython.com`。最小 smoke 应覆盖:`/health/live` revision 指向目标 source commit;admin Web session 登录;admin 创建/list/disable redeem code;普通用户注册或登录后兑换 code;重复兑换 one-time code 不重复入账;admin redemptions 和 ledger 能查到同一 ledger/redemption;subscription/payment summary 在没有真实 provider 配置时明确返回 `unconfigured`;`/billing` 和 `/admin/billing` 页面加载且部署 bundle 包含对应 endpoint。验证输出只能记录对象 id、prefix、状态、计数和 redacted presence,不能打印 bootstrap admin password、raw redeem code、API key secret、DB DSN 或 provider token。 +复验 NC01 `v0.3` user-billing 管理闭环时遵循以下口径: + +- 入口必须从 `config/hwlab-node-lanes.yaml#lanes.v03.targets.NC01.publicExposure` 读取; +- 当前 development 入口为 `http://152.53.229.148:32009`; +- 最小 smoke 应覆盖: + - `/health/live` revision 指向目标 source commit; + - admin Web session 登录和 admin 创建、查询、停用 redeem code; + - 普通用户注册或登录后兑换 code,重复兑换 one-time code 不重复入账; + - admin redemptions 和 ledger 能查到同一 ledger/redemption; + - subscription/payment summary 在没有真实 provider 配置时明确返回 `unconfigured`; + - `/billing` 和 `/admin/billing` 页面加载且部署 bundle 包含对应 endpoint; +- 验证输出只能记录对象 id、prefix、状态、计数和 redacted presence,不能打印 bootstrap admin password、raw redeem code、API key secret、DB DSN 或 provider token。 真实 payment provider、外部支付回调、订单结算和增长活动策略不是 #1176 完成态的一部分。只有当 `config/hwlab-node-lanes.yaml` 或 HWLAB 自有受控 YAML 明确声明 provider/sourceRef,并且 Secret sync、回调入口、ledger/order 状态机和 public end-to-end smoke 都齐备时,才可以把 NC01 `v0.3` 从 provider-agnostic placeholder 扩展到真实支付;不得通过硬编码 provider、手写 k8s Secret、临时 SQL 或 Cloud API 平行账本绕过 user-billing authority。 @@ -160,7 +174,17 @@ HWLAB 公网 FRP server 由 master server 上的 `hwlab-frps-dev` 容器承担 当前 HWLAB FRP server allowlist 至少应覆盖 `config/hwlab-node-lanes.yaml` 中 NC01 active target 声明的 publicExposure 入口以及仍被明确使用的维护端口。旧节点历史端口只作为历史对照,不应作为新增 runtime 入口要求。新增端口或域名必须对应 NC01 的明确 node/lane/namespace/runtime 入口,不能把大范围端口段作为默认放行策略。 -FRP 维护验证顺序是:确认 `hwlab-frps-dev` 或 `config/hwlab-node-lanes.yaml` 指定的 publicExposure 入口仍挂载/渲染目标配置;重启或 apply 后用等价只读命令确认 FRP/Caddy 正在监听目标公网端口或 hostname;再在 NC01 目标 namespace 查看 `frpc` 日志,确认对应 proxy `start proxy success`;最后验证 NC01 active runtime 入口。NC01 `v0.3` 验证使用 `https://hwlab.pikapython.com`。 +FRP 维护验证顺序: + +- 确认 `hwlab-frps-dev` 或 `config/hwlab-node-lanes.yaml` 指定的 publicExposure 入口仍挂载或渲染目标配置; +- 重启或 apply 后用等价只读命令确认 FRP/Caddy 正在监听目标公网端口或 hostname; +- 在 NC01 目标 namespace 查看 `frpc` 日志,确认对应 proxy `start proxy success`; +- 最后验证 NC01 active runtime 入口。 + +入口必须从所选 lane 的 target 读取: + +- 当前 development `NC01/v03` 使用 `http://152.53.229.148:32009`; +- production release lane `NC01/production` 使用 `https://hwlab.pikapython.com`。 当 public URL 返回 404/502 或 Caddy local probe 失败时,不要只凭某个历史端口、旧 worktree YAML 或当前 Caddyfile 猜测修复方向。先对齐三层事实:UniDesk `config/hwlab-node-lanes.yaml` 的 publicExposure、目标 runtime GitOps/ConfigMap 渲染出的 `frpc` 配置、以及 PK01 loopback 对每个 FRP remote port 的真实响应;同时查看 `frpc` 日志中对应 proxy 是 `start proxy success`、`port already used` 还是 `port not allowed`。Caddy 主站的 API 路径应指向 edge-proxy,上层 Web/auth/OpenCode iframe 路径应由 Cloud Web 处理;若三层事实不一致,先修拥有该事实的 YAML/source,再用受控 public-exposure 或 GitOps render 收敛,不能手工把 Caddy 临时指向看似可用的旧端口。