ZMUKE DevOps / DECISIONS.md

决策档案

只追加,不改写既有决策。新事实或改变主意时追加新条目并注明取代关系。

D1 — 三模块边界:fleet / vault / devops

ZMUKE 有三个互不吞并的模块,任何内容先判定归属再落仓:

模块仓库职责
fleetzmuke-fleetzmuke-fleet-prototype节点基础能力:SSH、OpenVPN、gost、fail2ban、ufw、基线加固、节点清单、网络与地址规划
vaultzmuke-vault节点级凭据下发;服务与 agent 经 vault --business <org> run <profile> -- <cmd> 取凭据,不接触 vault 内容。所有 vault 文档留在 zmuke-vault
devopszmuke-devops主机上承载的业务运维:部署单元(compose / systemd)、每主机服务地图、运维手册、CHANGELOG、Cloudflare Pages 文档站(在 Access 之后)

zmuke-n-00001 上的具体判定:gitea、cloudflared、logging 栈、pages 站点 属于业务运维(devops),不属于 fleet

组织模型:ZMUKE 是上级组织,SlaunchX 与 MocalMax 是下级组织,各自有独立的 slaunchx-devops / mocalmax-devops。下级组织的负载即使跑在 ZMUKE 主机上, 也不导入本仓,只登记为跨组织残留。

影响:fleet 归属的单元(fleet-server-v1fleet-agent-v1openvpn-client@*zmuke-egress-watch)在本仓服务地图里只列名并标注"fleet 模块,不在本仓", 不导入其配置文件。

D2 — 文档站以 Cloudflare Pages 发布,全站置于 Access 之后

本仓文档渲染为静态站点并发布到 Cloudflare Pages。

理由:运维文档含主机路径、端口、服务拓扑,不适合公开;但需要一个比终端更易读、 可分享给受控人员的入口。Access + private 仓库是补偿控制。

约束:即便在 Access 之后,真实 Cloudflare Account / Zone / Tunnel / Access ID 仍不写入发布站文档,密钥真值任何情况下都不入库。

D3 — zmuke-router 与 zmuke-ad-browser 重新归位为 ZMUKE 服务

zmuke-routerzmuke-ad-browser 应重新归位(re-home)为 ZMUKE 组织的服务。

当前状态:仅为决策记录,具体迁移工作尚未开始。本仓暂未导入这两个服务的 任何部署单元;它们也不在 zmuke-n-00001 的当前服务地图中。

待办:确定两者的现有落点与归属仓库、判定属 devops 还是 fleet、 在本仓建立对应 deploy/<host>/<unit>/ 并按 CHANGELOG 纪律记录迁移。

D4 — zmuke-gost 归 fleet 模块

zmuke-gost 属于 fleet 模块(gost 是节点基础网络能力,与 OpenVPN、 出口链路同层),是并入 zmuke-fleet 的候选

当前状态:合并工作待办。在合并完成前,zmuke-gost 不进入本仓, 本仓也不为其建立部署单元。

理由:按 D1,节点基础能力归 fleet。gost 作为代理/转发组件服务于节点网络与出口 规划,不是主机上承载的业务运维单元。