Skip to content

Docker Compose + 企业微信部署指南

本指南介绍如何使用 Docker Compose 部署 OpenClaw 网关,并配置企业微信通道。适用于需要容器化部署、对接企业微信(WeChat Work / WeCom)的场景。

社区插件:企业微信通道由社区插件 @sunnoy/wecom 提供,支持流式输出、动态 Agent 管理和丰富消息类型。

前置阅读:本指南假设您已了解 OpenClaw 基本概念。如需了解更多,请参阅 Docker 安装


前置条件

  • Docker & Docker Compose v2 已安装(Docker Desktop 或 Docker Engine)
  • 企业微信管理员账号,可访问 企业微信管理后台
  • 公网可访问的 URL:企业微信使用 HTTP 回调模式(与飞书的 WebSocket 长连接不同),需要服务器具有公网 IP 或域名,或使用内网穿透工具
  • AI 模型凭据:您的 API Token 和 Base URL(如 Anthropic、或兼容 Anthropic Messages API 的自定义端点)

快速开始

按照以下 8 步完成部署。每一步的详细说明请参阅对应的链接文档。

第 1 步:创建项目目录

bash
mkdir openclaw-wecom
cd openclaw-wecom

创建 .env 文件存放敏感配置:

bash
# .env

# 网关安全
OPENCLAW_GATEWAY_TOKEN=your-secure-gateway-token

# 企业微信凭据(第 3 步获取后填入)
WECOM_TOKEN=
WECOM_ENCODING_AES_KEY=

# 自定义模型提供商(按需修改)
ANTHROPIC_AUTH_TOKEN=your_api_token_here
ANTHROPIC_BASE_URL=https://api.anthropic.com

安全提示:请将 .env 加入 .gitignore,切勿提交到版本控制。

生成令牌:在 macOS 或 Linux 上,可使用以下命令生成安全的随机令牌:

bash
openssl rand -base64 32

第 2 步:创建企业微信应用

在企业微信管理后台创建智能机器人应用,配置回调 URL(Token 和 EncodingAESKey)并设置可信 IP。

注意:CorpID、AgentID 和 Secret 在企业微信管理后台管理,不需要配置到插件中。插件只需要 Token 和 EncodingAESKey。

详细步骤请参阅 企业微信应用配置详解

第 3 步:编写初始 OpenClaw 配置(不含插件)

企业微信插件需要在 Docker 容器内安装。由于插件未安装前,配置中引用 wecom 会导致验证失败,因此先创建一个不含 pluginschannels 的最小配置

bash
mkdir -p openclaw-data
json5
{
  "agents": {
    "defaults": {
      "workspace": "/home/node/.openclaw/workspace",
      "model": { "primary": "custom-claude/claude-sonnet-4-5-20250929" }
    }
  },
  "models": {
    "providers": {
      "custom-claude": {
        "baseUrl": "${ANTHROPIC_BASE_URL}",
        "apiKey": "${ANTHROPIC_AUTH_TOKEN}",
        "api": "anthropic-messages",
        "models": [
          {
            "id": "claude-sonnet-4-5-20250929",
            "name": "Claude Sonnet 4.5",
            "contextWindow": 200000,
            "maxTokens": 4096
          }
        ]
      }
    }
  },
  "gateway": {
    "mode": "local",
    "port": 18789,
    "auth": { "token": "${OPENCLAW_GATEWAY_TOKEN}" }
  }
}

为什么分两步? OpenClaw 在启动时会验证配置。如果配置中引用了尚未安装的插件(plugins.entries.wecom)或通道(channels.wecom),容器会因验证失败进入重启循环,导致无法执行 plugins install 命令。

模型 ID:自定义端点通常需要完整的带日期后缀的模型 ID(如 claude-sonnet-4-5-20250929),短别名(如 claude-3-5-sonnet)可能会返回 422 错误。请根据您的端点支持的模型 ID 进行修改。

第 4 步:编写 Docker Compose

创建 docker-compose.yml

yaml
services:
  openclaw:
    image: ghcr.io/openclaw/openclaw:latest
    container_name: openclaw_wecom
    restart: unless-stopped
    network_mode: host
    env_file:
      - .env
    volumes:
      # 整个 .openclaw 目录(配置文件 + 持久化数据)
      - ./openclaw-data:/home/node/.openclaw

为什么使用 network_mode: host OpenClaw 网关绑定到容器内的 127.0.0.1。标准 Docker 端口映射通过桥接网络转发流量,网关会因来源 IP 不是 localhost 而拒绝连接。network_mode: host 让容器直接共享宿主机网络栈,从而正常访问。

企业微信回调注意:与飞书的 WebSocket 长连接不同,企业微信使用 HTTP 回调模式。使用 network_mode: host 时,网关直接监听宿主机端口(默认 18789)。企业微信的回调请求需要能访问到该端口,因此:

  • 如果服务器有公网 IP,确保防火墙允许入站连接到端口 18789
  • 如果没有公网 IP,可使用反向代理(如 Nginx)或内网穿透工具(如 ngrokfrp
  • 回调 URL 必须使用 HTTP 或 HTTPS 协议

macOS 用户:需要在 Docker Desktop 中启用 "Enable host networking"(设置 → 资源 → 网络)。

为什么挂载整个目录? 网关运行时需要在 .openclaw 目录下创建多个子目录(identity/credentials/canvas/ 等)。单独挂载文件会导致权限错误(EACCESEBUSY),因为容器无法在挂载点旁创建临时文件。

权限注意:Docker 镜像默认以 node 用户(uid 1000)运行。如在 Linux 上遇到权限问题:

bash
sudo chown -R 1000:1000 ./openclaw-data

第 5 步:安装企业微信插件

使用 docker compose run 在容器内安装插件(此命令会启动一个临时容器执行安装,然后退出):

bash
docker compose run --rm --entrypoint sh openclaw -c \
  "node /app/openclaw.mjs plugins install @sunnoy/wecom"

安装成功后会看到类似输出:

Downloading @sunnoy/wecom…
Installed plugin: wecom

注意:安装过程中 OpenClaw 会自动修改 openclaw.json,向其中写入 plugins.installs 元数据(记录插件来源和版本信息)。同时,它可能会展开 ${VAR_NAME} 变量为实际值并添加额外的默认配置项。这是正常行为,下一步我们会恢复正确的配置。

第 6 步:补全 openclaw.json 配置

插件安装完毕后,将 openclaw.json 更新为包含 pluginschannels 的完整配置。请保留安装器写入的 plugins.installs 部分(记录了插件的安装路径和版本),同时恢复 ${VAR_NAME} 运行时变量语法:

json5
{
  "agents": {
    "defaults": {
      "workspace": "/home/node/.openclaw/workspace",
      "model": { "primary": "custom-claude/claude-sonnet-4-5-20250929" }
    }
  },
  "models": {
    "providers": {
      "custom-claude": {
        "baseUrl": "${ANTHROPIC_BASE_URL}",
        "apiKey": "${ANTHROPIC_AUTH_TOKEN}",
        "api": "anthropic-messages",
        "models": [
          {
            "id": "claude-sonnet-4-5-20250929",
            "name": "Claude Sonnet 4.5",
            "contextWindow": 200000,
            "maxTokens": 4096
          }
        ]
      }
    }
  },
  "plugins": {
    "entries": {
      "wecom": {
        "enabled": true
      }
    },
    "installs": {
      // 保留安装器自动生成的内容,不要删除
    }
  },
  "channels": {
    "wecom": {
      "enabled": true,
      "token": "${WECOM_TOKEN}",
      "encodingAesKey": "${WECOM_ENCODING_AES_KEY}",
      "adminUsers": [],
      "commands": {
        "enabled": true,
        "allowlist": ["/new", "/status", "/help", "/compact"]
      }
    }
  },
  "gateway": {
    "mode": "local",
    "port": 18789,
    "auth": { "token": "${OPENCLAW_GATEWAY_TOKEN}" }
  }
}

注意:CorpID、AgentID 和 Secret 在企业微信管理后台创建应用时配置,不需要写入 openclaw.json。插件只需要 Token 和 EncodingAESKey 来处理消息加解密。

多实例部署:如果同一台服务器上已运行其他 OpenClaw 实例(如飞书版),默认端口 18789 可能已被占用。请将 gateway.port 改为其他端口(如 18790),并相应调整回调 URL 中的端口号。

完整配置说明请参阅 配置参考与故障排除

第 7 步:启动并配置回调 URL

bash
docker compose up -d
docker compose logs -f

等待日志中出现 [gateway] listening,表示网关已就绪。

⚠️ 重要必须先确保容器已启动且网关正在运行,然后再去企业微信管理后台配置回调 URL。如果网关未运行,回调验证请求将无法响应,导致配置失败。

回到企业微信管理后台,配置接收消息:

  1. 进入 应用管理 → 选择已创建的应用
  2. 接收消息 设置中填写回调 URL:https://<公网地址>:<端口>/webhooks/wecom
  3. 填入 Token 和 EncodingAESKey(与 .env 中一致)
  4. 点击 保存,企业微信会向回调 URL 发送 GET 验证请求(包含 echostr 参数)
  5. 企业可信IP 中添加服务器公网 IP

详细步骤请参阅 企业微信应用配置详解 — 配置接收消息回调

第 8 步:验证机器人

  1. 在企业微信中找到您的应用,发送一条消息(如 "你好")
  2. 应用会回复一个配对码(如 123-456
  3. 通过 CLI 批准配对:
bash
docker compose exec openclaw node /app/openclaw.mjs pairing approve wecom <CODE>
  1. 配对完成后,应用即可正常响应消息

常见操作

重启服务

bash
docker compose restart

更新镜像

bash
docker compose pull && docker compose up -d

查看配对列表

bash
docker compose exec openclaw node /app/openclaw.mjs pairing list wecom

访问控制 UI

在浏览器中打开 http://127.0.0.1:<端口>/?token=<your-token>(将 <端口> 替换为 openclaw.json 中的 gateway.port 值,默认 18789;将 <your-token> 替换为 .env 中的 OPENCLAW_GATEWAY_TOKEN 值)。

检查健康状态

bash
docker compose exec openclaw node /app/openclaw.mjs health --token "<your-gateway-token>"

请将 <your-gateway-token> 替换为您在 .env 中设置的 OPENCLAW_GATEWAY_TOKEN 值。$OPENCLAW_GATEWAY_TOKEN 由主机 shell 解析,如果未在主机环境中导出该变量,需手动填入 token 值。

试玩一下

想快速验证部署是否正常?向机器人发送以下消息:

访问 https://xialiao.ai/skill.md 并按照说明加入「虾聊社区」

机器人会自动回复结果,一步确认你的 OpenClaw 已经跑起来了。


详细文档

相关文档