
前言
最近这段时间openclaw很火,用docker部署是最快速的办法,跟着一步步操作,小白也能体验到ai小助理的感觉!
项目地址(国内插件整合版):https://github.com/justlovemaki/openclaw-docker-cn-im
先在根目录创建.env文件:
js# OpenClaw Docker 环境变量配置示例
# 复制此文件为 .env 并修改相应的值
# Docker 镜像配置
OPENCLAW_IMAGE=justlikemaki/openclaw-docker-cn-im:latest
# 配置同步开关
# 是否自动同步环境变量到 openclaw.json (true/false)
# 如果你手动维护 openclaw.json,建议先设为 false
SYNC_OPENCLAW_CONFIG=true
# 是否自动同步模型配置到 openclaw.json (true/false)
# 仅在 SYNC_OPENCLAW_CONFIG=true 时生效;如果你手动修改了 openclaw.json 中的模型设置,请将其设为 false
SYNC_MODEL_CONFIG=true
# 提供商 1 (默认)
# 主模型 ID (支持多个,用逗号隔开,第一个将作为默认模型)
MODEL_ID=model id
# 显式指定 agents.defaults.model.primary(可选)
# 留空时默认使用 default/${MODEL_ID 的第一个值}
# 如需切换到其它 provider 的模型,可填写完整 provider/model,例如 aliyun/qwen3.5-plus
PRIMARY_MODEL=
# 图片模型 ID(可选,留空则使用 MODEL_ID,支持 provider/model 格式)
# 如需切换到其它 provider 的图片模型,可直接填写完整 provider/model,例如 aliyun/qwen-vl-max
IMAGE_MODEL_ID=
BASE_URL=http://xxxxx/v1
API_KEY=123456
# API 协议类型: openai-completions 或 anthropic-messages
API_PROTOCOL=openai-completions
# 模型上下文窗口大小
CONTEXT_WINDOW=200000
# 模型最大输出 tokens
MAX_TOKENS=8192
# 提供商 2 (可选)
# MODEL2_NAME=model2
# MODEL2_MODEL_ID=model id1,model id2
# MODEL2_BASE_URL=http://xxxxx/v1
# MODEL2_API_KEY=123456
# MODEL2_PROTOCOL=openai-completions
# MODEL2_CONTEXT_WINDOW=200000
# MODEL2_MAX_TOKENS=8192
# 渠道通用配置 (Channel Common Config)
# 默认私聊策略: open/closed/friend-only
DM_POLICY=open
# 默认群组策略: open/closed
GROUP_POLICY=open
# 默认允许来源 (多个用逗号隔开,* 代表全部)
ALLOW_FROM=*
# Telegram 配置(可选,留空则不启用)
TELEGRAM_BOT_TOKEN=
TELEGRAM_DM_POLICY=
TELEGRAM_ALLOW_FROM=
TELEGRAM_GROUP_POLICY=
# 飞书配置(可选,留空则不启用)
# 方式1:单账号快捷配置,会自动同步为 channels.feishu.accounts.${FEISHU_DEFAULT_ACCOUNT}
FEISHU_APP_ID=
FEISHU_APP_SECRET=
FEISHU_DEFAULT_ACCOUNT=default
FEISHU_BOT_NAME=OpenClaw Bot
FEISHU_REPLY_MODE=auto
FEISHU_THREAD_SESSION=true
FEISHU_DOMAIN=
# 方式2:多账号 JSON(推荐,单行)
# 示例:{"default":{"appId":"cli_xxx","appSecret":"xxx","botName":"OpenClaw Bot"},"work":{"appId":"cli_work_yyy","appSecret":"work_secret_yyy","botName":"工作机器人","dmPolicy":"allowlist","allowFrom":["ou_5b990e213988b9bcf396f955a50b2a22","ou_1234567890abcdef"]},"support":{"appId":"cli_support_zzz","appSecret":"support_secret_zzz","botName":"客服机器人","dmPolicy":"open","allowFrom":["*"]}}
FEISHU_ACCOUNTS_JSON=
# 飞书群组规则 JSON(可选,单行)
# 示例:{"*":{"requireMention":true},"oc_83e1c0d069b94efc09ad22e05bc06365":{"requireMention":false,"groupPolicy":"open"},"oc_dev_123456789":{"requireMention":false,"groupPolicy":"allowlist","allowFrom":["ou_dev_001","ou_dev_002"]}}
FEISHU_GROUPS_JSON=
FEISHU_DM_POLICY=
FEISHU_ALLOW_FROM=
FEISHU_GROUP_POLICY=
FEISHU_GROUP_ALLOW_FROM=
# 是否启用飞书官方插件 (true/false)
FEISHU_OFFICIAL_PLUGIN_ENABLED=false
# 飞书特定配置 (可选)
FEISHU_STREAMING=true
FEISHU_FOOTER_ELAPSED=true
FEISHU_FOOTER_STATUS=true
FEISHU_REQUIRE_MENTION=true
# 钉钉配置(可选,留空则不启用)
# 方式1:单机器人快捷配置,会自动同步为 channels.dingtalk.accounts.default
DINGTALK_CLIENT_ID=
DINGTALK_CLIENT_SECRET=
DINGTALK_ROBOT_CODE=
DINGTALK_DM_POLICY=
DINGTALK_GROUP_POLICY=
DINGTALK_ALLOW_FROM=
DINGTALK_CORP_ID=
DINGTALK_AGENT_ID=
DINGTALK_MESSAGE_TYPE=markdown
DINGTALK_CARD_TEMPLATE_ID=
DINGTALK_CARD_TEMPLATE_KEY=
DINGTALK_MAX_RECONNECT_CYCLES=
DINGTALK_DEBUG=false
DINGTALK_JOURNAL_TTL_DAYS=
DINGTALK_SHOW_THINKING=false
DINGTALK_THINKING_MESSAGE=
DINGTALK_ASYNC_MODE=false
DINGTALK_ASYNC_ACK_TEXT=
# 方式2:多机器人 JSON(推荐,单行)
# 示例:{"bot_1":{"clientId":"your-client-id-1","clientSecret":"your-client-secret-1","robotCode":"your-robot-code-1","corpId":"your-corp-id","agentId":"your-dingtalk-agent-id-1","dmPolicy":"open","groupPolicy":"open","messageType":"card","cardTemplateId":"your-card-template-id.schema","cardTemplateKey":"content","maxReconnectCycles":10,"allowFrom":["*"]},"bot_2":{"clientId":"your-client-id-2","clientSecret":"your-client-secret-2","robotCode":"your-robot-code-2","corpId":"your-corp-id","agentId":"your-dingtalk-agent-id-2","dmPolicy":"open","groupPolicy":"open","messageType":"markdown","allowFrom":["*"]}}
DINGTALK_ACCOUNTS_JSON=
# QQ 机器人配置(可选,留空则不启用)
# 方式1:单 Bot(兼容旧格式),会自动同步为 channels.qqbot.accounts.default
QQBOT_APP_ID=
QQBOT_CLIENT_SECRET=
QQBOT_DM_POLICY=
QQBOT_ALLOW_FROM=
QQBOT_GROUP_POLICY=
# 方式2:多 Bot JSON,支持 default/bot2/bot3... 独立配置(会与现有配置深度合并)
# 注意:.env 中 JSON 需要写成单行
# 示例:{"default":{"enabled":true,"appId":"111111111","clientSecret":"secret-of-bot-1"},"bot2":{"enabled":true,"appId":"222222222","clientSecret":"secret-of-bot-2"},"bot3":{"enabled":true,"appId":"333333333","clientSecret":"secret-of-bot-3"}}
QQBOT_BOTS_JSON=
# 企业微信配置(可选,留空则不启用)
# 当前推荐格式:多账号结构,顶层共享字段会合并到各账号
WECOM_DEFAULT_ACCOUNT=open
WECOM_COMMANDS_ENABLED=true
WECOM_COMMANDS_ALLOWLIST=/new,/compact,/help,/status
WECOM_BOT_ID=
WECOM_SECRET=
# 单账号快捷配置:会写入 channels.wecom.${WECOM_DEFAULT_ACCOUNT}
WECOM_ADMIN_USERS=admin-userid
WECOM_DYNAMIC_AGENTS_ENABLED=true
WECOM_DYNAMIC_AGENTS_ADMIN_BYPASS=false
WECOM_WELCOME_MESSAGE=
WECOM_SEND_THINKING_MESSAGE=false
WECOM_DM_POLICY=
WECOM_ALLOW_FROM=
WECOM_GROUP_POLICY=
WECOM_GROUP_ALLOW_FROM=
WECOM_WORKSPACE_TEMPLATE=
WECOM_AGENT_CORP_ID=
WECOM_AGENT_CORP_SECRET=
WECOM_AGENT_ID=
WECOM_WEBHOOKS_JSON=
WECOM_DM_CREATE_AGENT_ON_FIRST_MESSAGE=true
WECOM_GROUP_CHAT_ENABLED=true
WECOM_GROUP_CHAT_REQUIRE_MENTION=true
WECOM_GROUP_CHAT_MENTION_PATTERNS=@
WECOM_NETWORK_EGRESS_PROXY_URL=
WECOM_NETWORK_API_BASE_URL=
# 多账号 JSON(推荐)
# 示例:{"open":{"botId":"aib-open-xxx","secret":"secret-open-xxx","dmPolicy":"open"},"support":{"botId":"aib-support-xxx","secret":"secret-support-xxx","dmPolicy":"pairing","agent":{"corpId":"wwxxxxxxxxxxxxxxxx","corpSecret":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","agentId":1000002},"webhooks":{"ops":"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"}}}
WECOM_ACCOUNTS_JSON=
# NapCat (OneBot v11) 配置(可选,留空则不启用)
# NapCat 反向 WS 监听端口(NapCat 主动连接到此端口)
NAPCAT_REVERSE_WS_PORT=
NAPCAT_DM_POLICY=
NAPCAT_ALLOW_FROM=
NAPCAT_GROUP_POLICY=
# NapCat HTTP API 地址(可选,用于主动发送消息)
NAPCAT_HTTP_URL=
# 连接鉴权 Token(与 NapCat 侧保持一致)
NAPCAT_ACCESS_TOKEN=
# 管理员用户 ID,多个用逗号分隔
NAPCAT_ADMINS=
# 工作空间配置(不要更改)
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=123456
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_BRIDGE_PORT=18790
OPENCLAW_GATEWAY_MODE=local
# 允许的 Origin 域,多个用逗号隔开
OPENCLAW_GATEWAY_ALLOWED_ORIGINS=http://localhost
# 允许不安全认证(如 http),可选 true/false
OPENCLAW_GATEWAY_ALLOW_INSECURE_AUTH=true
# 危险:禁用设备认证(如在 Docker 环境中无法获取设备信息),可选 true/false
OPENCLAW_GATEWAY_DANGEROUSLY_DISABLE_DEVICE_AUTH=false
# 网关认证模式,可选 token
OPENCLAW_GATEWAY_AUTH_MODE=token
# 插件全局控制
OPENCLAW_PLUGINS_ENABLED=true
# 工具配置 (Tools Config)
# 完整工具配置 JSON(可选)
# 示例:{"profile":"full","sessions":{"visibility":"all"},"fs":{"workspaceOnly":true}}
OPENCLAW_TOOLS_JSON=
以上文件重点更改三项:大模型API,通知设置,允许的 Origin 域(注意后面一定带上端口号)还有最后的网关token(改个复杂点的)
下一步复制部署下面docker compose命令:
jsversion: '3.8'
x-openclaw-common-env: &openclaw-common-env
TZ: Asia/Shanghai
HOME: /home/node
TERM: xterm-256color
# 配置同步开关
SYNC_OPENCLAW_CONFIG: ${SYNC_OPENCLAW_CONFIG}
# 模型配置
SYNC_MODEL_CONFIG: ${SYNC_MODEL_CONFIG}
MODEL_ID: ${MODEL_ID}
PRIMARY_MODEL: ${PRIMARY_MODEL}
IMAGE_MODEL_ID: ${IMAGE_MODEL_ID}
BASE_URL: ${BASE_URL}
API_KEY: ${API_KEY}
API_PROTOCOL: ${API_PROTOCOL}
CONTEXT_WINDOW: ${CONTEXT_WINDOW}
MAX_TOKENS: ${MAX_TOKENS}
# 提供商 2 (可选)
MODEL2_NAME: ${MODEL2_NAME}
MODEL2_MODEL_ID: ${MODEL2_MODEL_ID}
MODEL2_BASE_URL: ${MODEL2_BASE_URL}
MODEL2_API_KEY: ${MODEL2_API_KEY}
MODEL2_PROTOCOL: ${MODEL2_PROTOCOL}
MODEL2_CONTEXT_WINDOW: ${MODEL2_CONTEXT_WINDOW}
MODEL2_MAX_TOKENS: ${MODEL2_MAX_TOKENS}
# 提供商 3 (可选)
MODEL3_NAME: ${MODEL3_NAME}
MODEL3_MODEL_ID: ${MODEL3_MODEL_ID}
MODEL3_BASE_URL: ${MODEL3_BASE_URL}
MODEL3_API_KEY: ${MODEL3_API_KEY}
MODEL3_PROTOCOL: ${MODEL3_PROTOCOL}
MODEL3_CONTEXT_WINDOW: ${MODEL3_CONTEXT_WINDOW}
MODEL3_MAX_TOKENS: ${MODEL3_MAX_TOKENS}
# 提供商 4 (可选)
MODEL4_NAME: ${MODEL4_NAME}
MODEL4_MODEL_ID: ${MODEL4_MODEL_ID}
MODEL4_BASE_URL: ${MODEL4_BASE_URL}
MODEL4_API_KEY: ${MODEL4_API_KEY}
MODEL4_PROTOCOL: ${MODEL4_PROTOCOL}
MODEL4_CONTEXT_WINDOW: ${MODEL4_CONTEXT_WINDOW}
MODEL4_MAX_TOKENS: ${MODEL4_MAX_TOKENS}
# 提供商 5 (可选)
MODEL5_NAME: ${MODEL5_NAME}
MODEL5_MODEL_ID: ${MODEL5_MODEL_ID}
MODEL5_BASE_URL: ${MODEL5_BASE_URL}
MODEL5_API_KEY: ${MODEL5_API_KEY}
MODEL5_PROTOCOL: ${MODEL5_PROTOCOL}
MODEL5_CONTEXT_WINDOW: ${MODEL5_CONTEXT_WINDOW}
MODEL5_MAX_TOKENS: ${MODEL5_MAX_TOKENS}
# 提供商 6 (可选)
MODEL6_NAME: ${MODEL6_NAME}
MODEL6_MODEL_ID: ${MODEL6_MODEL_ID}
MODEL6_BASE_URL: ${MODEL6_BASE_URL}
MODEL6_API_KEY: ${MODEL6_API_KEY}
MODEL6_PROTOCOL: ${MODEL6_PROTOCOL}
MODEL6_CONTEXT_WINDOW: ${MODEL6_CONTEXT_WINDOW}
MODEL6_MAX_TOKENS: ${MODEL6_MAX_TOKENS}
# 通道配置
DM_POLICY: ${DM_POLICY}
GROUP_POLICY: ${GROUP_POLICY}
ALLOW_FROM: ${ALLOW_FROM}
# 电报机器人配置
TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN}
TELEGRAM_DM_POLICY: ${TELEGRAM_DM_POLICY}
TELEGRAM_ALLOW_FROM: ${TELEGRAM_ALLOW_FROM}
TELEGRAM_GROUP_POLICY: ${TELEGRAM_GROUP_POLICY}
# 飞书机器人配置
FEISHU_DEFAULT_ACCOUNT: ${FEISHU_DEFAULT_ACCOUNT}
FEISHU_APP_ID: ${FEISHU_APP_ID}
FEISHU_APP_SECRET: ${FEISHU_APP_SECRET}
FEISHU_BOT_NAME: ${FEISHU_BOT_NAME}
FEISHU_REPLY_MODE: ${FEISHU_REPLY_MODE}
FEISHU_THREAD_SESSION: ${FEISHU_THREAD_SESSION}
FEISHU_DOMAIN: ${FEISHU_DOMAIN}
# 飞书机器人多账号 JSON
FEISHU_ACCOUNTS_JSON: ${FEISHU_ACCOUNTS_JSON}
FEISHU_GROUPS_JSON: ${FEISHU_GROUPS_JSON}
FEISHU_DM_POLICY: ${FEISHU_DM_POLICY}
FEISHU_ALLOW_FROM: ${FEISHU_ALLOW_FROM}
FEISHU_GROUP_POLICY: ${FEISHU_GROUP_POLICY}
FEISHU_GROUP_ALLOW_FROM: ${FEISHU_GROUP_ALLOW_FROM}
# 飞书机器人插件配置
FEISHU_OFFICIAL_PLUGIN_ENABLED: ${FEISHU_OFFICIAL_PLUGIN_ENABLED}
FEISHU_STREAMING: ${FEISHU_STREAMING}
FEISHU_FOOTER_ELAPSED: ${FEISHU_FOOTER_ELAPSED}
FEISHU_FOOTER_STATUS: ${FEISHU_FOOTER_STATUS}
FEISHU_REQUIRE_MENTION: ${FEISHU_REQUIRE_MENTION}
# 钉钉配置
DINGTALK_CLIENT_ID: ${DINGTALK_CLIENT_ID}
DINGTALK_CLIENT_SECRET: ${DINGTALK_CLIENT_SECRET}
DINGTALK_ROBOT_CODE: ${DINGTALK_ROBOT_CODE}
DINGTALK_DM_POLICY: ${DINGTALK_DM_POLICY}
DINGTALK_GROUP_POLICY: ${DINGTALK_GROUP_POLICY}
DINGTALK_ALLOW_FROM: ${DINGTALK_ALLOW_FROM}
DINGTALK_CORP_ID: ${DINGTALK_CORP_ID}
DINGTALK_AGENT_ID: ${DINGTALK_AGENT_ID}
DINGTALK_MESSAGE_TYPE: ${DINGTALK_MESSAGE_TYPE}
DINGTALK_CARD_TEMPLATE_ID: ${DINGTALK_CARD_TEMPLATE_ID}
DINGTALK_CARD_TEMPLATE_KEY: ${DINGTALK_CARD_TEMPLATE_KEY}
DINGTALK_MAX_RECONNECT_CYCLES: ${DINGTALK_MAX_RECONNECT_CYCLES}
DINGTALK_DEBUG: ${DINGTALK_DEBUG}
DINGTALK_JOURNAL_TTL_DAYS: ${DINGTALK_JOURNAL_TTL_DAYS}
DINGTALK_SHOW_THINKING: ${DINGTALK_SHOW_THINKING}
DINGTALK_THINKING_MESSAGE: ${DINGTALK_THINKING_MESSAGE}
DINGTALK_ASYNC_MODE: ${DINGTALK_ASYNC_MODE}
DINGTALK_ASYNC_ACK_TEXT: ${DINGTALK_ASYNC_ACK_TEXT}
# 钉钉多机器人 JSON
DINGTALK_ACCOUNTS_JSON: ${DINGTALK_ACCOUNTS_JSON}
# QQ 机器人配置
QQBOT_APP_ID: ${QQBOT_APP_ID}
QQBOT_CLIENT_SECRET: ${QQBOT_CLIENT_SECRET}
QQBOT_DM_POLICY: ${QQBOT_DM_POLICY}
QQBOT_ALLOW_FROM: ${QQBOT_ALLOW_FROM}
QQBOT_GROUP_POLICY: ${QQBOT_GROUP_POLICY}
# QQ 机器人多账号 JSON
QQBOT_BOTS_JSON: ${QQBOT_BOTS_JSON}
# 企业微信配置
WECOM_DEFAULT_ACCOUNT: ${WECOM_DEFAULT_ACCOUNT}
WECOM_ADMIN_USERS: ${WECOM_ADMIN_USERS}
WECOM_COMMANDS_ENABLED: ${WECOM_COMMANDS_ENABLED}
WECOM_COMMANDS_ALLOWLIST: ${WECOM_COMMANDS_ALLOWLIST}
WECOM_DYNAMIC_AGENTS_ENABLED: ${WECOM_DYNAMIC_AGENTS_ENABLED}
WECOM_DYNAMIC_AGENTS_ADMIN_BYPASS: ${WECOM_DYNAMIC_AGENTS_ADMIN_BYPASS}
# 企业微信单账号快捷配置(会写入 defaultAccount 指定的账号)
WECOM_BOT_ID: ${WECOM_BOT_ID}
WECOM_SECRET: ${WECOM_SECRET}
WECOM_WELCOME_MESSAGE: ${WECOM_WELCOME_MESSAGE}
WECOM_SEND_THINKING_MESSAGE: ${WECOM_SEND_THINKING_MESSAGE}
WECOM_DM_POLICY: ${WECOM_DM_POLICY}
WECOM_ALLOW_FROM: ${WECOM_ALLOW_FROM}
WECOM_GROUP_POLICY: ${WECOM_GROUP_POLICY}
WECOM_GROUP_ALLOW_FROM: ${WECOM_GROUP_ALLOW_FROM}
WECOM_WORKSPACE_TEMPLATE: ${WECOM_WORKSPACE_TEMPLATE}
WECOM_AGENT_CORP_ID: ${WECOM_AGENT_CORP_ID}
WECOM_AGENT_CORP_SECRET: ${WECOM_AGENT_CORP_SECRET}
WECOM_AGENT_ID: ${WECOM_AGENT_ID}
WECOM_WEBHOOKS_JSON: ${WECOM_WEBHOOKS_JSON}
WECOM_DM_CREATE_AGENT_ON_FIRST_MESSAGE: ${WECOM_DM_CREATE_AGENT_ON_FIRST_MESSAGE}
WECOM_GROUP_CHAT_ENABLED: ${WECOM_GROUP_CHAT_ENABLED}
WECOM_GROUP_CHAT_REQUIRE_MENTION: ${WECOM_GROUP_CHAT_REQUIRE_MENTION}
WECOM_GROUP_CHAT_MENTION_PATTERNS: ${WECOM_GROUP_CHAT_MENTION_PATTERNS}
WECOM_NETWORK_EGRESS_PROXY_URL: ${WECOM_NETWORK_EGRESS_PROXY_URL}
WECOM_NETWORK_API_BASE_URL: ${WECOM_NETWORK_API_BASE_URL}
# 企业微信多账号 JSON
WECOM_ACCOUNTS_JSON: ${WECOM_ACCOUNTS_JSON}
# NAPCAT 配置
NAPCAT_REVERSE_WS_PORT: ${NAPCAT_REVERSE_WS_PORT}
NAPCAT_DM_POLICY: ${NAPCAT_DM_POLICY}
NAPCAT_ALLOW_FROM: ${NAPCAT_ALLOW_FROM}
NAPCAT_GROUP_POLICY: ${NAPCAT_GROUP_POLICY}
NAPCAT_HTTP_URL: ${NAPCAT_HTTP_URL}
NAPCAT_ACCESS_TOKEN: ${NAPCAT_ACCESS_TOKEN}
NAPCAT_ADMINS: ${NAPCAT_ADMINS}
# 工作空间配置
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}
OPENCLAW_GATEWAY_MODE: ${OPENCLAW_GATEWAY_MODE}
OPENCLAW_GATEWAY_ALLOWED_ORIGINS: ${OPENCLAW_GATEWAY_ALLOWED_ORIGINS}
OPENCLAW_GATEWAY_ALLOW_INSECURE_AUTH: ${OPENCLAW_GATEWAY_ALLOW_INSECURE_AUTH}
OPENCLAW_GATEWAY_DANGEROUSLY_DISABLE_DEVICE_AUTH: ${OPENCLAW_GATEWAY_DANGEROUSLY_DISABLE_DEVICE_AUTH}
OPENCLAW_GATEWAY_AUTH_MODE: ${OPENCLAW_GATEWAY_AUTH_MODE}
# 插件控制
OPENCLAW_PLUGINS_ENABLED: ${OPENCLAW_PLUGINS_ENABLED}
# 工具配置
OPENCLAW_TOOLS_JSON: ${OPENCLAW_TOOLS_JSON}
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: *openclaw-common-env
volumes:
- ${OPENCLAW_DATA_DIR}:/home/node/.openclaw
# 使用命名卷共享 extensions,确保工具容器安装后的插件主容器可见
- openclaw-extensions:/home/node/.openclaw/extensions
ports:
- "${OPENCLAW_GATEWAY_PORT}:18789"
- "${OPENCLAW_BRIDGE_PORT}:18790"
init: true
restart: unless-stopped
openclaw-installer:
container_name: openclaw-installer
image: ${OPENCLAW_IMAGE}
profiles:
- tools
user: ${OPENCLAW_RUN_USER:-0:0}
environment: *openclaw-common-env
volumes:
- ${OPENCLAW_DATA_DIR}:/home/node/.openclaw
- openclaw-extensions:/home/node/.openclaw/extensions
entrypoint: ["tail", "-f", "/dev/null"]
init: true
restart: 'no'
ports: []
stdin_open: true
tty: true
cap_add:
- CHOWN
- SETUID
- SETGID
- DAC_OVERRIDE
volumes:
openclaw-extensions:
这个时候正常来说就可以进入对应端口访问后台了。但是如果你不是用本地部署的浏览器访问,多半会有报错提示: 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 许可协议。转载请注明出处!