阶段十三:OmniRoute latest stable 原生迁移
状态:已完成并归档
计划 ID:phase-13-omniroute-latest-stable-migration
📌 结论摘要
P13 已完成并归档,102 是唯一生产 OmniRoute 权威。 本阶段从官方 npm latest 一次性安装 omniroute@3.8.51 到 102,完成 RR 官方备份与一致性快照恢复、受控生产切换、Boss/Worker Combo、Codex Responses、管理 API、SQLite、负向鉴权、真实回退和再次切换验收。P13-B 将 MM 公网入口改为直连 100.64.0.4:39200;P13-C 按用户决定删除 RR 上全部 omni 数据、全局包、service、cutover 备份和网关 vhost。依据是 2026-10-01 最新只读观察 pass/critical=0/warnings=0、102/ RR / MM 现场回读和 GitHub Actions 成功记录;影响是 RR 不再保留 omni 回退点,恢复改由 Cloudreve P13-4 快照或 102 原生重装承担。
🗂️ 目录
✅ 最终结果
| 项目 | 最终状态 | 关键证据 |
|---|---|---|
| 生产权威 | 102 omniroute@3.8.51,Node v22.23.0 |
102 CLI、systemd 与 2026-10-01 观察记录 |
| 数据写者 | 仅 102 | /root/.omniroute/storage.sqlite 为唯一生产写者 |
| 公网入口 | MM 直连 102 | 面板 JSON 与渲染 nginx conf 均为 100.64.0.4:39200 |
| RR 状态 | omni 数据、包、service、cutover 备份、omni vhost 全部退役 | data_presence=absent、package_presence=absent、service_unit_presence=absent、cutover_backup_presence=absent、origin_omni_blocks=0 |
| RR Runtime 入口 | 保留本机私有代理 | 172.30.70.1:39181 → 100.64.0.4:39200,active/running、NRestarts=0 |
| 健康观察 | 101 timer 每 15 分钟只读运行 | 最新实时复核状态 pass,critical 与 warnings 均为 0 |
P13 的完成不等于把 discovery、媒体、语义缓存或日志正文导出一并启用。这些能力继续默认关闭,若要使用必须另行评估收益、隐私、资源和回退条件。
🧹 保留与删除决策
用户要求对 RR 上的保留项和删除项给出明确判断,并在资料中记录理由。因此本次归档固定以下决策,后续审计不再依赖聊天记忆。
| 对象 | 决策 | 理由与后续边界 |
|---|---|---|
RR agentmeshos-omniroute-runtime-proxy.service/.socket |
保留 | RR 本机 agentmeshos-ai-runtime 容器的 AI_RUNTIME_OMNIROUTE_BASE_URL 正使用 172.30.70.1:39181。它让容器通过 Docker 网络网关访问 102,不硬编码 Tailnet 或后端地址;容器经代理返回 200。它是 RR 本机容器出口,不是公网 omni 运行残留 |
| RR origin gateway 的 omni 死配置 | 删除 | 该 vhost 不再承接 MM 公网流量,默认上游还曾在无人使用时指向 RR 本机旧端口。保留会让后续重新运行生成脚本时写回死路由,因此从生成脚本彻底移除 |
RR agentmeshos-main-origin-gateway.sh |
更新为 v0.6.2 |
删除 omni server 块及 OMNIROUTE_UPSTREAM、OMNIROUTE_DISCOVERY_UPSTREAM 变量;其余 7 个业务域名继续正常生成,RR nginx -T 中 server_name omni.yohan.fun; 计数为 0 |
RR agentmeshos-omniroute-cutover.sh |
删除 | 它假设“RR 本地 OmniRoute + RR 网关”仍存在,已与 P13-B/P13-C 的现实不符。保留会形成第二套已经失真的切换路径;未来公网回退只在 MM 两处反代配置中显式处理 |
RR /root/.omniroute、旧全局包、service、cutover 备份、历史 omni 备份、omni vhost |
删除 | 102 已通过最终快照恢复和全链路验收;用户明确取消固定等待期并接受从此不在 RR 保留运行回退点 |
RR /var/lib/agentmeshos/swap/omniroute-install.swap |
保留 | 文件名含 omniroute 但实际是 active swap,不是 omni 业务数据;RR 内存余量需要它,删除会降低故障承受能力 |
| RR Codex MCP 凭据 | 保留 | RR 本机 Codex 通过 https://omni.yohan.fun/api/mcp/stream 调用当前 102 生产,凭据用途仍然有效且保持 root-only |
保留 Runtime 私有代理的依据是“减少容器与具体后端地址的耦合”,不是保留 RR 生产 OmniRoute。该代理的连接目标已固定到 102,且健康观察器会检查它不得重新依赖 RR 本机 agentmeshos-omniroute.service。删除 origin gateway 死配置的依据是“死路由会在下一次脚本重跑时复活”,因此它与 cutover 脚本必须作为一个整体退役,避免再次出现“文档说已直连、生成器却写回 RR”的撕裂状态。
🧪 验收证据
| 验收面 | 结果 | 现场证据 |
|---|---|---|
| 102 服务 | 通过 | active/running/enabled、NRestarts=0、failed_units=0、health HTTP 200 |
| 102 数据 | 通过 | SQLite quick_check=ok;70 个 Provider 连接、19 个 Combo、4 个 API Key |
| Boss Combo | 通过 | 命中 deepseek-ai/DeepSeek-V3 并精确返回 P13_4_BOSS_OK |
| Worker Combo | 通过 | 首次空内容后重试命中 command-a-reasoning-08-2025 并返回 P13_4_WORKER_RETRY_OK |
| Codex Responses | 通过 | SSE 出现 response.completed 和真实 get_status function call |
| 管理 API | 通过 | 19 个 Combo、4 个 API Key,Boss/Worker 路由策略可回读 |
| 负向鉴权 | 通过 | 未授权 401、错误 Token 403、路径穿越 400/403、错误模型 400 |
| 公网入口 | 通过 | https://omni.yohan.fun/api/monitoring/health 返回 200/healthy |
| 102 edge 代理 | 通过 | FD 软上限 65536、最大连接 4096、guard active |
| RR 退役边界 | 通过 | omni 数据/包/unit/cutover 备份/网关 vhost 均不存在,failed unit 为 0 |
| Runtime 私有代理 | 通过 | active/running、NRestarts=0、无本机 omni 依赖、目标为 100.64.0.4:39200 |
| 最新只读复核 | 通过 | 2026-10-01T02:45:00Z 观察状态 pass、critical 0、warnings 0 |
真实回退和再次切换已在删除 RR 回退点之前完成:102 清洁快照 snapshot_20260930T232400Z_p13-4-rollback-clean 的 SHA-256 为 63bc1deeefa5efba14316a3e099b5faf494f1a2d0074d3ff5d1d9bb35a0c7b60;RR 恢复并 rollback 后真实调用返回 P13_4_ROLLBACK_OK;RR 再生成回流快照 snapshot_20260930T233238Z_p13-4-return-to-102,SHA-256 为 4f9553f84560205bc81417f14c5381cd311f95c74bb3a8356b97ce8a8fc97655,102 恢复后重新承接。该演练证明删除 RR 回退点之前迁移路径确实可逆。
提交 64d291d 已推送 GitHub,post-push-verify.sh 通过,必需工作流 Build Docs Site、Docker Image、Repository Guardrails 全部成功。P13 最终归档提交还会再次执行同一完整门禁,不能只引用上一次成功。
🔄 版本变化与后续使用
上一生产版本为 RR 3.8.50,P13 直接安装执行时的官方 npm latest 3.8.51,没有先装旧版本再升级。两版的主要变化和使用优先级如下。
| 变化方向 | 3.8.51 的主要变化 |
AgentMeshOS 后续用法 |
|---|---|---|
| 路由与稳定性 | 分层并发准入、自适应推理强度、Provider 断路器、冷却与 429 判断修正 | 继续用于 Boss/Worker 和长 Responses;观察真实错误率与空响应 |
| Provider 与模型目录 | 模型 allowlist/denylist、实时账号目录、模型别名扩充 | 保留现有正式目录,不因升级自动开放所有模型 |
| Free tier 与 Radar | 免费资格、isFree、限速展示和训练提示 |
继续受零成本优先与隐私规则约束 |
| 可观测性 | 编排图、历史对比、Repeat、首包耗时、MCP 时间线 | 只读能力可在需要时采用;日志正文导出保持关闭 |
| 安全加固 | 请求钩子隔离、IP allow/deny、内网端点拒绝、OAuth 路由保护和路径穿越防护 | 已做未授权、错误 Token、路径穿越负向回归 |
| 媒体与上下文压缩 | Video/Audio Bridge、STT、线程池与可选语义缓存 | 不默认启用,按收益、资源、隐私和回退逐项评审 |
| 数据与迁移 | schema 收敛、懒建表、迁移数量和运行目录变化 | 升级或重装必须先完整备份、隔离恢复、核对迁移计数和 quick_check |
后续使用顺序固定为:现有 Boss/Worker Combo 与 Chat Completions 第一优先;Codex Responses SSE/tools 第一优先并持续真实回归;管理 API 和只读可观测性第二优先;媒体、语义缓存、日志正文导出和训练相关能力第三优先且默认关闭。
🔁 回退与恢复
| 场景 | 恢复路径 | 边界 |
|---|---|---|
| 102 服务故障 | 先保留日志和数据库证据,再修复 systemd、edge guard 或官方包运行环境 | 不得在 RR 重新启动第二套 OmniRoute 写者 |
| 102 数据损坏 | 从 Cloudreve P13-4 一致性快照恢复到 102,核对 SHA-256、quick_check、迁移计数和日志 |
恢复期间必须停止 102 写入 |
| 102 主机需要重建 | 使用 agentmeshos-omniroute-native-deploy.sh 安装执行版本,再从长期快照恢复数据 |
新版本必须重新查询并固定,不得照抄历史版本 |
| 公网入口故障 | 在 MM 面板 JSON 与渲染 nginx conf 两处同时修正 omni.yohan.fun 上游 |
只改渲染文件会被面板下一次保存覆盖 |
| RR Runtime 容器访问失败 | 检查 172.30.70.1:39181 代理、UFW 和 102 39200;不得恢复 RR 本地 OmniRoute |
代理是宿主出口,不是生产数据副本 |
| 旧 RR 回退需求 | 不再存在;只能从 Cloudreve 快照恢复或在 102 重装 | 这是用户明确接受的恢复边界 |
⚠️ 残余风险与未决项
| 事项 | 当前事实 | 下一步 |
|---|---|---|
| 长期健康观察 | 101 timer active/enabled,最新实时复核 pass | 异常按独立运维事件处理,不重新打开 P13 |
| Worker 空响应 | 首测一次空正文,重试成功 | 持续统计;若稳定复现,另立 Provider/Combo 运维问题 |
| discovery | RR controlled-discovery 无后端且已停用 | 保持关闭,或另立 102 discovery 部署评估 |
| 新版本可选能力 | 媒体、语义缓存、日志正文导出未启用 | 按收益、隐私、资源和回退逐项评审 |
| RR 数据删除 | 用户已明确不需要等待期,RR 回退点已删除 | 不再需要用户决策;恢复以 P13-4 快照和 102 重装为准 |
| P14 范围 | 已进入“OmniRoute 官方能力接入与搜索试点”,首轮双监听和四工具接入已完成 | 先完成 x-search 外部凭据,再决定后续能力扩展 |
P13 没有阻塞关闭的未决项。后续发现的状态漂移属于新的运维事件,不得重新打开已经完成的 P13 工作包。
🧾 归档后状态更正(2026-10-01)
P13 关闭后,状态机切换到 P14“OmniRoute 官方能力接入与搜索试点”,随后用户授权并锁定双监听、Tailnet 默认和四工具客户端裁剪。P14 不把 P13 的可选能力自动升级为新任务。P13 的部署事实、RR 退役边界和恢复路径继续以本页为准。