编辑
2026-03-01
技术漫谈
00

目录

openclaw本地部署
安全机制排查(内网体验版)
公网通知设置(以企业微信为例):
第一步:登录企微后台并创建应用
第二步:获取 Token 和 AES Key
第三步:填写到配置文件
⚠️ 第四步:填写回调 URL(最容易卡关的一步)

Gemini_Generated_Image_t5f3iht5f3iht5f3.png

前言

最近这段时间openclaw确实很火,记录一下尝鲜部署的过程,跟着一步步操作,小白也能体验到ai小助理的感觉!

openclaw本地部署

先在飞牛目录里创建.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 协议 (适用于 OpenAIGemini 等模型) # 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:1000Linux 上的 $(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命令:

js
version: '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 自带的安全“封印”。

具体含义如下:

  1. "allowInsecureAuth": true 字面意思:允许不安全的身份验证。

实际作用:默认情况下,OpenClaw 一旦发现你没有使用 HTTPS(也就是地址栏没有安全小锁头),就会直接拒绝通信请求。把它设为 true 后,相当于告诉网关:“我知道当前是 HTTP 环境,请放行我的请求。” 它主要解决的是通信层面的拦截。

  1. "dangerouslyDisableDeviceAuth": true 字面意思:危险地禁用设备认证。

实际作用:这是最核心的一句。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 助手”),上传个头像,然后点击“创建”。

第二步:获取 Token 和 AES Key

创建好应用后,进入该应用的详情页面。

往下滚动,找到 “接收消息” 这一栏,点击 “设置 API 接收”。

在弹出的页面中,你会看到三个核心输入框:

URL:(这个等下说,非常关键)

Token:点击后面的 “随机获取”。

EncodingAESKey:点击后面的 “随机获取”。

不要关闭这个网页,把刚才随机生成的这两个字符串复制下来。

第三步:填写到配置文件

回到你飞牛 NAS 的 .env 文件,把复制好的内容填进去(注意等号后面不要有空格):

js
# 企业微信配置 (可选,留空则不启用) WECOM_TOKEN=你刚才复制的Token WECOM_ENCODING_AES_KEY=你刚才复制的超长AES密钥

填好后,保存文件并重启你的 Docker 容器,让机器人带着这两个新配置跑起来。

⚠️ 第四步:填写回调 URL(最容易卡关的一步)

机器人重启后,回到刚才企业微信那个没关的“设置 API 接收”网页,你需要填写 URL。

关键注意点:企业微信的服务器在公网上,它无法直接访问你家里的 192.168.x.x 局域网 IP,必须给我们的openclaw后台反向代理成公网域名。

注意:配置了公网域名后,为了防止跨站攻击导致容器无限重启,务必在 openclaw.json 的 gateway.controlUi 里面加上域名白名单,例如:"allowedOrigins": ["https://你的公网域名"]。

我们这个项目URL 格式是:https://你的公网域名/api/platform/webhook/XXXX (由后台生成,直接复制到企业微信对应位置,点击保存)。

PixPin_2026-03-01_18-32-20.png

如果你的机器人已经在飞牛上正常运行,并且网络外网能访问,企业微信就会提示“保存成功”。这时候,你在企业微信里给这个应用发消息,机器人就能回复你了!

本文作者:小转圈

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!