DETACH-05:RR 生产部署节点固化证据
更新时间:2026-08-29
当前状态
DETACH-05 为“调查中”。本目标只盘点和核验 RR 的生产载荷及运行脚本,不将这些载荷迁往 101,不删除任何版本、凭据、审计或回滚材料。
RR 正式生产运行证据
- RR 的 Docker、Nomad 与
agentmeshos-system-operations-bridge.service均为active、enabled。 - 正式 Bridge 仅监听 RR 私有 Docker 地址
172.30.70.1:39184;systemd 单元的正式运行载荷根目录为/usr/local/lib/agentmeshos/project-runtime。 - Bridge 的
current指向独立的版本化 release;历史 Bridge release 中保存四个脚本的同哈希副本,用于版本回溯,不能仅因重复而删除。 - RR
/backup位于根系统盘,不是独立备份盘;脚本引用该目录时只能作为本机恢复材料位置,不能宣称具备独立故障域。
四个脚本的归属与用途
| 脚本 | 正式运行载荷位置 | 现场用途 | 结论 |
|---|---|---|---|
agentmeshos-docs-docker-deploy.sh |
project-runtime/scripts/deploy/docs-site/ |
拉取、部署、健康检查和回滚 Docs 容器 | RR 生产部署工具,保留在 RR;不迁移至 101 运行 |
agentmeshos-node-metrics-deploy.sh |
project-runtime/scripts/deploy/node-metrics/ |
部署和维护节点 metrics 容器 | RR 节点管理运行载荷,保留 |
agentmeshos-nomad-client-deploy.sh |
project-runtime/scripts/deploy/nomad-client/ |
安装、配置、备份和维护 Nomad Client | RR 节点管理运行载荷,保留 |
agentmeshos-node-inventory-export.sh |
project-runtime/scripts/maintenance/,并由 /usr/local/lib/agentmeshos/ 的匹配副本供 systemd 调用 |
生成脱敏 Tailnet 节点库存 | RR 本机维护工具,保留 |
四个 project-runtime 副本均为 root:root 0755。两个历史 Bridge release 中可见的副本与对应运行载荷哈希一致;这证明它们是版本化运行材料,不是应交给 101 的 Git 工作区残留。
发现的部署链路风险
- 当前 Bridge
node_management.py在节点部署时会从 RR 读取 Nomad/metrics 脚本,并通过 SSH/SCP 上传至目标节点。 - 这与项目现行架构的“镜像、安装包、构建产物、脚本和业务文件不得经 SSH、Tailnet 或节点间路径传送”规则冲突。该事实不影响 RR 作为生产运行节点的定位,但阻止将当前链路宣称为完全固化、合规的发布方式。
- 处理方式不能是将脚本复制到 101 或临时建立第二 Runtime/Bridge。应在独立的架构选型后,将节点安装载荷改为经受控公网数据面取得的版本化产物,并保留同一摘要、审计和回滚语义;在此之前不改变现网部署行为。
待完成项
2026-08-29 WebDAV 非生产发布探针
在 101 本机使用 /etc/agentmeshos/cloudreve-system-webdav.env 对截图所示的 AgentMeshOS-WebDAV 读写空间执行随机临时对象验收:
- 根目录
PROPFIND:207 - 临时发布对象上传:
201 - 公网 HTTPS 回读 SHA-256:与本机生成对象一致
- 临时对象删除:
204 - 删除后回读:
404 - 本机探针文件已清理;未写入长期目录、RR 生产载荷或 GitHub Secret
该结果证明 101 现有 WebDAV 读写凭据可用于受控产物写入和回读。它尚未证明 RR 已完成接收、部署、健康复核和回滚,后者仍需独立验收。
2026-08-29 RR 只读健康复核
通过已登记的 rr SSH 入口完成只读检查,并先确认远端主机标识为 rr:
- Docs 部署脚本
health:返回码0,健康检查通过。 - Node metrics 部署脚本
--check:返回码0,容器运行且100.64.0.1:9100正在监听。 - Nomad Client 部署脚本
status:返回码0,Nomad2.0.4服务 active/enabled,运行参数与 RR 节点职责一致。 agentmeshos-system-operations-bridge.service:active/enabled。
本次检查未执行部署、重启、回滚、文件写入或删除。Nomad 日志中仍可见 keepalive 超时及 pcdell-103 过期 introduction token 告警;这些是待单独处理的现场风险,不作为本次剥离的已解决项,也不改变 RR 生产载荷保留结论。
2026-08-29 CI 产物候选版本
对应提交 88e563c0942050d6be534efb8641dbd93ba22cf2 的 Docs CI 已成功完成(run 33251501638)。真实构建输出登记如下:
- 镜像:
ghcr.io/michaellab7284/agentmeshos-docs:sha-88e563c - OCI 镜像 digest:
sha256:92190176078f28a97592b8c2e19de231bcc76074071d98b5cac234131a472263 - GitHub Actions 构建记录 artifact:run artifact
9714504395(仅作构建证据,不作为生产凭据或长期业务文件)
该版本目前只是待接收候选,尚未上传 Cloudreve、尚未由 RR 接收或部署。后续必须在隔离目标完成错误摘要拒绝、失败清理、健康和审计验收后,才可进入生产窗口。
2026-08-29 隔离发布清单验收
使用上述候选版本生成最小发布清单,在 AgentMeshOS-临时 上传并通过公网 HTTPS 回读:
- 临时清单上传:
201 - 回读:
200,回读 SHA-256 与本机生成清单一致(a4a758...c2df) - 清单删除:
204 - 删除后回读:
404 - 本机和云端临时对象均已清理
该验收只证明版本清单的受控 WebDAV 生命周期,不等于镜像已上传 Cloudreve,也不等于 RR 已接收或部署。下一步仍需在明确的非生产目标上验证错误域名/错误摘要拒绝、失败清理、健康和审计,然后才能考虑生产接收窗口。
RR 公网接收入口复核
对现有示例地址 https://cloud.yohan.fun/s/web-verifier.tar 做匿名 HTTPS 复核:请求会重定向到 Cloudreve 登录页,未返回载荷;对新建临时 WebDAV 对象的匿名读取返回 401。因此当前 Cloudreve WebDAV 凭据只能证明 101 的受限写入能力,不能作为 RR 的下载凭据,也不存在可直接用于 RR 接收的已验证公开分享 URL。正式 RR 接收前必须取得并验证一个受控公开下载地址,或完成独立的最小权限发布接口设计;在此之前保留现网 SSH/SCP 链路,不进行生产切换。
补充核对 Cloudreve 4.18.0 API:实例使用 /api/v4,/api/v4/share 路由存在,但使用现有 WebDAV Basic Auth 请求仍返回 {"code":401,"msg":"Login required"}。这证明 WebDAV 凭据不具备 API 会话/分享管理权限;不读取、复制或升级该凭据权限。
2026-08-29 RR 文件级接收烟测
在用户提供的 nOSN 目录分享下上传一次性临时发布清单,使用 /api/v4/file?uri=... 列举并用 /api/v4/file/url 生成短时签名文件 URL;RR 仅通过该公网 HTTPS URL 接收:
- 临时清单上传:
201 - RR 下载:
200,回读 SHA-256 与 101 原清单一致,大小95字节 - 云端临时对象删除:
204 - 删除后回读:
404 - RR
/var/tmp临时文件已由退出陷阱清理
该烟测证明目录分享可以作为受控发布根,具体文件通过短时签名 URL 交给 RR;RR 不需要 WebDAV 凭据。当前使用的是一次性清单,不是生产镜像,尚未执行生产部署或回滚。
2026-08-30 RR 候选镜像接收与隔离健康验收
- RR 在临时 Docker 配置下匿名读取 GHCR 候选元数据成功,不依赖复制 GitHub 凭据。
- RR 拉取
ghcr.io/michaellab7284/agentmeshos-docs:sha-88e563c成功;Registry digest 与 CI 登记的sha256:92190176078f28a97592b8c2e19de231bcc76074071d98b5cac234131a472263一致。 - 候选镜像以独立临时容器和
127.0.0.1:18081端口运行,按镜像真实监听端口39130验证/healthz=200、根页面=200;临时容器已清理。 - RR 现网
agentmeshos-docs:latest仍为 healthy;现有rollback镜像标签仍存在,未执行现网替换或回滚。
该证据完成了 RR 的候选接收和隔离健康前置,但尚未完成生产切换、生产健康复核和回滚演练。
用户提供的目录分享复核
对用户提供的 https://cloud.yohan.fun/s/nOSN 做匿名复核:GET /api/v4/share/info/nOSN 返回 code=0、名称 AgentMeshOS-WebDAV、expired=false,说明目录分享本身有效;短链页面和 RR curl -L 均返回 Cloudreve HTML 页面,而不是文件字节流,分享信息的 size=0 也表明它是目录而非单个载荷文件。该分享可作为人工浏览入口,但 RR 自动接收仍必须取得目录内具体文件的下载 URL 并验证摘要,不能把目录短链直接作为安装包地址。
非生产目标基线
项目现有 scripts/deploy/web-verifier/tests/web-verifier-public-restore-test.sh 已在 101 本机执行并返回 PASS。该隔离夹具覆盖公网恢复、固定镜像身份、保留标签和非法公网地址拒绝,使用临时 fixture,不触碰 RR 或生产载荷。它作为后续节点侧发布验收的执行边界基线;Docs 产物的正式接收测试仍需单独实现并留证。
本次补充覆盖错误摘要拒绝和异常退出清理,并修复了隔离恢复脚本的清理陷阱:校验失败通过 die 退出时也会删除 /var/tmp/agentmeshos-web-verifier.* 临时目录。完整夹具重跑返回 PASS,且只比较本次测试新增的临时目录,避免把历史残留误报为当前失败。
- 已完成“节点安装载荷的受控公网分发”架构选型和迁移约束登记:采用 Cloudreve 受控共享
https://cloud.yohan.fun/下载地址、版本化发布清单和 SHA-256;RR Bridge 只发送固定控制命令与元数据,目标节点自行下载和校验。详见docs/architecture/05_技术选型说明.md与docs/architecture/07_部署规范.md。这不是已迁移证据。 - DD 现场运行的是 Cloudreve
4.18.0(容器内二进制构建信息)。本次通过 Home 浏览器实际核对 OAuth 新建页面时,表单没有提供Files.Write或Shares.Write,因此未创建AgentMeshOS发布协调器,未保存临时客户端密钥,OAuth 分支不作为当前发布前置条件。 - 截图确认 Cloudreve
AgentMeshOSWebDAV 账号对AgentMeshOS-WebDAV目录具有“读写”权限。101 的/etc/agentmeshos/cloudreve-system-webdav.env已存在且为root:root 0600;该配置是当前已验证的系统 WebDAV 数据面凭据,供 101 访问受限系统目录,不交给 Worker,也不用于猜测或调用管理 API。 - GitHub 仓库当前有 9 个 Docker 构建工作流,均只使用自动
GITHUB_TOKEN推送 GHCR;仓库 Secret 数量为0,不存在CLOUDREVE_*或任何既有发布凭据。GitHub-hosted runner 不能读取 101 的 root-only 配置,也不应以 SSH 方式取得该配置。 - 当前发布路径改为复用已存在的 101 root-only WebDAV 读写凭据:发布协调器在 101 通过
https://cloud.yohan.fun写入受控目录,使用版本清单和 SHA-256 记录产物;RR Bridge 仍只接收固定控制动作与版本元数据。该凭据不复制到 Worker,RR 原有凭据继续保留。 - WebDAV 读写能力不自动等于共享管理 API 权限。创建公开分享或调用管理 API 若仍需要更高权限,必须另行完成现场验证和安全批准;在此之前不创建 OAuth 客户端、不新增发布账号、不写入 GitHub Secret。
- 在上述任一路径实际可用并完成非生产隔离验收前,不替换 RR 现网 SSH/SCP 传输链路。
- 在非生产节点执行隔离验收:正确下载/校验、错误域名拒绝、错误摘要不执行、失败清理、成功后的健康和审计记录;通过后才允许替换 SSH/SCP 传输路径。
- 以版本化摘要证据验证 RR 接收并部署 101/GitHub Actions 已发布产物;该项与 DETACH-02 的正式发布/回滚验收共用证据。
- 在不破坏现网的条件下,核验 Docs、metrics、Nomad 与节点库存四类操作的健康、审计和回滚路径。