三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Mac部署OpenClaw:从零搭建AI助理工作站全流程指南

Mac部署OpenClaw:从零搭建AI助理工作站全流程指南

1. 项目概述:从零构建一个全能的AI助理工作站

最近给工作室新添置了一台Mac,从开箱到让它成为一个能7x24小时响应、处理飞书消息、对接微信、还能调用各种国产大模型的智能中枢,我花了差不多一个周末的时间。这个过程,我称之为“OpenClaw工作流部署”。OpenClaw这个名字你可能有点陌生,简单说,它是一个开源的、能帮你把不同AI模型(比如智谱、DeepSeek、通义千问)和不同通讯平台(比如飞书、微信、钉钉)连接起来的“胶水”项目。它就像一个智能总控台,你只需要一个指令,无论是来自飞书群聊还是微信私聊,它都能调用合适的AI模型来回答,甚至能自动处理一些流程性任务。

为什么要在新Mac上搞这个?因为干净。一台全新的Mac,没有历史包袱,没有奇怪的依赖冲突,是搭建这种复杂自动化工作流最理想的画布。整个过程涉及从基础环境(Homebrew、Node.js)到核心服务(OpenClaw)再到外围生态(Docker、模型服务)的完整链条。这篇文章,我就来拆解一下我是如何一步步把这台“白纸”一样的Mac,变成一台“无人值守”的AI生产力怪兽的。无论你是个人开发者想折腾一个私人助理,还是团队想搭建一个智能客服原型,这套从零开始的配置指南都值得你参考。

2. 核心思路与工具选型:为什么是这套组合拳?

在开始敲命令之前,想清楚“为什么”比“怎么做”更重要。为新Mac配置这样一套系统,核心目标很明确:稳定、可维护、以及资源友好。Mac,尤其是Apple Silicon芯片的Mac,其ARM架构和封闭性更强的系统,让一些在Linux上顺理成章的操作需要额外注意。我的选型思路就是围绕这三点展开的。

2.1 基石之选:Homebrew 与 Node.js 的必然性

首先,为什么一定是Homebrew?在macOS上管理开源软件包,Homebrew是事实上的标准。它解决了macOS本身缺乏一个统一包管理器的痛点。通过它安装的软件,通常会被集中管理在/usr/local(Intel芯片)或/opt/homebrew(Apple Silicon)目录下,与系统自带的软件隔离,避免了污染系统目录,卸载也相对干净。这对于我们后续要安装的众多依赖(如Git、Python、Docker CLI)来说,是最安全、最便捷的入口。网上那些直接下载pkg安装包或者用curl管道安装脚本的方法,在依赖管理和后续升级上都会埋下隐患。

其次,Node.js为什么是必须的?OpenClaw项目本身是基于Node.js(或TypeScript)开发的,这是它的运行时基础。但更深层的原因是,整个现代前端和许多自动化工具链都构建在Node生态之上。即便OpenClaw未来可能支持其他语言,目前Node.js仍是运行和开发这类JavaScript/TypeScript项目最直接的环境。选择Node.js的LTS(长期支持)版本,是为了追求稳定性,避免新版本引入的不兼容问题影响核心服务的运行。

2.2 核心组件:OpenClaw 的定位与替代方案考量

OpenClaw在这个体系里扮演着“大脑”和“调度中心”的角色。它不是一个AI模型,而是一个框架。它的核心价值在于提供了统一的插件化接口,一端连接着各种消息平台(输入),另一端连接着各种AI模型与服务(输出)。我选择它,而不是从零自研,主要看中两点:一是其活跃的社区和持续的迭代,意味着我能获得最新的平台适配(如飞书新版API)和模型支持(如新出的国产模型);二是其插件化架构,让我可以按需启用功能,比如先用飞书机器人,后续再接入企业微信,扩展起来很灵活。

当然,市面上也有其他类似项目,比如基于Python的ChatGPT-Next-Web的API扩展,或者一些更轻量的机器人框架。但OpenClaw对国产模型和国内办公软件的原生支持更好,文档也相对齐全,这对于主要使用国内生态的团队来说是个显著优势。

2.3 基础设施:Docker 与 模型服务(Ollama)的取舍

为了让整个系统更“干净”和易于移植,容器化是必选项。这就是Docker出场的原因。通过Docker,我可以把OpenClaw、它的数据库(如PostgreSQL)、缓存(Redis)等依赖全部打包成一个独立的运行环境。这带来的好处是:环境一致,不会因为我的Mac系统升级或安装了其他软件而出问题;一键启停,管理方便;更重要的是,未来如果我想把这套系统迁移到服务器上,几乎可以无缝完成。

那么,AI模型服务怎么放?这里有个关键决策点:是直接在宿主机(Mac)上运行大模型,还是也在Docker里运行,或者使用云API?对于个人使用或测试,我强烈推荐使用Ollama。Ollama是一个专门用于在本地运行、管理和部署大模型(如Llama 3, Qwen, DeepSeek Coder)的工具,它针对macOS(尤其是Apple Silicon的GPU加速)做了很好的优化。将Ollama直接安装在Mac上(而非Docker内),能更好地利用Mac的Metal GPU进行推理加速,获得更快的响应速度。而OpenClaw则通过HTTP API的方式去调用本地Ollama服务。这样拆开,模型服务的性能最优,而应用服务(OpenClaw)保持了容器化的整洁。

注意:如果你选择使用云上的大模型API(如智谱、OpenAI),那么模型服务这部分就更简单了,只需要在OpenClaw配置里填入API Key即可,无需在本地部署Ollama。但本地模型的好处是数据隐私性高、没有网络延迟和调用费用。

3. 基础环境搭建:稳扎稳打的 macOS 初始化

万事开头难,但把基础打牢,后面就一马平川。这一部分,我们完成三件事:安装包管理器、安装Node.js环境、安装容器化工具。请打开你的“终端”应用,我们开始。

3.1 第一步:安装 Homebrew,并处理网络问题

Homebrew的安装命令众所周知,但在新网络环境下,直接运行官方脚本很可能卡住。我们需要一个更稳健的方法。

# 首先,检查是否已安装Xcode Command Line Tools,这是Homebrew的依赖 xcode-select --install # 如果弹出窗口,点击“安装”同意即可。 # 接下来,使用国内镜像源安装Homebrew,速度会快很多 # 将安装脚本下载到本地查看(可选,安全起见) curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh -o install_brew.sh # 更推荐直接使用国内镜像源的一键安装脚本(由国内社区维护) # 例如使用清华大学源: /bin/bash -c "$(curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/misc/brew-install.sh)"

安装过程中,脚本会提示你执行两行echo命令,将Homebrew的可执行文件路径添加到你的shell配置文件(~/.zshrc~/.bash_profile)中。请务必按照提示执行。完成后,需要“激活”这个配置:

# 如果你使用的是zsh(macOS Catalina及以后版本的默认shell) source ~/.zshrc # 如果你使用的是bash source ~/.bash_profile # 验证安装 brew --version

安装成功后,立刻更换Homebrew的软件源,否则后续安装软件会非常慢。

# 替换brew.git仓库地址 cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git # 替换homebrew-core.git仓库地址 cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git # 更新brew,使其生效 brew update

3.2 第二步:安装 Node.js 与 npm,锁定LTS版本

不推荐直接从Node.js官网下载pkg安装包,用Homebrew管理是最佳实践。

# 首先,可以看看有哪些可用的版本 brew search node # 安装Node.js的LTS版本(长期支持版,目前通常是20.x或18.x) # 我们使用homebrew的“formula”直接安装,它会同时安装Node.js和npm brew install node@18 # 或者安装最新的LTS版本,如node@20 # brew install node@20

安装完成后,同样需要将Node.js的路径添加到环境变量。Homebrew在安装结束时通常会给出提示。如果没有,你可以手动添加。对于Apple Silicon Mac(M1/M2/M3),Node.js通常安装在/opt/homebrew/opt/node@18/bin。你需要将这个路径添加到PATH中。

# 编辑zsh配置文件 nano ~/.zshrc # 在文件末尾添加以下行(请根据你实际安装的路径调整,@18还是@20) export PATH="/opt/homebrew/opt/node@18/bin:$PATH" # 按 Ctrl+X,然后按 Y,再按回车保存退出。 # 使配置生效 source ~/.zshrc # 验证安装 node --version npm --version

实操心得:我强烈建议在项目层面使用nvm(Node Version Manager)来管理Node.js版本,特别是如果你需要同时维护多个不同Node版本的项目。但对于这台专门用于部署OpenClaw的Mac,直接安装一个固定的LTS版本并全局使用,是更简单稳定的选择。如果你后续确实需要多版本,可以再安装nvm。

3.3 第三步:安装 Docker Desktop for Mac

Docker的安装相对直观,但有一些设置需要注意。

  1. 访问 Docker 官网,下载适用于 Apple Silicon(或 Intel)芯片的Docker Desktop.dmg文件。
  2. 双击打开,将Docker图标拖拽到“应用程序”文件夹。
  3. 在“应用程序”中打开Docker。首次运行需要权限,点击“确定”。
  4. Docker启动后,你会在屏幕顶部菜单栏看到鲸鱼图标。点击它,选择“Settings”(设置)。

在Docker设置中,有几项关键配置:

  • Resources:根据你的Mac内存大小,调整分配给Docker的内存和CPU。运行OpenClaw和数据库,建议至少分配4GB内存。
  • Docker Engine:这里可以配置镜像加速器。在国内,为了提升拉取镜像的速度,需要添加国内镜像地址。在配置JSON中添加或修改registry-mirrors字段:
    { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ] }
    点击“Apply & Restart”使配置生效。

打开终端,验证Docker安装成功:

docker --version docker run hello-world

如果能看到“Hello from Docker!”的欢迎信息,说明Docker已正确安装并运行。

至此,你的Mac已经具备了运行现代化服务所需的基础三件套:包管理、运行时、容器引擎。接下来,我们进入核心舞台。

4. 核心服务部署:OpenClaw 的安装与配置

有了稳固的基础,现在可以开始搭建我们的智能中枢——OpenClaw了。我们将采用Docker Compose的方式来部署,这是管理多容器应用的最佳实践。

4.1 获取 OpenClaw 项目代码

首先,我们需要把OpenClaw的代码拿到本地。通常项目会托管在GitHub或Gitee上。

# 找一个你喜欢的目录,比如在用户目录下创建一个Projects文件夹 cd ~ mkdir Projects cd Projects # 克隆 OpenClaw 仓库(请使用最新的官方仓库地址,这里以示例地址为例) git clone https://github.com/openclaw-ai/openclaw.git cd openclaw

如果网络访问GitHub不畅,可以尝试使用Gitee上的镜像仓库,或者使用ghproxy.com等GitHub代理来加速克隆。

4.2 解析 Docker Compose 配置文件

进入项目目录后,你通常会找到一个docker-compose.yml文件。这是整个服务的蓝图。在启动前,花几分钟理解它是至关重要的。

version: '3.8' services: postgres: image: postgres:15-alpine container_name: openclaw-postgres environment: POSTGRES_USER: openclaw POSTGRES_PASSWORD: a_strong_password_here # 必须修改! POSTGRES_DB: openclaw volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped redis: image: redis:7-alpine container_name: openclaw-redis restart: unless-stopped openclaw: image: openclaw/openclaw:latest # 或指定特定版本 container_name: openclaw-app ports: - "3000:3000" # 将容器的3000端口映射到主机的3000端口 environment: - DATABASE_URL=postgresql://openclaw:a_strong_password_here@postgres:5432/openclaw - REDIS_URL=redis://redis:6379 # 其他配置如API密钥等,通过.env文件或这里注入 depends_on: - postgres - redis restart: unless-stopped volumes: postgres_data:

你需要重点关注以下几点:

  1. 密码POSTGRES_PASSWORDDATABASE_URL中的密码必须修改,且保持一致。使用一个强密码。
  2. 端口ports映射决定了你通过哪个端口访问OpenClaw服务(这里是3000)。
  3. 镜像:确认openclaw/openclaw:latest这个镜像是否存在且适用于你的架构(linux/amd64 或 linux/arm64)。Apple Silicon Mac需要linux/arm64镜像。如果官方未提供,你可能需要自己构建。
  4. 环境变量:核心配置通过环境变量传递。最佳实践是创建一个.env文件来管理这些变量,而不是直接写在compose文件里。

4.3 配置与环境变量设置

在项目根目录创建.env文件:

nano .env

将以下内容填入,并根据你的情况修改:

# 数据库配置(必须与docker-compose.yml中的postgres服务匹配) POSTGRES_USER=openclaw POSTGRES_PASSWORD=your_super_strong_password_123! POSTGRES_DB=openclaw DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} # Redis配置 REDIS_URL=redis://redis:6379 # OpenClaw 应用密钥(用于加密等,务必随机生成一个长字符串) APP_SECRET=$(openssl rand -hex 32) # 后续配置飞书、微信、AI模型等所需的密钥也在这里添加 # FEISHU_APP_ID=... # FEISHU_APP_SECRET=... # OPENAI_API_KEY=... # 如果用OpenAI # DASHSCOPE_API_KEY=... # 如果用阿里通义千问

然后,修改docker-compose.yml中的openclaw服务部分,让其使用.env文件:

openclaw: image: openclaw/openclaw:latest container_name: openclaw-app ports: - "3000:3000" env_file: - .env # 加载.env文件 depends_on: - postgres - redis restart: unless-stopped

4.4 启动 OpenClaw 服务栈

配置完成后,使用一条命令启动所有服务:

docker-compose up -d

-d参数代表“后台运行”。这条命令会依次拉取镜像(如果本地没有)、创建网络和卷、并启动postgres、redis和openclaw三个容器。

查看运行状态:

docker-compose ps

你应该看到三个服务的状态都是 “Up”。查看OpenClaw容器的日志,确认应用启动无误:

docker-compose logs -f openclaw

如果看到数据库连接成功、服务器启动在3000端口的日志,就说明成功了。

现在,打开浏览器,访问http://localhost:3000。你应该能看到OpenClaw的Web管理界面(如果项目提供了的话)或者API运行成功的提示。

踩坑记录:第一次启动时,我遇到了openclaw/openclaw:latest镜像找不到的问题。这是因为官方可能没有为ARM架构(Apple Silicon)提供预构建的镜像。解决方案是:1) 检查项目是否有Dockerfile,在项目根目录执行docker build -t openclaw-local .自己构建镜像,然后将docker-compose.yml中的镜像名改为openclaw-local。2) 或者,寻找明确支持多架构的镜像标签。

5. 生态连接:接入飞书、微信与本地 AI 模型

OpenClaw本身只是一个空壳,它的威力在于连接。这一步,我们将把它和外部世界打通:一个是信息输入源(飞书、微信),一个是智慧大脑(AI模型)。

5.1 接入飞书机器人

飞书机器人的接入,本质上是你在飞书开放平台创建一个应用,然后让OpenClaw作为这个应用的后端服务,接收和处理飞书发来的消息。

  1. 创建飞书应用

    • 登录 飞书开放平台 。
    • 点击“创建企业自建应用”,填写应用名称、描述等。
    • 在应用详情页,找到“凭证与基础信息”,记录下App IDApp Secret。这就是你的应用身份证。
  2. 配置事件订阅与消息

    • 在“事件订阅”页面,填写请求网址 URL。这就是OpenClaw提供给飞书的回调地址。假设你的OpenClaw服务有公网IP或域名https://your-server.com,那么URL可能是https://your-server.com/feishu/event(具体路径需查看OpenClaw飞书插件的文档)。
    • 关键一步:飞书会向这个URL发送一个带challenge参数的GET请求进行验证。你的OpenClaw服务必须能正确接收并原样返回这个challenge值。确保你的服务已正确配置并可达。
    • 在“权限管理”页面,为应用添加所需权限,例如:im:message(接收与发送单聊、群聊消息)、contact:user:readonly(读取用户信息)等,根据你的机器人功能需求添加。
    • 发布版本,并等待企业管理员审核通过(如果是企业自用,自己审批即可)。
  3. 在 OpenClaw 中配置

    • 在OpenClaw的Web管理界面(或通过环境变量)找到飞书插件配置。
    • 填入App IDApp Secret
    • 填入你配置的Encrypt KeyVerification Token(在事件订阅页面)。
    • 保存配置。OpenClaw服务会重启加载新配置。
  4. 测试:在飞书里找到你的应用,添加到群聊或发起单聊,发送消息,看OpenClaw是否能收到并回复。

5.2 接入微信(基于企业微信或公众号)

纯个人微信的自动化接入非常困难且风险高,容易被封号。因此,强烈建议使用企业微信机器人或服务号作为桥梁。企业微信提供了完善的API,且OpenClaw通常有对应的插件。

  • 企业微信机器人:最简单。在企业微信群里添加一个“群机器人”,会得到一个Webhook地址。在OpenClaw的微信(企业微信)插件里配置这个Webhook,就可以实现消息转发。OpenClaw处理完AI回复后,再通过这个Webhook发回群里。
  • 企业微信应用/服务号:功能更强大,类似飞书应用。需要在企业微信后台创建应用,配置API接收消息服务器(即OpenClaw服务的回调地址),并配置相应的消息权限。

配置逻辑与飞书类似:获取企业ID、应用AgentId、Secret,在OpenClaw中配置回调URL和Token。同样需要处理服务器验证(GET请求返回echostr)。

5.3 连接本地 AI 模型(Ollama)

这是让整个系统拥有“智能”的关键。我们之前提到,将Ollama安装在宿主机上以获得最佳性能。

  1. 安装 Ollama

    • 访问 Ollama 官网,下载 macOS 版本并安装。或者使用Homebrew安装:brew install ollama
    • 安装后,在终端启动Ollama服务:ollama serve。它会运行在http://localhost:11434
  2. 拉取并运行模型

    • 打开另一个终端窗口,拉取一个你喜欢的模型。例如,拉取一个轻量级的国产模型:
      ollama pull qwen2.5:7b-instruct
    • 运行这个模型:
      ollama run qwen2.5:7b-instruct

    现在,你本地就有了一个可以通过API调用的Qwen 2.5 7B模型。

  3. 在 OpenClaw 中配置模型端点

    • 在OpenClaw的管理界面,找到AI模型配置部分。
    • 添加一个新的“自定义模型”或“OpenAI兼容接口”。
    • 模型名称可以自定义,如local-qwen
    • API Base URL填写http://host.docker.internal:11434。这是一个Docker的特殊域名,指向宿主机(你的Mac)。因为OpenClaw运行在Docker容器内,要访问宿主机的服务,需要使用这个地址,而不是localhost
    • API Key可以留空(如果Ollama未设置认证)。
    • 模型标识符填写qwen2.5:7b-instruct
    • 保存。

现在,你可以在OpenClaw中创建一个对话流程,当收到飞书或微信的消息时,就调用这个local-qwen模型来生成回复。一个完整的“接收消息 -> AI处理 -> 回复消息”的闭环就形成了。

6. 实现无人值守与稳定运行

系统跑起来了,但我们要的是“无人值守”,即7x24小时稳定运行,即使Mac重启或网络波动,服务也能自动恢复。同时,我们还需要考虑数据安全和日常维护。

6.1 配置 Docker Compose 自动重启

我们在docker-compose.yml中已经为每个服务设置了restart: unless-stopped。这意味着除非我们手动停止容器,否则Docker守护进程重启(比如系统重启)后,这些容器都会自动启动。这是实现“无人值守”的基础。

为了更彻底,我们可以将Docker Desktop配置为登录时自动启动:

  • 打开Docker Desktop,进入Settings -> General
  • 勾选Start Docker Desktop when you log in

这样,只要用户登录Mac,Docker服务就会启动,继而触发Compose项目的容器启动。

6.2 数据持久化与备份

数据是无价的。我们的数据主要在两个地方:

  1. 数据库(PostgreSQL):通过Docker卷postgres_data持久化在宿主机上。你需要知道这个卷的实际存储位置(可通过docker volume inspect openclaw_postgres_data查看Mountpoint),并定期备份这个目录。
  2. OpenClaw的配置文件与上传文件:如果OpenClaw容器内有需要持久化的配置或文件,你也应该在docker-compose.yml中为其添加一个卷映射,将容器内路径映射到宿主机某个安全目录。

一个简单的备份策略是使用cron定时任务,每天将数据目录打包压缩并拷贝到其他存储(如移动硬盘、云存储)。

# 编辑cron任务 crontab -e # 添加一行,例如每天凌晨3点备份 0 3 * * * /bin/tar -czf /path/to/backup/opencraw_data_$(date +\%Y\%m\%d).tar.gz /path/to/your/docker/volume/mountpoint

6.3 日志管理与监控

日志是排查问题的眼睛。我们之前用了docker-compose logs查看实时日志。对于生产环境,需要更系统的管理:

  • 日志轮转:Docker默认会记录日志,但不会自动清理,可能导致磁盘占满。可以在docker-compose.yml中为每个服务配置日志驱动和大小限制:
    services: openclaw: # ... 其他配置 logging: driver: "json-file" options: max-size: "10m" max-file: "3"
    这样,每个容器的日志文件最大10MB,最多保留3个。
  • 集中查看:可以使用docker-compose logs -f --tail=100持续查看最后100行日志。对于更复杂的监控,可以考虑接入Grafana+Loki或ELK栈,但对于个人项目,定期用命令查看通常足够。

6.4 服务健康检查与更新

  • 健康检查:可以编写一个简单的脚本,定期通过HTTP请求OpenClaw的健康检查端点(如果它提供了的话),或者检查关键容器是否在运行。
    #!/bin/bash if ! curl -f http://localhost:3000/health > /dev/null 2>&1; then echo "OpenClaw is down! Restarting..." cd /path/to/your/openclaw docker-compose down && docker-compose up -d fi
    将这个脚本也加入cron,每5分钟执行一次。
  • 更新:当OpenClaw发布新版本时,更新流程如下:
    1. 进入项目目录:cd ~/Projects/openclaw
    2. 拉取最新代码:git pull
    3. 重新拉取最新镜像(如果有更新):docker-compose pull
    4. 重启服务:docker-compose up -d --force-recreate这个过程不会影响持久化的数据库卷。

7. 常见问题与故障排查实录

在实际部署和运行中,你几乎一定会遇到各种问题。下面是我踩过的一些坑和解决方案,希望能帮你节省时间。

7.1 网络与镜像拉取问题

  • 问题docker-compose up时拉取镜像速度极慢或失败。
  • 排查:确认Docker Desktop的镜像加速器已正确配置(见3.3节)。可以运行docker info查看Registry Mirrors是否包含你配置的地址。
  • 解决:如果加速器无效,可以尝试手动从国内镜像站拉取镜像,然后重新打标签。例如:
    docker pull registry.cn-hangzhou.aliyuncs.com/library/postgres:15-alpine docker tag registry.cn-hangzhou.aliyuncs.com/library/postgres:15-alpine postgres:15-alpine

7.2 端口冲突与权限问题

  • 问题:启动时提示port is already allocated

  • 排查:端口3000可能被其他程序占用。使用lsof -i :3000netstat -an | grep 3000查看占用进程。

  • 解决:终止占用进程,或者修改docker-compose.ymlports的映射,例如改为- "3001:3000",这样外部就通过3001端口访问。

  • 问题:Docker命令需要sudo,或者容器内应用无法写入卷。

  • 排查:权限问题。特别是当宿主机目录映射到容器内时。

  • 解决:确保你的用户属于docker用户组(sudo usermod -aG docker $USER,然后注销重新登录)。对于文件权限,可以在docker-compose.yml中指定用户,或确保宿主机目录对Docker进程可写。

7.3 OpenClaw 容器启动失败

  • 问题docker-compose logs openclaw显示数据库连接失败。
  • 排查
    1. 检查.env文件中的DATABASE_URL是否与postgres服务定义的密码完全一致。
    2. 检查postgres容器是否健康运行:docker-compose logs postgres
    3. 可能是数据库尚未初始化完成,OpenClaw应用就尝试连接。可以在openclaw服务配置中添加depends_on的健康检查条件(Docker Compose v2.1+支持),或者简单地在OpenClaw的启动命令中添加重试逻辑(如果项目支持)。
  • 解决:最粗暴但有效的方法是,先单独启动数据库,等待十几秒后再启动应用:
    docker-compose up -d postgres redis sleep 15 docker-compose up -d openclaw

7.4 飞书/微信回调验证失败

  • 问题:在飞书开放平台配置请求网址时,验证总是失败。
  • 排查
    1. 网络可达性:你的OpenClaw服务必须能从公网访问。如果你在本地Mac开发,需要内网穿透工具(如ngrok、frp)将本地的localhost:3000暴露为一个公网HTTPS地址。飞书/微信只支持HTTPS回调。
    2. 路径正确性:确认你填写的回调URL路径,与OpenClaw飞书插件实际处理验证请求的路由路径完全一致。查看项目文档或源码。
    3. 日志查看:在OpenClaw容器日志中,查看飞书插件是否收到了GET验证请求,以及它返回了什么。
  • 解决:使用ngrok快速生成一个临时公网地址进行测试:
    # 安装ngrok并配置authtoken后 ngrok http 3000
    它会给你一个https://xxxx.ngrok.io的地址。用这个地址加上你的回调路径(如/feishu/event)填到飞书后台。注意ngrok地址每次启动都会变,仅用于测试。

7.5 本地 Ollama 模型调用超时或无响应

  • 问题:OpenClaw配置了本地模型,但调用时长时间无反应或报连接错误。
  • 排查
    1. 确认Ollama服务正在运行:ps aux | grep ollama
    2. 在宿主机本地测试Ollama API是否正常:
      curl http://localhost:11434/api/generate -d '{"model": "qwen2.5:7b-instruct", "prompt": "Hello"}'
    3. 如果宿主机测试正常,但在OpenClaw容器内调用失败,问题出在容器网络访问宿主机。确认在OpenClaw配置中使用的地址是http://host.docker.internal:11434,而不是http://localhost:11434。对于Linux宿主机(非Docker Desktop),这个域名可能无效,需要改用宿主机的实际IP地址(如http://192.168.1.100:11434)。
  • 解决:确保使用正确的宿主机访问地址。在Docker Desktop for Mac环境下,host.docker.internal是标准做法。

经过以上七个章节的拆解,从一台崭新的Mac,到成为一个集成了国产AI、连通飞书微信、并能稳定无人值守运行的智能助理中心,整个路径已经清晰可见。这个过程看似步骤繁多,但每一步都有其必要性,都是在为系统的稳定性、可维护性和扩展性打基础。我最深的体会是,自动化运维的起点,正是第一次手动部署时写下的那些清晰、可复现的步骤和配置。当你下次需要重置环境或迁移服务器时,你会发现这份记录的价值。最后一个小建议:将所有配置(.envdocker-compose.yml)和关键的部署脚本,用一个Git仓库管理起来,这就是你这份“数字资产”最宝贵的源代码。

← 返回列表