
前言
最近这段时间openclaw确实很火,记录一下尝鲜部署的过程,跟着一步步操作,小白也能体验到ai小助理的感觉!
先在飞牛目录里创建.env文件:
js# OpenClaw Docker 环境变量配置示例
# 复制此文件为 .env 并修改相应的值
# Docker 镜像配置
OPENCLAW_IMAGE=justlikemaki/openclaw-docker-cn-im:latest
# 模型配置
MODEL_ID=deepseek-chat
BASE_URL=https://api.deepseek.com
API_KEY=
# API 协议类型: openai-completions 或 anthropic-messages
# openai-completions: OpenAI 协议 (适用于 OpenAI、Gemini 等模型)
# anthropic-messages: Claude 协议 (适用于 Claude 模型,支持 Prompt Caching)
API_PROTOCOL=openai-completions
# 模型上下文窗口大小
CONTEXT_WINDOW=200000
# 模型最大输出 tokens
MAX_TOKENS=8192
# Telegram 配置(可选,留空则不启用)
TELEGRAM_BOT_TOKEN=
# 飞书配置(可选,留空则不启用)
FEISHU_APP_ID=
FEISHU_APP_SECRET=
# 钉钉配置(可选,留空则不启用)
DINGTALK_CLIENT_ID=
DINGTALK_CLIENT_SECRET=
DINGTALK_ROBOT_CODE=
DINGTALK_CORP_ID=
DINGTALK_AGENT_ID=
# QQ 机器人配置(可选,留空则不启用)
QQBOT_APP_ID=
QQBOT_CLIENT_SECRET=
# 企业微信配置(可选,留空则不启用)
WECOM_TOKEN=CHxfFT
WECOM_ENCODING_AES_KEY=
# 工作空间配置(不要更改)
WORKSPACE=/home/node/.openclaw/workspace
# 挂载目录配置(按实际更改)
# OpenClaw 数据目录(包含配置文件、工作空间等所有数据)
OPENCLAW_DATA_DIR=~/.openclaw
# 可选:容器启动用户 UID:GID
# 默认 0:0(root)用于 init.sh 自动修复挂载目录权限,再降权为 node 启动服务
# 如需与宿主机用户对齐,可设置为 1000:1000 或 Linux 上的 $(id -u):$(id -g)
OPENCLAW_RUN_USER=0:0
# Gateway 配置
## 网关 token,用于认证(按实际更改)
OPENCLAW_GATEWAY_TOKEN=
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_BRIDGE_PORT=18790
以上文件重点更改三项:大模型API,通知设置还有最后的网关token(改个复杂点的)
下一步复制部署下面docker compose命令:
jsversion: '3.8'
services:
openclaw-gateway:
container_name: openclaw-gateway
image: ${OPENCLAW_IMAGE}
cap_add:
- CHOWN
- SETUID
- SETGID
- DAC_OVERRIDE
# 可选:指定容器运行 UID:GID(例如 1000:1000)
# 默认保持 root 启动,以便 init.sh 自动修复挂载卷权限后再降权运行网关
user: ${OPENCLAW_RUN_USER:-0:0}
environment:
TZ: Asia/Shanghai
HOME: /home/node
TERM: xterm-256color
# 模型配置
MODEL_ID: ${MODEL_ID}
BASE_URL: ${BASE_URL}
API_KEY: ${API_KEY}
API_PROTOCOL: ${API_PROTOCOL}
CONTEXT_WINDOW: ${CONTEXT_WINDOW}
MAX_TOKENS: ${MAX_TOKENS}
# 通道配置
TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN}
FEISHU_APP_ID: ${FEISHU_APP_ID}
FEISHU_APP_SECRET: ${FEISHU_APP_SECRET}
DINGTALK_CLIENT_ID: ${DINGTALK_CLIENT_ID}
DINGTALK_CLIENT_SECRET: ${DINGTALK_CLIENT_SECRET}
DINGTALK_ROBOT_CODE: ${DINGTALK_ROBOT_CODE}
DINGTALK_CORP_ID: ${DINGTALK_CORP_ID}
DINGTALK_AGENT_ID: ${DINGTALK_AGENT_ID}
QQBOT_APP_ID: ${QQBOT_APP_ID}
QQBOT_CLIENT_SECRET: ${QQBOT_CLIENT_SECRET}
# 企业微信配置
WECOM_TOKEN: ${WECOM_TOKEN}
WECOM_ENCODING_AES_KEY: ${WECOM_ENCODING_AES_KEY}
# 工作空间配置
WORKSPACE: ${WORKSPACE}
# Gateway 配置
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
OPENCLAW_GATEWAY_BIND: ${OPENCLAW_GATEWAY_BIND}
OPENCLAW_GATEWAY_PORT: ${OPENCLAW_GATEWAY_PORT}
OPENCLAW_BRIDGE_PORT: ${OPENCLAW_BRIDGE_PORT}
volumes:
- ${OPENCLAW_DATA_DIR}:/home/node/.openclaw
# 使用匿名卷排除 extensions 目录,使用镜像中预装的插件
- /home/node/.openclaw/extensions
ports:
- "${OPENCLAW_GATEWAY_PORT}:18789"
- "${OPENCLAW_BRIDGE_PORT}:18790"
init: true
restart: unless-stopped
这个时候正常来说就可以进入对应端口访问后台了。但是如果你不是用本地部署的浏览器访问,多半会有报错提示: disconnected (1008): control ui requires HTTPS or localhost (secure context)
这个错误是 OpenClaw(一个 AI 代理网关项目)的一项安全机制。
简单来说,OpenClaw 的控制面板需要使用浏览器的 “安全上下文 (Secure Context)” 来调用 WebCrypto API 生成设备身份。如果你的浏览器认为当前连接不安全,它就会拒绝运行这些加密功能,导致连接中断。
可以尝试在 openclaw.json 配置文件中添加以下设置来简化验证(仅建议在受信任的内网使用):
JSON"gateway": {
"controlUi": {
"allowInsecureAuth": true
}
}
下一步可能会让认证设备,如果在可信赖的内网中,可以再在刚才配置中加一行:
js"controlUi": {
"allowInsecureAuth": true,
"dangerouslyDisableDeviceAuth": true
}
}
}
代码的最后10行是这样的:
js"gateway": {
"port": 18789,
"bind": "lan",
"mode": "local",
"auth": {
"token": "123456"
},
"controlUi": {
"allowInsecureAuth": true,
"dangerouslyDisableDeviceAuth": true
}
}
}
这两行代码的本质,就是为了在局域网纯 HTTP 环境下,强行解除 OpenClaw 自带的安全“封印”。
具体含义如下:
实际作用:默认情况下,OpenClaw 一旦发现你没有使用 HTTPS(也就是地址栏没有安全小锁头),就会直接拒绝通信请求。把它设为 true 后,相当于告诉网关:“我知道当前是 HTTP 环境,请放行我的请求。” 它主要解决的是通信层面的拦截。
实际作用:这是最核心的一句。OpenClaw 为了防止别人随意控制你的高权限 AI 代理,原本要求每一台访问它的浏览器(比如你的手机、电脑)都必须在底层生成一对加密密钥,进行严格的“设备绑定(Pairing)”。
为什么非要加它:因为各大浏览器有一条死规定——只有在 HTTPS 下,才允许网页调用生成加密密钥的功能。既然你在局域网纯 HTTP 下没法生成密钥,加上这行参数,就等于告诉 OpenClaw:“彻底跳过生成加密密钥和设备绑定的环节。别校验设备了,只要能访问这个页面并输入密码(Token),就直接让进。”
因为涉及公网传输,为了信息安全强烈建议去掉上文的两条规则!
去掉规则后,你在公网访问会再次看到 1008 需要配对的拦截。此时需要打开飞牛的终端,输入
docker exec -it openclaw-gateway openclaw devices list
找到你的设备 ID,然后再输入
docker exec -it openclaw-gateway openclaw devices approve <你的设备ID>
进行安全放行。这样既保证了绝对安全,又能顺畅访问。
用电脑浏览器登录 企业微信管理后台。
注意请务必创建‘智能机器人’,千万不要用‘自建应用’!因为自建应用推送的是 XML 格式会导致 OpenClaw 报错崩溃,而智能机器人推送的是标准的 JSON 格式。
给你的机器人起个名字(比如“AI 助手”),上传个头像,然后点击“创建”。
创建好应用后,进入该应用的详情页面。
往下滚动,找到 “接收消息” 这一栏,点击 “设置 API 接收”。
在弹出的页面中,你会看到三个核心输入框:
URL:(这个等下说,非常关键)
Token:点击后面的 “随机获取”。
EncodingAESKey:点击后面的 “随机获取”。
不要关闭这个网页,把刚才随机生成的这两个字符串复制下来。
回到你飞牛 NAS 的 .env 文件,把复制好的内容填进去(注意等号后面不要有空格):
js# 企业微信配置 (可选,留空则不启用)
WECOM_TOKEN=你刚才复制的Token
WECOM_ENCODING_AES_KEY=你刚才复制的超长AES密钥
填好后,保存文件并重启你的 Docker 容器,让机器人带着这两个新配置跑起来。
机器人重启后,回到刚才企业微信那个没关的“设置 API 接收”网页,你需要填写 URL。
关键注意点:企业微信的服务器在公网上,它无法直接访问你家里的 192.168.x.x 局域网 IP,必须给我们的openclaw后台反向代理成公网域名。
注意:配置了公网域名后,为了防止跨站攻击导致容器无限重启,务必在 openclaw.json 的 gateway.controlUi 里面加上域名白名单,例如:"allowedOrigins": ["https://你的公网域名"]。
我们这个项目URL 格式是:https://你的公网域名/api/platform/webhook/XXXX (由后台生成,直接复制到企业微信对应位置,点击保存)。

如果你的机器人已经在飞牛上正常运行,并且网络外网能访问,企业微信就会提示“保存成功”。这时候,你在企业微信里给这个应用发消息,机器人就能回复你了!
本文作者:小转圈
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!