跳转至

03-16~18:部署与认证

Dad 的关键产品决策

代码结构重构

03-18 决策: - 把代码拆分为 pluginUI 两个目录 - 不拆成两个项目(保留 monorepo 便利性) - 测试机部署时不要容器,直接部署插件和前端

部署约束明确

关键约束

ClawCraft 绝不能部署到本机,只能部署到远程测试服务器 proxy-kr-tiger

认证架构决策

03-18 决策: - 接口必须有认证 - 采用 Logto JWT Token 验证 - 复用现有 Logto 认证链路

技术问题与根因分析

测试服迁移问题(03-18)

问题 1:DNS 指向旧 IP - craft.clawlines.net 初始访问失败 - DNS 仍指向旧 IP 20.214.152.42

问题 2:Caddy 403 - Caddy 用户对 restry home 目录无读取权限

问题 3:插件未加载 - /clawcraft/config 返回 HTML 而不是 JSON - 根因: - 配置里写成了 clawline,不是 clawcraft - allow 列表里也没有 clawcraft - 插件放置位置不对

问题 4:Gateway 启动失败 - Gateway 启动时 JSON 文件被写成 0 bytes - openclaw gateway start 依赖 systemd service,但用户态 DBUS 环境异常

认证实现策略演进

最初尝试:每个 handler 内部嵌套 requireAuth - 问题:代码侵入性高,闭合结构复杂

最终方案:路由层包装 - 编写 withAuth() wrapper - 在 registerHttpRoute 时统一包裹 handler

认证覆盖范围: - handleState - handleEvents(SSE,token 从 query param 取) - handleConfig - handleChat - 及其他插件 HTTP 路由

开发环境认证问题(03-20 早)

问题:开发环境走 HTTP 时,Logto 依赖的 Crypto.subtle 受限,无法登录

初始方案:HTTP 环境跳过 Logto

Dad 否决:开发环境也必须登录

最终方案:改为 HTTPS 开发环境 - 不使用路径前缀代理(对 SPA 资源路径不友好) - 使用 子域名方案 - 复用现有 Docker Caddy - 利用通配符 DNS:*.dora.restry.cn

错误代码回滚: - Dad 要求把之前"跳过 Logto"的错误代码全部还原 - bot 对 4 个相关 commit 执行 revert

解决方案

测试服部署配置

目标机器:owl (4.193.115.141:18822)

部署目标: - 插件 API 运行在 18789 - 前端通过 Caddy 提供 - 域名:craft.clawlines.net

Caddy 配置职责: - 静态文件服务 - /clawcraft/* 反代到插件 API

插件安装修正

  1. 修正插件 id / allow 配置
  2. 将插件放到正确的 extensions/ 目录
  3. 恢复被清空的 JSON 配置
  4. 修复 systemd 用户 bus 问题

验证结果: - 插件注册成功(11 routes, 9 hooks, v0.6.0) - API 返回 200 - 前端登录页正常

认证中间件实现

// withAuth() wrapper 示例
function withAuth(handler) {
  return async (ctx) => {
    const token = ctx.query.token || ctx.headers.authorization;
    // 验证 Logto JWT(ES384 JWKS)
    if (!await verifyToken(token)) {
      return { status: 401 };
    }
    return handler(ctx);
  };
}

开发环境 HTTPS 配置

域名规划: - craft.dev.dora.restry.cn → 开发前端 - 通过 Caddy 做 SSL 终结

选型理由: - HTTPS 可满足 Crypto.subtle - 子域名比路径代理更适合 Vite/SPA - 复用现有 Caddy,避免额外证书与端口管理复杂度

里程碑

03-16

  • [x] 新建云端 VM owl 作为 ClawCraft 节点
  • [x] 配置 craft.clawlines.net 域名

03-17

  • [x] 对话系统 P0 修复:从"发送后刷新、历史丢失"恢复为可持久化
  • [x] QA 流程沉淀为技能 skills/adversarial-qa/
  • [x] 频道状态统一改为读取 world store 中的 channels
  • [x] 一次性配置 39 个模型

03-18

  • [x] 代码完成 plugin/UI 双目录重构(commit 15930b7
  • [x] 测试服迁移到 owl
  • [x] DNS + Caddy + 权限问题修复
  • [x] 插件加载问题修复
  • [x] Logto JWT 认证正式落地
  • [x] TypeScript 编译通过
  • [x] 部署到 owl 测试服成功

部署约束记录

环境 域名 服务器 说明
生产 craft.clawlines.net owl 静态目录 serve
开发 craft.dev.dora.restry.cn 内网反代 HTTPS 子域名
旧域名 clawcraft.octopus-ops.net - 已废弃