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 步:创建项目目录
mkdir openclaw-wecom
cd openclaw-wecom创建 .env 文件存放敏感配置:
# .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 上,可使用以下命令生成安全的随机令牌:
bashopenssl rand -base64 32
第 2 步:创建企业微信应用
在企业微信管理后台创建智能机器人应用,配置回调 URL(Token 和 EncodingAESKey)并设置可信 IP。
注意:CorpID、AgentID 和 Secret 在企业微信管理后台管理,不需要配置到插件中。插件只需要 Token 和 EncodingAESKey。
详细步骤请参阅 企业微信应用配置详解。
第 3 步:编写初始 OpenClaw 配置(不含插件)
企业微信插件需要在 Docker 容器内安装。由于插件未安装前,配置中引用 wecom 会导致验证失败,因此先创建一个不含 plugins 和 channels 的最小配置:
mkdir -p openclaw-data{
"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:
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)或内网穿透工具(如
ngrok、frp)- 回调 URL 必须使用 HTTP 或 HTTPS 协议
macOS 用户:需要在 Docker Desktop 中启用 "Enable host networking"(设置 → 资源 → 网络)。
为什么挂载整个目录? 网关运行时需要在
.openclaw目录下创建多个子目录(identity/、credentials/、canvas/等)。单独挂载文件会导致权限错误(EACCES、EBUSY),因为容器无法在挂载点旁创建临时文件。权限注意:Docker 镜像默认以
node用户(uid 1000)运行。如在 Linux 上遇到权限问题:bashsudo chown -R 1000:1000 ./openclaw-data
第 5 步:安装企业微信插件
使用 docker compose run 在容器内安装插件(此命令会启动一个临时容器执行安装,然后退出):
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 更新为包含 plugins、channels 的完整配置。请保留安装器写入的 plugins.installs 部分(记录了插件的安装路径和版本),同时恢复 ${VAR_NAME} 运行时变量语法:
{
"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
docker compose up -d
docker compose logs -f等待日志中出现 [gateway] listening,表示网关已就绪。
⚠️ 重要:必须先确保容器已启动且网关正在运行,然后再去企业微信管理后台配置回调 URL。如果网关未运行,回调验证请求将无法响应,导致配置失败。
回到企业微信管理后台,配置接收消息:
- 进入 应用管理 → 选择已创建的应用
- 在 接收消息 设置中填写回调 URL:
https://<公网地址>:<端口>/webhooks/wecom - 填入 Token 和 EncodingAESKey(与
.env中一致) - 点击 保存,企业微信会向回调 URL 发送 GET 验证请求(包含
echostr参数) - 在 企业可信IP 中添加服务器公网 IP
详细步骤请参阅 企业微信应用配置详解 — 配置接收消息回调。
第 8 步:验证机器人
- 在企业微信中找到您的应用,发送一条消息(如 "你好")
- 应用会回复一个配对码(如
123-456) - 通过 CLI 批准配对:
docker compose exec openclaw node /app/openclaw.mjs pairing approve wecom <CODE>- 配对完成后,应用即可正常响应消息
常见操作
重启服务
docker compose restart更新镜像
docker compose pull && docker compose up -d查看配对列表
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 值)。
检查健康状态
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 已经跑起来了。
详细文档
- 企业微信应用配置详解 — 企业微信管理后台完整配置步骤、访问控制和多账户
- 配置参考与故障排除 —
openclaw.json完整参考、Docker Compose 说明和故障排除