Openclaw 在 Mac mini 上的安装、启动、使用、完全卸载与清理
在自己的Mac mini搭建专属的Openclaw
type
Post
status
Published
date
Mar 20, 2026
slug
openclaw
summary
在自己的Mac mini搭建专属的Openclaw
tags
工具
category
技术分享
icon
password
环境说明
- 设备:搭载 Apple Silicon M4 芯片的 Mac,32GB 统一内存
- 本地大模型:Qwen 3.5 27B(通过 Ollama 运行,零 API 费用)
- 云端备用模型:DeepSeek(或其他兼容 OpenAI 格式的 API)
- 模型路由中间件:LiteLLM(统一管理本地和云端模型)
- 控制入口:飞书(长连接 WebSocket 模式)
- 进程守护:PM2(替代 macOS 原生 LaunchAgent,防止两者冲突)
第一阶段:准备基础环境
1.1 安装 Homebrew
打开 Mac 的终端(Terminal.app),运行:
注意(M4 芯片必做):安装结束后,终端底部会打印两行以eval开头的命令。请将这两行复制出来,粘贴到终端里运行,否则后续所有brew命令会报找不到命令的错误。
1.2 安装 Node.js 和 Python
1.3 解决 nvm 与 Homebrew 的 Node.js 版本冲突
如果 Mac 上已安装
nvm(Node 版本管理器),Homebrew 安装的 Node 和 nvm 管理的旧版 Node 会产生冲突,导致 OpenClaw 安装时报 requires Node.js 20+ 错误。使用 nvm 安装并固定 Node 20 LTS 版本:
运行以下命令确认版本输出为
v20.x.x 后再继续:1.4 安装 PM2
第二阶段:安装本地大模型(Qwen 3.5 27B)
2.1 安装 Ollama
前往 ollama.com 下载并安装 Mac 客户端。安装完毕后,打开 Ollama.app,确认屏幕右上角菜单栏出现羊驼图标。
2.2 拉取 Qwen 3.5 27B 修正版
注意:请勿直接运行官方ollama pull qwen3.5。官方版本存在工具调用(Tool Calling)缺陷,会导致 OpenClaw 无法正确识别 AI 的指令。请使用以下社区修正版本:
拉取完毕后,测试是否可以正常对话:
收到正常回复后按
Ctrl+D 退出。Ollama 会继续在后台运行,监听本地 http://localhost:11434。第三阶段:安装并配置 LiteLLM
3.1 安装 LiteLLM
3.2 创建 LiteLLM 配置文件
按
i 进入插入模式,粘贴以下内容(将 DeepSeek 的 API Key 替换为真实密钥;如暂无云端 Key,可删除 cloud-fallback 节点):按
Esc 退出插入模式,输入 :wq 保存并退出。3.3 找出 LiteLLM 的绝对路径
PM2 作为后台服务不会继承终端的环境变量,必须使用绝对路径:
记下输出的路径(例如
/opt/homebrew/bin/litellm)。3.4 创建 LiteLLM 启动脚本
按
i 进入插入模式,粘贴以下内容(将路径替换为上一步找到的真实路径):按
Esc,输入 :wq 保存退出,然后赋予执行权限:3.5 测试 LiteLLM 是否正常启动
确认输出中包含
LiteLLM: Proxy initialized 和 Uvicorn running on http://0.0.0.0:4000,按 Ctrl+C 退出。第四阶段:安装并配置 OpenClaw
4.1 全局安装 OpenClaw
4.2 授予 Mac 系统权限
点击屏幕左上角苹果图标 -> 系统设置 -> 隐私与安全性,依次找到以下三项,为"终端(Terminal)"打上勾:
- 辅助功能(Accessibility)
- 屏幕录制(Screen Recording)
- 完全磁盘访问权限(Full Disk Access)
4.3 创建 OpenClaw 配置文件
按
i 进入插入模式,粘贴以下内容(将飞书的 appId 和 appSecret 替换为真实值,获取方式见第五阶段):按
Esc,输入 :wq 保存退出。4.4 验证配置文件
确认输出中没有红色 ERROR 报错后继续。
第五阶段:对接飞书(Feishu)
5.1 创建飞书自建应用
- 浏览器打开 飞书开放平台,使用飞书账号登录。
- 点击创建企业自建应用,填写应用名称(例如"Mac 管家")和图标。
5.2 获取 App ID 和 App Secret
在左侧菜单点击凭证与基础信息,复制
App ID 和 App Secret,填入 openclaw.json 的对应字段。填完后,重新打开配置文件更新:
5.3 添加机器人能力
在左侧菜单点击添加应用能力,选择并添加机器人(Bot)。
5.4 配置事件订阅
在左侧菜单点击事件与回调:
- 订阅方式选择:通过长连接接收事件(WebSocket)
此步骤为机器人能否收到消息的关键,选错会导致 400 连接错误,机器人完全无响应。
- 点击添加事件,搜索并添加
im.message.receive_v1(接收消息)。
5.5 配置权限
在左侧菜单点击权限管理,搜索并开通以下权限:
im:message
im:message:send_as_bot
5.6 发布版本
在左侧菜单点击版本管理与发布 -> 创建版本,填写版本号(如
1.0.0),点击发布。如需管理员审核,前往飞书客户端工作台 -> 应用管理通过审核后方可生效。
注意:每次修改权限、事件订阅或应用能力后,均需重新发布一个新版本才能生效。
第六阶段:用 PM2 托管所有服务
6.1 创建 OpenClaw 启动脚本
找出 OpenClaw 的绝对路径:
创建启动脚本:
按
i 进入插入模式,粘贴以下内容(将路径替换为实际路径):按
Esc,输入 :wq 保存退出,赋予权限:6.2 使用 PM2 启动所有服务
6.3 配置开机自启动
注意:该命令会在终端中打印一行以sudo env PATH=...开头的新命令。请将该命令完整复制后,粘贴回终端运行,输入 Mac 开机密码确认授权。
然后保存当前进程列表:
6.4 验证运行状态
确认
litellm 和 openclaw 均显示为绿色的 online。第七阶段:飞书使用与模型切换
日常使用
打开飞书,搜索并打开创建的机器人,发送任意消息。机器人会使用本地 M4 Mac 上的 Qwen 27B 进行回复,数据不经过任何外部服务器。
飞书内快速切换模型
飞书指令 | 效果 |
/model | 查看当前使用的模型 |
/model local-qwen27b | 切换到本地 Qwen 模型 |
/model deepseek-chat | 切换到云端 DeepSeek 模型 |
/status | 查看网关运行状态 |
附录一:日常维护命令速查
操作 | 命令 |
查看所有服务状态 | pm2 status |
查看 OpenClaw 实时日志 | pm2 logs openclaw |
查看 LiteLLM 实时日志 | pm2 logs litellm |
重启 OpenClaw | pm2 restart openclaw |
重启 LiteLLM | pm2 restart litellm |
临时停止所有服务 | pm2 stop all |
取消开机自启 | pm2 unstartup |
附录二:关闭与卸载步骤
临时停止服务
取消开机自启
完全卸载
按照以下顺序执行,确保彻底清理:
清除系统权限:进入系统设置 -> 隐私与安全性,在"辅助功能"、"屏幕录制"、"完全磁盘访问权限"列表中,选中并删除"终端"的授权。
附录三:常见报错速查表
报错信息 | 原因 | 解决方案 |
requires Node.js 20+ | nvm 锁定了旧版本 | 运行 nvm install 20 && nvm alias default 20 |
Unrecognized key: "provider" | 配置文件格式为旧版 | 将根节点改为 models.providers |
models.providers.litellm.models: expected array | 缺少 models 数组 | 在 litellm 配置块中添加 models: [...] |
Gateway start blocked: set gateway.mode=local | 未指定网关模式 | 运行 openclaw config set gateway.mode local |
Cannot destructure property 'tenant_access_token' | App ID/Secret 错误或应用未发布 | 核对密钥,并在飞书后台重新发布版本 |
Request failed with status code 400 (ws) | 飞书未开启长连接订阅 | 在飞书开发者后台将订阅方式改为"长连接"并重新发布 |
Restarted LaunchAgent 无限循环 | PM2 与 macOS LaunchAgent 冲突 | 运行 launchctl unload ~/Library/LaunchAgents/ai.openclaw.gateway.plist |
PM2 [ERROR] File not found | PM2 将命令字符串当文件名 | 用绝对路径启动脚本代替内联命令 |
pm2 status: errored | Python 环境路径不匹配 | 用 which litellm 找绝对路径,并写入启动脚本 |
/bin/bash: gateway: No such file or directory | PM2 无法识别子命令参数 | 将 openclaw gateway run 写入 Shell 脚本,由 PM2 执行脚本 |
飞书点开机器人没有输入框 | 事件未订阅或版本未发布 | 添加 im.message.receive_v1 事件后重新发布版本 |
发消息机器人不回复 | dmPolicy 限制或权限未开通 | 配置文件中设置 "dmPolicy": "open" 和 "allowFrom": ["*"] |
Loading...