拓冰建站拓冰建站
首页 / 资讯中心 / 正文

OpenClaw 无人值守团队服务器更新:基于规范部署所有者的安全升级、跨库迁移与恢复验证实践

OpenClaw 无人值守团队服务器更新基于规范部署所有者的安全升级、跨库迁移与恢复验证实践【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw导读本文基于 OpenClaw 仓库中的仓库运维技能文档.agents/skills/update-team-server/SKILL.md系统讲解如何在生产环境中以无人值守方式更新由运维方配置的 Team 服务器通过其“规范部署所有者”canonical deployment owner完成例行部署、受控中断与上游迁移同时保证对外提供服务的代码、受支持的数据库迁移、会话连续性以及故障恢复能力。读完本文你将掌握一套可落地的规则如何识别并依赖唯一的所有者执行部署、如何在跨 schema 迁移前完成证据化门禁备份、会话见证、写入停止、逐库校验、如何在迁移后验证部署收据并安全恢复以及如何在不重复既有每小时调度器与 Gateway 恢复机制的前提下完成全流程。一、技能定位仓库运维技能而非运行时技能update-team-server是一个仓库运维repository operator技能其 frontmatter 中声明它用于“通过其规范部署所有者无人值守地更新运维方配置的 Team 服务器验证服务代码、受支持的迁移、会话连续性与恢复能力且不复制每小时调度器”。这句话蕴含三条关键边界无人值守但有授权边界例行部署、受控中断、受上游支持的迁移upstream-owned migrations已被授权执行时无需再次请求例行批准但超出范围的动作见后文“报告与边界”仍然禁止。不是运行时技能它不随 OpenClaw 运行时打包分发也不能替代部署器deployer实现。不复制调度器更新节奏由既有的每小时定时器hourly timer唯一驱动技能本身不新建任何调度或部署器。从仓库结构看这类技能与.agents/skills/openclaw-live-updater/SKILL.md同属.agents/skills/运维技能族后者同样强调“让确定性助手成为唯一的更新/重启所有者”。两者共享同一设计哲学在任意时刻部署、Gateway 生命周期、回滚与恢复只能有一个所有者。二、第一步解析所有者Resolve the owner技能要求在执行任何动作之前先读取运维方提供的私有部署 runbook并从该配置中解析并核验以下要素要素说明主机host与访问方式目标 Team 服务器地址、SSH/API 入口规范部署命令该环境唯一合法的更新入口命令服务service管理 Gateway 进程的服务定义每小时定时器hourly timer驱动更新心跳的唯一节奏来源锁lock防止并发更新的互斥机制日志journal更新/迁移过程的持久化记录发布指针release pointers指向当前服务的代码/构建版本备份目的地迁移前备份的存放位置恢复契约recovery contract失败后如何恢复的既定流程硬性约束绝不猜测访问方式绝不把私有连接信息、凭据、状态或收据复制到公开输出中。核验已安装所有者能力与其当前源码是否一致本技能不安装迁移阶段does not install a migration phase所以如果发现缺失访问权限或某项安全能力不可用这是具体的阻断项blocker——要么在授权范围内通过既有所有者修复要么如实报告哪些仍不可用。禁止虚构成功、绕过拒绝。源码/PR 修复放在独立 worktree如果需要修复源码或提交 PR必须在单独的工作树中进行且不得因此延误一个其他方面安全的、已准备好的更新。这与openclaw-live-updater的“让每次修复都在受控 Codex 工作树中完成绝不破坏性修复 live 镜像”的纪律一致所有者镜像对 Agent 是只读的一切修复在外部工作树收敛。三、通过单一所有者部署Deploy through one owner3.1 定时器是唯一节奏保持既有每小时定时器启用且激活它必须是唯一的节奏来源。绝不为了“证明”而暂停它也绝不创建另一个调度器/部署器。先检查活动调用、锁与日志观察正在活动的所有者而不是复制它。在请求新部署之前先通过规范恢复路径处理残留日志不要清除失败状态来制造“空闲”假象——失败的证据必须保留。3.2 空闲时发起更新当所有者空闲时使用其文档化命令请求已配置的更新服务。只有规范所有者能控制部署、Gateway 生命周期、回滚与恢复。以下做法被明令禁止直接重启substitute direct restarts部分构建覆盖partial build overlays就地源码构建in-place source build3.3 让现任版本持续服务更新过程遵循“先构建、后切换”的离线off-path策略所有者冻结官方上游main在偏离路径的位置构建完整发布包校验并密封seals该发布包在整个过程中现任incumbent版本持续对外服务。此外技能特别提示要检查运行用户runtime-user的磁盘/配额余量而不只是宿主机的可用空间——因为构建产物、备份快照可能落在受限的用户配额下。openclaw-live-updater的辅助脚本同样要求“在停止托管 Gateway 前先取得维护挂起并完成冻结依赖安装、构建”并给每个外部阶段设置了墙钟预算Git fetch 5 分钟、构建 20 分钟、服务控制 60 秒、探针 30 秒等超时即按既定流程回滚——这印证了“预算驱动、超时即恢复”的通用纪律。3.4 维护授权与受控中断只使用**真实、未过期、且绑定到现任代际incumbent generation**的维护授权。允许在已配置的 drain 预算drain budget之后发生受控中断正在活跃的 Agent 与 PTY不是无限期的否决权。但待决的终端持久化pending terminal persistence仍会阻止中断——即有终端会话尚未落盘时不得强行打断。绝不要把 DRAINING 重新标记为 READY。状态语义必须诚实。关闭shutdown、迁移migration、启动startup、验证verification要分别设定时间预算drain 预算不是总停机时间。这与docs/gateway/restart-recovery.md描述的优雅重启流程完全一致请求重启时 Gateway 停止接受新工作等待活跃 Agent 回合与后台任务在 drain 预算内完成默认 5 分钟因此大多数重启实际上不会中断任何工作只有无法在预算内完成的工作才会被中止且中止前每个受影响会话都会被标记为待恢复。四、安全跨 schema 迁移Cross schemas safely这是整个技能中风险最高、要求最严的一节。核心主张包版本号与数字 schema 上限numeric schema ceilings本身不足以作为跨库迁移的安全依据。4.1 迁移前必须证明的门禁gates在停止写入者之前必须识别并确认现任/候选读取者的确切契约reader contracts、受支持的 Doctor 迁移、以及持久化的阶段/恢复所有者。随后在所有变更发生前要求所有者证明以下四项完整的数据库清单包括已配置的外部 Agent 根external agent roots与已注册存储registered stores。已核验的 WAL 感知备份必须覆盖上述清单与受保护状态。注意两个陷阱备份遗漏与脱敏可移植的导出portable export不等于完整的恢复镜像Doctor 不创建备份openclaw doctor只负责迁移与修复备份必须由openclaw backup体系提前完成。原始切换前会话保存见证pre-cutover session-preservation witness必须保留到恢复完成。被过滤的会话列表页、空基线或全新当前见证都无法证明历史连续性。写入已停止 维护授权围栏fencing防止新请求在迁移期间写入只有候选版本所支持的上游 Doctor 流程才执行迁移并且要评估其完整修复范围而不能假定它只是单表操作。4.2 逐库完整性校验迁移前后都必须对每个数据库执行完整性integrity物理 schemaPRAGMA user_versionschema_meta所有权ownership注册表registry候选版本运行时就绪检查candidate runtime-readiness技能强调单个数据库成功或单个 HTTP 健康检查不能证明所有 Agent 就绪。仓库侧的docs/reference/database-schemas.md印证了这一机制的底层设计OpenClaw 将控制面状态存放在共享状态数据库中每个 Agent 一个 SQLite 数据库数据库打开时迁移向前执行较旧的构建会拒绝由更新 schema 写入的数据库。CI 脚本scripts/check-native-state-schema-version.mjs会校验 Swift 与 TypeScript 状态数据库契约声明相同的 schema 版本。openclaw doctor --fix拥有文件到 SQLite 的迁移并在共享的migration_runs与migration_sources表中为每次迁移记录收据——这正是本技能所要求“只有候选版本支持的上游 Doctor 流程执行迁移”的代码基础。4.3 中断下的混合 schema 与前进恢复事务可能按库提交中断后会出现混合 schema 或过期的注册表元数据。因此一旦任一数据库推进到超出旧读取者契约的范围即使候选版本验证失败也绝不能自动重启旧读取者。保留日志与备份继续通过规范的向前恢复所有者canonical forward-recovery owner直到每个存储都就绪。迁移前安全拒绝safe refusal的后果是现任版本继续服务——即“不做”是默认的安全态。明确禁止的操作清单自定义 schema SQL版本标记编辑version-marker edits降级downgrade整库备份恢复wholesale backup restoration技能同时引用了两份仓库文档供执行者细读数据库契约见 docs/reference/database-schemas.md备份语义见 docs/cli/backup.md——并明确指出这些文档中的通用恢复示例并不会扩大本工作流的授权范围。五、备份语义与 WAL 感知源码佐证docs/cli/backup.md为“已核验的 WAL 感知备份”提供了具体实现级细节理解这些有助于执行本技能的备份门禁openclaw backup sqlite create --global/--agent使用 SQLite 的在线备份 API捕获已提交的 WAL 状态不持有长读事务随后VACUUM压缩并再次校验才发布快照目录。快照验证会检查严格清单形状、工件大小与 SHA-256、SQLite 完整性、外键、schema 版本、数据库角色与所有者以及 OpenClaw 拥有的索引定义。全局快照在压缩前会移除每条投递队列行因此恢复这类已脱敏的可移植快照并非“恰好一次”投递续接边界——这与技能“可移植导出 ≠ 完整恢复镜像”的警告互为表里。openclaw backup create规划的状态目录通常~/.openclaw、活动配置文件、凭据目录、每个配置的 Agent 目录、工作区与插件持久资源构成了“完整数据库清单”的落地参考。备份记录写入共享状态数据库openclaw status显示最新一次成功运行openclaw doctor在超过 14 天无成功备份时给出提示性警告——这些都可作为迁移前“备份确实存在且新鲜”的验证手段。此外技能要求的“运行用户磁盘/配额余量”检查也与备份文档中“大型工作区通常是归档体积的主要驱动因素可用空间决定成败”的说明相互呼应。六、验证与恢复Verify and recover6.1 部署收据deployment receipt每次执行必须要求以下全部证据缺一不可验证项含义成功的部署收据该次调用的官方成功凭据匹配的新服务/构建 SHA正在服务的代码与收据中的 SHA 一致稳定的进程代际process generation进程代际未漂移RPC 可用控制通道可达健康/启动/就绪检查health、startup、readiness 全绿已配置渠道各渠道账户正常受保护策略/身份未变policy 与 identity 未被改写原始见证核验切换前会话见证仍在且有效同时要求日志已解决journal resolution、每小时定时器处于激活状态。技能特别划清“什么不算新部署”监督者supervisor成功一次跳过skip健康的旧代码同版本恢复same-release recovery这些都不能当作“新部署已完成”的证据——你必须看到新构建真实接管服务。另一个细节复用所有者真实的模型标记收据model-marker receipt不要发送重复的标记回合不制造多余推理。6.2 围绕围栏做校验用代际检查与所有者阶段检查包围在线检查bracket live checks with generation and owner-phase checks。绝不在活动围栏active fence上运行普通 RPC绝不暂停定时器来制造安静证明窗口——那会破坏“定时器是唯一节奏”的前提。保留失败结果与未解决日志不要删除证据也不要盲目重试。6.3 交给既有恢复机制不重复实现技能引用 docs/gateway/restart-recovery.md 并明确让 Gateway 重启恢复机制去恢复可恢复的工作不要手动复制它。该文档揭示了底层细节对话、转录、定时任务、后台任务记录与排队的出站消息都在磁盘上重启后满足条件的中断回合会被自动检测并恢复重启 drain 期间每个活跃运行会话都会被盖上恢复标记启动时 Gateway 扫描仍声称 running 但无活所有者的会话覆盖硬崩溃场景主会话恢复有每次中断周期 3 次收费的自动派发预算耗尽后会话被 tombstone需用/new或/reset重建——这正是技能所说“恢复预算/隔离仍然存在”的来源Gateway 终端 PTY 是进程内状态重启即结束终端会话不会被恢复——所以技能明确“PTYs end, unsaved work may be lost”。既不承诺普遍恢复universal recovery也不承诺恰好一次执行exactly-once execution——这是恢复环节必须向读者和运维方讲清的能力边界。七、报告与边界只做被授权的动作收尾时技能要求私下报告不进入公开渠道调用结果invocation outcome观察到的服务 SHA迁移/就绪与连续性证明migration/readiness and continuity proof恢复阶段recovery phase任何确切的阻断项exact blocker同时重申未授权动作清单——本工作流不得执行凭据轮换credential rotation发布版本release publication削弱安全策略security-policy weakening任何无关变更unrelated mutations这也与openclaw-live-updater的边界条款一致绝不 release/tag/发布 npm/创建 GitHub Release/轮换凭据/削弱门禁说明整个.agents/skills运维技能族共享“最小权限、证据化交付、单一所有者”的工程价值观。八、可落地检查清单把整套技能压缩为执行时逐项勾选的清单已读私有 runbook解析并核验主机、命令、服务、定时器、锁、日志、发布指针、备份目的地、恢复契约已确认既有每小时定时器激活且为唯一节奏未新建调度器空闲时仅通过规范所有者的文档化命令发起更新现任版本在迁移全程持续服务构建在偏离路径完成并密封已用未过期、绑定现任代际的维护授权drain 后允许受控中断DRAINING 未伪装为 READY迁移前完成完整数据库清单 WAL 感知备份核验 原始会话见证 写入停止与维护围栏迁移前后逐库执行PRAGMA user_version、schema_meta、完整性、所有权、注册表、运行时就绪检查任一库推进后未重启旧读取者中断时通过向前恢复所有者继续直到所有存储就绪部署收据完整SHA、代际、RPC、健康、渠道、策略/身份、见证日志已解决定时器激活失败证据保留、未删除未盲目重试恢复交给 Gateway 重启恢复机制仅做被授权动作结果与阻断项私下报告相关资源技能原文.agents/skills/update-team-server/SKILL.md数据库契约与 schema 版本机制docs/reference/database-schemas.md备份命令与 WAL 感知快照语义docs/cli/backup.mdGateway 重启恢复与 drain 预算docs/gateway/restart-recovery.mdDoctor 迁移与修复命令docs/cli/doctor.md同族规范更新技能单一所有者哲学参照.agents/skills/openclaw-live-updater/SKILL.md【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门