☰
OpenClaw 一键部署教程:Docker 开放公网与多用户访问配置
2026/10/3 6:55:20 网站建设 项目流程

1. 从本地能跑到团队都能用,中间差了什么

OpenClaw 是一个自托管的 AI Agent 框架,你可以把它理解成「跑在自己服务器上的智能体网关」:它对外提供 Web UI 和聊天渠道接入,对内连接各家模型 API,让 Agent 真正能执行命令、读写文件、调用工具。很多人第一次接触它是被「一键部署」吸引的——一条脚本跑完,本地浏览器打开127.0.0.1:18789就能对话,感觉已经完事了。

但真正把它放到团队场景里,问题立刻冒出来。默认配置只监听回环地址,同事的电脑根本连不上;Web UI 登录用的 token 没配好,谁都能进或者谁都进不去;Telegram 渠道默认只允许配对用户,外部用户发消息石沉大海;更麻烦的是 Agent 执行命令时不停弹审批,一个人用还行,多用户并发时审批流直接把体验拖垮。这些都不是「装不上」的问题,而是「装上了但没法给别人用」的问题。

这篇教程聚焦的就是这段落差:从 Docker 一键部署开始,把 OpenClaw 配置成开放公网访问、支持多用户并发使用的形态。适合两类人:一是要把 OpenClaw 作为团队内部工具、让成员直接访问的开发者;二是需要给外部用户提供 Agent 服务、但又想自己掌控模型和数据的部署者。全程基于官方 Docker 方案,配置片段可以直接复制,验证步骤会给出预期结果,排障部分对照真实报错。

需要提前说明的是,开放公网意味着安全责任转移到你自己身上。本文会给出可用的配置,但 token 强度、访问范围、是否加反向代理这些决策,需要你根据实际暴露面来判断。下面按「部署 → 接模型 → 开公网 → 多用户 → 验证 → 排障」的顺序走,每一步都有可复制的命令或配置。

2. 前置准备:Docker 环境与 TaoToken 模型接入

在动 OpenClaw 之前,先把两件事准备好:一台能跑 Docker 的服务器,以及一个可用的模型 API 入口。服务器建议 2 核 4G 起步,Agent 执行任务时对内存有一定占用;系统用 Ubuntu 22.04 或 Debian 12 都行,Docker 版本 24 以上。如果你只是本地测试,Windows 的 WSL2 或 macOS 的 Docker Desktop 也能跑,但公网访问部分需要额外做端口转发,本文以 Linux 服务器为主线。

模型接入这块,OpenClaw 支持自定义 Provider,只要提供兼容 OpenAI 协议的 Base URL、API Key 和 Model ID 就能接。我实测下来,用 TaoToken 作为统一入口比较省事:它把多家模型收敛到一个 OpenAI 兼容端点上,OpenClaw 里只需要配一次 Custom Provider,后面换模型只改 Model ID。TaoToken 的 API 地址是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为 Base URL 填入即可;官网入口在https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,注册和查看文档都从这里进。

具体要准备三样东西:

第一,API Key。登录后在控制台的 API Keys 页面创建,格式通常是sk-开头。这个 Key 会写进 OpenClaw 配置,所以别用主账号的长期 Key,建议单独建一个便于轮换。

第二,Base URL。填https://taotoken.net/api,OpenClaw 的 Custom Provider 会自动在末尾拼接/v1/chat/completions这类路径,所以不要自己再加/v1,否则会变成/api/v1/v1/...导致 404。

第三,Model ID。这个取决于你要用哪个模型,比如gpt-5.2、deepseek-v4、claude-sonnet-4-6等。Model ID 要和 OpenClaw 配置里的api字段类型匹配,后面第 5 节会专门讲这个对应关系,配错了会报reading choices之类的解析错误。

服务器上先确认 Docker 可用:

docker --version docker compose version

如果docker compose报 command not found,说明装的是老版本,用docker-compose --version试试,或者按官方文档升级到 Compose V2。OpenClaw 的安装脚本依赖 Compose 来编排容器,这一步不能省。

另外提前放行端口。OpenClaw 默认 Web UI 端口是18789,如果你打算直接暴露公网,需要在云厂商安全组和服务器防火墙两层都放行。用 ufw 的话:

sudo ufw allow 18789/tcp sudo ufw reload

安全组规则在云控制台配,不同厂商界面不一样,但逻辑都是「入方向、TCP、18789、来源 0.0.0.0/0」。如果你后面要加 Nginx 反代,那 18789 只需要对内网开放,公网走 443,这个在第 4 节会展开。

3. 一键部署与可复制配置:openclaw.json 关键字段

官方提供了一键安装脚本,它会检查环境、拉取镜像、启动配置向导。在服务器上执行:

bash <(curl -fsSL https://raw.githubusercontent.com/phioranex/openclaw-docker/main/install.sh)

脚本跑起来后会进入交互式向导,分两大块:模型提供商和聊天渠道。模型提供商选Custom Provider,然后依次填:

◇ Model/auth provider │ Custom Provider ◇ API Base URL │ https://taotoken.net/api ◇ API Key │ sk-你的Key ◇ Model ID │ gpt-5.2

聊天渠道部分,推荐先从 Telegram 开始,因为它的 Bot API 最成熟,多用户场景下也最容易控制。选Telegram (Bot API),填入从 @BotFather 拿到的 Token:

◇ Select channel │ Telegram (Bot API) ◇ Enter Telegram bot token │ 123456789:xxxxxx

向导跑完后,容器会启动,配置文件落在~/.openclaw/openclaw.json。这时候默认只能本地访问,接下来要改的就是这个文件。先备份一份:

cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak

然后编辑gateway段。默认bind是loopback,只监听 127.0.0.1,改成lan让局域网和公网 IP 都能访问;同时确认auth.mode是token,并设置一个足够强的 token:

{ "gateway": { "port": 18789, "mode": "local", "bind": "lan", "auth": { "mode": "token", "token": "换成你自己的32位随机串" }, "controlUi": { "dangerouslyAllowHostHeaderOriginFallback": true, "dangerouslyDisableDeviceAuth": true } } }

这里有两个字段名字带dangerously前缀,不是吓唬人,它们确实降低了默认安全约束。dangerouslyAllowHostHeaderOriginFallback允许通过公网 IP 或域名访问 Web UI,否则 Host 头校验会拒绝非 localhost 请求;dangerouslyDisableDeviceAuth关闭设备级认证,让多用户不用各自绑定设备。开了这两个,访问控制就完全依赖auth.token,所以 token 必须够强,别用123456这种。

接着改channels段,让 Telegram 渠道接受所有用户。默认allowFrom是空数组或仅限配对用户,改成["*"]:

{ "channels": { "telegram": { "enabled": true, "dmPolicy": "pairing", "botToken": "你的BotToken", "groupPolicy": "allowlist", "allowFrom": ["*"] } } }

allowFrom: ["*"]表示任何找到这个 Bot 的用户都能对话。如果你只想让特定用户用,把*换成用户 ID 数组,比如["123456789", "987654321"]。多用户并发场景下,dmPolicy保持pairing即可,它控制的是私聊配对策略,不影响已授权用户的并发。

配置改完,重启网关容器让改动生效:

docker restart openclaw-gateway

重启后确认容器状态:

docker ps --filter name=openclaw-gateway

看到Up状态且端口映射是0.0.0.0:18789->18789/tcp就对了。如果显示127.0.0.1:18789->18789/tcp,说明bind没生效,检查 JSON 是否有语法错误——可以用python3 -m json.tool ~/.openclaw/openclaw.json校验。

4. 公网访问与多用户并发验证:从 curl 到 Web UI

配置改完后,先别急着开浏览器,用 curl 从服务器外部验证端口是否真的通了。在你自己电脑上执行:

curl -v http://你的服务器IP:18789/

预期返回 200 或 302,如果卡住或返回Connection refused,说明安全组或防火墙没放行,回到第 2 节检查。如果返回 403 且带 Host 头相关提示,说明dangerouslyAllowHostHeaderOriginFallback没生效,确认 JSON 里字段拼写和层级正确。

端口通了之后,浏览器打开http://你的服务器IP:18789/,会看到登录页,要求输入 token。这个 token 就是gateway.auth.token的值。输入后进入 Web UI,随便发一条消息测试模型是否接通。如果回复正常,说明模型 Provider 配置没问题;如果报错,记下错误信息,第 5 节对照排查。

多用户验证要分两个层面:Web UI 并发和 Telegram 渠道并发。

Web UI 层面,让两个同事分别用不同浏览器(或隐身窗口)打开同一个地址,各自输入同一个 token 登录,同时发消息。OpenClaw 的网关是按会话隔离的,不同用户的消息不会串。你可以观察服务器资源:

docker stats openclaw-gateway

并发时 CPU 和内存会上升,但只要没到容器上限就不会断。如果发现某个用户的消息延迟明显,多半是模型 API 侧的并发限制,不是 OpenClaw 本身的问题。

Telegram 层面,让两个不同账号分别给 Bot 发/start,然后发消息。因为allowFrom是["*"],两个账号都应该能收到回复。如果其中一个没反应,检查 Bot 是否被该账号拉黑,或者 Telegram 侧是否有频率限制。可以在服务器上看网关日志:

docker logs -f openclaw-gateway

日志里会打印每条入站消息的来源用户 ID 和处理结果,对照着看就能定位是渠道没收到还是模型没返回。

还有一个容易被忽略的点:Agent 执行命令时的审批流。默认配置下,Agent 要执行 shell 命令会弹审批,单用户时你在 Web UI 点一下就行,多用户时审批请求会转发给谁?如果没配好,可能所有人都卡在等待审批。解决办法是在openclaw.json里关闭审批:

{ "tools": { "exec": { "security": "full", "ask": "off" } }, "approvals": { "exec": { "enabled": false } } }

同时改~/.openclaw/exec-approvals.json,覆盖本地拦截策略:

{ "defaults": { "security": "full", "ask": "off", "askFallback": "full" } }

这两个文件改完都要重启容器。关闭审批意味着 Agent 可以无确认执行命令,这在多用户开放场景下风险很高,建议配合容器隔离或只读文件系统使用,别在存有敏感数据的机器上直接开。

5. 常见报错排查:401、local proxy failed 与 reading choices

部署过程中最容易撞上的几类错误,这里按真实报错对照给排查路径。

401 Unauthorized。出现在 Web UI 登录或模型请求两个环节。如果是 Web UI 登录报 401,说明输入的 token 和gateway.auth.token不一致,注意别把auth.mode写成none又留着 token 字段,两者要匹配。如果是模型请求报 401,检查openclaw.json里 Custom Provider 的 API Key 是否正确,以及 Base URL 是不是https://taotoken.net/api。常见错误是把 Key 填成了 Bot Token,或者 Key 前后带了空格。

local proxy failed。这个报错通常出现在容器内访问外部 API 时。OpenClaw 容器默认走宿主网络还是桥接网络,取决于 Compose 配置。如果容器内 DNS 解析不了taotoken.net,就会报 proxy failed。进容器验证:

docker exec -it openclaw-gateway sh curl -v https://taotoken.net/api

如果容器内 curl 不通而宿主机通,检查 Docker 的 DNS 配置,在/etc/docker/daemon.json里加"dns": ["8.8.8.8", "1.1.1.1"]后重启 Docker。另外确认没有在容器里配 HTTP_PROXY 之类的环境变量指向一个不存在的地址。

reading choices 相关报错。完整报错通常是error reading choices: unexpected end of JSON input或cannot unmarshal ... into choices。这基本是模型返回格式和 OpenClaw 期望的api类型不匹配。OpenClaw 的 Provider 配置里有个api字段,决定它怎么解析响应:

api 字段值适用模型
openai-responsesgpt-5.2-codex、gpt-5.4、gpt-5-thinking、gpt-4.5-preview、gpt-4o
openai-chat/openai-compatDeepSeek 系列、Moonshot Kimi、OpenRouter、Groq、Ollama 本地模型
anthropic-messagesclaude-3.5-sonnet、claude-sonnet-4-6、claude-opus-4-6
google-genaigemini-2.5-flash、gemini-2.5-pro

如果你用gpt-5.2但api写成了openai-chat,响应结构对不上就会报 reading choices。反过来,用 DeepSeek 却配openai-responses也会出问题。改api字段后重启容器即可。

OAuth 相关报错。如果你在 Provider 里选了需要 OAuth 的官方登录方式,而不是 Custom Provider + API Key,可能会遇到 token 过期或回调失败。多用户公网场景下不建议走 OAuth,直接用 API Key 更稳定,也便于在 TaoToken 控制台统一管理额度和轮换。如果已经配了 OAuth,删掉对应 Provider 重新用 Custom Provider 配一遍。

Codex auth.json 场景。如果你同时用 Codex 类工具,它的auth.json里存的是另一套凭证,和 OpenClaw 的openclaw.json不共享。别把 Codex 的配置直接拷过来,两者字段结构不同。OpenClaw 只需要 Base URL、API Key、Model ID 三件套,配齐就能跑。

排查时养成看日志的习惯,docker logs -f openclaw-gateway会打印请求链路,大部分错误在日志里都有更详细的上下文,比 Web UI 上的一句提示有用得多。

6. 把入口收敛到可控范围:TaoToken 侧的接入与额度管理

公网开放之后,真正需要盯住的不是 OpenClaw 能不能访问,而是模型调用这个出口是否可控。多用户意味着调用量不可预测,如果 Key 泄露或某个用户刷量,账单会很难看。TaoToken 这边提供了几个可以直接用上的能力。

第一,API Key 分环境。别把生产 Key 写死在openclaw.json里然后提交到 Git。建议在 TaoToken 控制台为 OpenClaw 单独建一个 Key,命名上区分用途,比如openclaw-prod。这样即使配置泄露,你可以在控制台单独吊销这一个 Key,不影响其他服务。创建入口在 API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=。

第二,额度与用量查看。多用户并发时,定期在控制台看用量曲线,能提前发现异常增长。如果某个时间段调用量陡增,结合 OpenClaw 日志里的用户 ID 就能定位到具体是谁。控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=。

第三,模型切换。OpenClaw 里换模型只需要改 Model ID 和对应的api字段,Base URL 和 Key 不用动。这意味着你可以在 TaoToken 侧统一管理多家模型,OpenClaw 侧保持一套配置。想验证某个模型是否可用,可以直接在模型对话页面测一条:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,确认返回正常再写进配置。

第四,长期编码和 Agent 场景。如果你把 OpenClaw 当作团队的常驻 Agent 网关,调用会持续发生,这时候用 Coding Plan 类的套餐比按量计费更划算,额度也更可预期。了解入口:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=。

配置文档方面,OpenClaw 的 Custom Provider 字段说明和 TaoToken 的接入示例可以对照看:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=。如果你用 Claude Code 类的工具做开发,接入方式也类似,参考:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=。

最后提醒一句:公网开放 + 关闭审批 + 多用户,这三个条件叠加时,务必给 OpenClaw 容器加资源限制,别让它把宿主机跑满。在 Compose 文件里加mem_limit: 2g和cpus: 1.5之类的约束,配合 TaoToken 侧的额度上限,形成双层保护。部署完成后,定期检查docker stats和 TaoToken 用量,比事后补救省事得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询