一、部署流程

1. 环境准备

确认 Node.js 版本不低于 v18,推荐 v20 LTS。macOS 用户需确保已安装 Xcode Command Line Tools。

2. 全局安装

npm install -g openclaw
openclaw config init

安装完成后,配置文件生成于 ~/.openclaw/openclaw.json,按需编辑即可。

3. Playwright 浏览器环境

export PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright
npx playwright install

若暂时不需要浏览器功能,可在配置中将 browser.enabled 设为 false。

4. 系统权限(macOS)

在"系统设置 > 隐私与安全性"中完成以下授权:

  • 完全磁盘访问权限:添加终端应用

  • 辅助功能:供自动化控制使用

  • 自动化:供 iMessage 技能控制 Messages.app 使用

5. 服务启动

openclaw gateway start
openclaw status
openclaw agents list

二、踩坑记录

1. Playwright 网络超时

国内环境下 Chromium 和 WebKit 下载经常中断,设置镜像源后重试。

2. 配置文件格式问题

  • 使用 Tab 缩进(必须使用空格)

  • models 数组不能为空

  • 环境变量需先 export 再使用 ${VAR} 语法

3. 端口占用

默认 18789 端口若被占用,修改配置中的 gateway.port 后重启服务。

4. iMessage 通道配置问题

执行发送命令时报错 "channel not connected" 的常见原因:

  • 目标地址格式错误:需使用 imessage:+86138xxxxxxxx 格式,仅使用手机号而不加 imessage: 前缀会导致路由失败。

  • 联系人与地址簿不匹配:目标号码若未保存在本地通讯录,或保存格式与发送时不一致,发送会失败。

  • 消息格式配置:iMessage 不支持 Markdown,需设置为纯文本格式,否则内容可能包含转义字符。

5. iMessage 数据库锁定

读取 ~/Library/Messages/chat.db 时,若 Messages.app 正在运行会报 "database is locked"。需完全退出 Messages(Command+Q)或执行 killall Messages 后再使用。

6. Apple ID 状态异常

若 Apple ID 长时间未登录或双因素认证过期,Messages.app 会要求重新验证。此时自动化调用会超时,需手动在 GUI 中完成认证流程。

7. 配置热重载

修改 openclaw.json 后必须执行 openclaw gateway restart 才能生效。validate 命令仅检查语法,通过不代表配置已加载。

8. 多用户隔离问题

当前 OpenClaw 架构下,所有用户共享同一份 MEMORY.md 和 memory/ 目录下的日志文件。即使配置多个 session 或 agent,长期记忆文件仍是全局共享状态。目前可行的方案是为每个用户单独部署 OpenClaw 实例,各自维护独立的 ~/.openclaw/ 目录。

9. 浏览器自动化问题

  • Chrome 扩展连接失败:使用 profile: "chrome" 时需在浏览器中手动点击 OpenClaw 扩展图标建立连接,扩展徽章显示为 ON 后方可使用。

  • Playwright 版本不兼容:系统已安装的其他版本 Playwright 可能与 OpenClaw 依赖冲突,表现为浏览器启动后立即崩溃。

  • 无头模式限制:部分网站检测无头浏览器并拒绝访问,需关闭 headless 模式或添加反检测参数。

  • 浏览器实例泄漏:异常退出可能导致 Chromium 进程残留,占用内存和端口,需手动清理或重启网关。

10. 模型添加与识别问题

  • 默认模型不匹配defaultModel 指定的模型 ID 必须在对应 models 数组中存在定义,否则服务启动时报 "model not found"。

  • 必填字段缺失models 数组内的对象必须包含 idnamemaxTokens 字段。缺少 maxTokens 可能导致请求截断,缺少 id 则无法被引用。

  • 本地模型连接配置:使用 Ollama 等本地模型时,baseUrl 需指向正确的 API 端点(通常为 http://localhost:11434 或兼容的 /v1路径),且 type 字段需与接口协议匹配。

  • 能力声明缺失:未显式设置 supportsStreaming: true 或 supportsVision: true 等标志,会导致流式输出或多模态功能被禁用,即使模型本身支持。

  • 模型数组为空providers 下 models 数组若为空,该 provider 将被视为无效,无法执行任何调用。