.syqmktiqk.jpg)
OpenClaw部署指南
OpenClaw 部署指南(手动 Docker 详细版)
Excerpt
部署的时候我找了很多 Docker 部署的公众号,虽然说官方也有文档,但是实际部署时候问题很多。写在这里供大家参考吧。注意,在本地电脑 Docker 部署的话,可能会遇到更多问题。我这个是在云服务器上部署的,操作系统是 Debian 13,安装了 1Panel 面板。面板上可以直接安装 OpenClaw,但是好像不能自定义模型。
部署的时候我找了很多 Docker 部署的教程。虽然官方也有文档,但实际部署时还是会遇到不少问题,所以整理成文供大家参考。
说明:
- 本文环境为云服务器
- 操作系统为 Debian 13
- 已安装 1Panel
- 1Panel 面板里可以直接安装 OpenClaw,但似乎不能自定义模型
1. 部署
首先要先确定自己的使用方式,因为这会直接决定部署方案。
建议先整体看一遍项目 README:
通过阅读文档可以知道,OpenClaw 可以运行在:
- 本地宿主机
- 虚拟机
- 云服务器
至于如何和它对话,OpenClaw 支持很多渠道。我这里选择的是 Telegram。
由于小龙虾的能力上限基本取决于模型能力,所以很自然地,优先考虑当前的顶级模型,例如:
- Claude
- GPT
所以我的结论是:
最佳配置方案:海外云 VPS + Telegram + 顶级模型
正式动手前,建议再看一遍官方 Docker 安装文档:
1.1 在云服务器上手动部署:先下载项目
1 | git clone https://github.com/openclaw/openclaw.git |
运行脚本后,会在宿主机上创建两个重要目录,并挂载到 Docker 容器中。
① ~/.openclaw:配置目录
用于存储:
- OpenClaw 的记忆
- 配置文件
- 第三方 API 密钥等
② ~/openclaw/workspace:工作空间目录
用于存储:
- Agent 可直接访问的文件
- Agent 创建的文件
1.2 Docker 启动 OpenClaw 后会自动打开配置引导
第一步先选择:
- Skip for now
因为我打算用 Telegram 作为消息渠道,所以需要先做这几件事:
- 在 Telegram 中搜索
@userinfobot,获取自己账号的 用户 ID - 搜索
@BotFather创建机器人- 先创建机器人名称(昵称)
- 再创建机器人用户名
- 创建成功后会得到一个 Bot API Token
- 记住这个 Token
- 当配置引导走到 Telegram (Bot API) 时,填入上一步拿到的 Bot API Token
然后其余部分可以一路跳过。
到了 hooks 这里,选择:
1 | session-memory |
当界面出现类似下面的 Token 提示时,说明配置完成:
1 | Token: `24b38f4bb1401bd949f5a2cc156e99bad6591847919f3ce0ab4cab02d69e037e` |
此时基本部署完成。
可以通过浏览器访问:
1 | http://公网IP:18789 |
不过这里更推荐使用域名访问,原因见下文 5.2 浏览器访问 http://公网IP:18789 的安全问题。
2. 消息通知渠道
接下来需要在服务器上执行配对命令:
1 | # 宿主机直接执行 |
注意:
- 配对码默认 1 小时过期
- 每个渠道待处理请求默认上限为 3 个
如果执行命令时配对码已经过期,日志通常会提示:
1 | [openclaw] Failed to start CLI: Error: No pending pairing request found for code: 8AGF3F58 |
这时需要重新在 Telegram 里给机器人发送:
1 | /start |
然后获取新的配对码,再重新执行批准命令。
3. 模型选择
这里很多人会纠结模型怎么选。其实主要从两个角度考虑就行:
3.1 按任务复杂度选
| 类型 | 推荐模型 |
|---|---|
| 编程、金融、数据分析等复杂任务 | Claude Opus 4.6、GPT 5.2 Pro |
| 整理文件资料、P 图、写作等日常任务 | Kimi 2.5、GLM 5.0、MiniMax-M2.5 |
3.2 按使用频次选
| 使用频次 | 建议 |
|---|---|
| 高频使用 | 开通模型包月 / 包年套餐,优先推荐 GLM5,能力基本可与 Opus 4.5 打平 |
| 低频使用 | 推荐企业级 API 按量付费,稳定且便宜,例如 Atlas Cloud、接口 AI |
4. Skills 与 MCP
4.1 Skills
推荐去 ClawHub 社区下载。注册账号后,可以获取 API 密钥,让小龙虾自己去安装。
推荐 Skills
find-skillsAgent BrowserDevTools MCPauto-updaterOpenclaw Command Centerself-improving-agent
4.2 MCP
因为我用的是智谱模型,所以可以优先尝试几个智谱生态相关的 MCP。理论上会比第三方 MCP 的效果更好一些。
我的建议是:
先装上试试,不好用再换。
5. 踩坑点
5.1 权限问题:EACCES permission denied
现象
在执行 ./docker-setup.sh 启动镜像后,报错:
1 | Error: EACCES: permission denied, open '/home/node/.openclaw/openclaw.json.7.xxx.tmp' |
原因
Docker 权限不足:容器中的用户(uid=1000)尝试写入 root 或其他用户拥有的目录。
解决方案
执行:
1 | chown -R 1000:1000 "$HOME/.openclaw" |
修改权限后,可以执行以下命令重新完成初始化向导:
1 | docker compose run --rm openclaw-cli onboard |
5.2 浏览器访问 http://公网IP:18789 的安全问题
现象
页面报错:
1 | disconnected (1008): control ui requires HTTPS or localhost (secure context) |
官方提示如下:
1 | This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open `http://127.0.0.1:18789` on the gateway host. |
相关文档:
解决方案
开启 HTTPS。
通常做法是在服务器上创建一个反向代理站点。我这里直接使用 Caddy 来管理多个子域名,具体过程可自行搜索。
最终建议通过域名访问,例如:
1 | https://域名.com/ |
5.3 Docker 用户部署常见问题
5.3.1 disconnected (1008): pairing required
原因
控制 UI 第一次从“新浏览器 / 新设备”连接到 Gateway 时,需要做一次性的“设备配对批准”。
即使是:
- 同一台机器
- 同一个 Tailnet
也有可能仍然需要这一步。
先尝试执行:
1 | openclaw devices list |
如果这样还不行,可以按下面四步排查。
Step 1:修复容器网络
CLI 容器无法访问 127.0.0.1 的网关,因为容器内的 localhost 指向的是它自己。
在 docker-compose.yml 中为 openclaw-cli 添加:
1 | openclaw-cli: |
Step 2:设置 Gateway 绑定到局域网
内置向导默认使用回环地址,但浏览器请求通常是通过 Docker 桥接网络(例如 172.18.0.x)访问的。
修改 ~/.openclaw/openclaw.json:
1 | { |
Step 3:同步 Gateway Token
docker-setup.sh 会在 .env 文件中生成一个令牌,但引导向导可能会把另一个令牌写入 openclaw.json。
请确保:
~/.openclaw/openclaw.json中的gateway.auth.token.env中的OPENCLAW_GATEWAY_TOKEN
这两个值完全一致。
Step 4:批准待匹配设备
设备可能卡在待处理状态,因为 CLI 无法连接网关来批准它们。
可以选择以下任一方案。
方案 A:在网关容器内直接执行
1 | docker compose exec openclaw-gateway node dist/index.js devices list |
方案 B:手动迁移设备状态文件
把设备条目从:
1 | ~/.openclaw/devices/pending.json |
移动到:
1 | ~/.openclaw/devices/paired.json |
然后将 pending.json 清空为:
1 | {} |
最后重启网关。
方案 C:快速绕过
在 openclaw.json 中加入:
1 | { |
完成以上任一项操作后,重启网关:
1 | docker compose restart openclaw-gateway |
然后访问:
1 | http://localhost:18789/#token=<your-token-from-.env> |
我这几个方案都试过,确实能解决问题。
5.3.2 其他问题
使用 openclaw-cli 命令行
1 | # 仅重启网关(不会应用你修改过的 compose 配置) |
OpenClaw 命令行速查
Docker 版说明:
如果官方文档里写的是systemctl,Docker 版通常改为docker compose run --rm openclaw-cli或相关容器命令。
1 | # 启动网关 |
核心文件说明
OpenClaw 有几个核心文件,它们决定了角色、身份和工具能力。
当你重装后,如果保留并替换这些文件,就能一定程度恢复它之前的“记忆”和行为。
这些文件位于工作区:
1 | ~/.openclaw/workspace |
| 文件 | 作用 |
|---|---|
AGENTS.md |
行为准则,定义什么能做、什么不能做 |
SOUL.md |
定义性格、技能和处理逻辑 |
TOOLS.md |
定义可使用的工具 |
IDENTITY.md |
基本信息,例如名字和图标 |
USER.md |
记录你的偏好 |
HEARTBEAT.md |
默认为空或仅包含注释,用于定期检查任务 |
MEMORY.md |
长期记忆文件 |
关于 Spawn 分身能力:
调用
spawn可以开启 OpenClaw 的分身能力,用于处理多任务。示例提示词:
spawn 两个 subagent,分别从正方、反方角度阐述结婚的好处,不少于 3 轮,把详细过程展示出来。
给小龙虾换一个没那么“班味”的性格设定
下面是一段可直接使用的提示词,用来重写 SOUL.md:
1 | Read your SOUL.md. Now rewrite it with these changes: |
开启分身:让不同机器人干不同的活
⚠️ 注意:
由于是 Docker 容器启动,当前会导致 agent 之间无法一起协作、彼此不可见,并且共享同一个会话。
所以这个功能在 Docker 版暂时不可用。
配置参考如下:
1 | { |
分工建议
- 你(主身):负责汇总其他机器人的工作报告,以及日常事务、生活安排、工作安排等
- bot1:负责编程、数据分析等复杂技术任务
- bot2:负责营销推广、自媒体创作、法律、医学等偏文科类任务
6. 安全加固:结合公开风险点的部署建议
先说明:
我这里不提供漏洞利用方法,只整理 公开讨论中常见的 OpenClaw / Agent 类应用风险点,并给出对应的加固建议。
这类系统的核心风险通常不在“程序本身能不能跑起来”,而在于:
- 控制界面暴露
- 令牌泄露
- 容器权限过大
- 工作目录挂载过宽
- 第三方 Skills / MCP 供应链风险
- Agent 被诱导执行高危操作
6.1 已公开场景中最常见的风险类型
1)Control UI 暴露在公网
如果你直接把:
1 | http://公网IP:18789 |
暴露出去,或者在反向代理中没有做好认证与 HTTPS,很容易出现以下问题:
- 浏览器端 token 被截取
- 未授权设备尝试配对
- 控制界面被扫描器发现
- 日志、Referer、历史记录中泄露鉴权信息
建议:
- 仅通过 HTTPS 域名 访问
- 尽量加一层 额外认证(如反向代理 Basic Auth / SSO / IP 白名单)
- 不要长期开启
allowInsecureAuth: true - 不要把带
#token=的访问链接随意发给别人
2)使用 allowInsecureAuth: true 作为长期方案
前面为了排障,可能会临时加入:
1 | { |
这个配置只能用于临时恢复访问,不应作为长期部署方案。
风险:
- 降低控制 UI 的鉴权门槛
- 在 HTTP 场景中更容易造成 token 被窃取
- 容易在“能用就不改”的情况下长期裸奔
建议:
- 排障结束后立刻关闭
- 改为 HTTPS + 正常设备配对
- 同步轮换一次 Gateway Token
3)Token、Bot 密钥、API Key 明文存放或误传
OpenClaw 典型敏感信息包括:
OPENCLAW_GATEWAY_TOKEN- Telegram Bot Token
- 模型 API Key
- ClawHub / 第三方平台密钥
这些信息容易通过以下方式泄露:
- 截图
- shell history
.env文件误传- Git 仓库提交
- 面板备份包
- 反代日志
- 聊天工具转发
建议:
.env、openclaw.json、备份文件都不要公开分享- 将配置目录权限收紧到仅部署用户可读
- 一旦怀疑泄露,立刻轮换 token / key
- 不要把敏感值直接写进公开的教程或笔记
4)Docker 容器权限过大
这是 Agent 类系统最危险的一类问题之一。
如果你为了省事用了下面这些高危配置:
privileged: true- 挂载
/var/run/docker.sock - 挂载整个宿主机
/ - 使用
network_mode: host - 容器内以
root运行 - 给了过多 Linux capabilities
一旦 Agent、Skill、MCP、依赖包出现问题,或者被 prompt injection 诱导执行危险操作,影响范围就可能从“容器内”扩大到“整个宿主机”。
建议:
- 不要使用
privileged: true - 不要挂载 Docker Socket,除非你非常明确知道风险
- 不要把宿主机整个目录挂进去
- 不要用 Host 网络,除非确有必要
- 以非 root 用户运行
- 限制 capabilities、文件系统写权限、进程数、内存、CPU
5)工作目录挂载过宽
默认的工作空间是:
1 | ~/openclaw/workspace |
如果你把自己的整块家目录、项目目录、密码备份目录、SSH 目录一起挂进去,相当于默认授权 Agent 读取这些内容。
高风险挂载示例:
1 | /root |
建议:
- 单独创建一个专用工作目录
- 只挂载 OpenClaw 需要访问的最小范围
- SSH 密钥、云平台凭证、数据库配置不要放进 workspace
- 对上传给 Agent 的文件做一次“脱敏检查”
6)第三方 Skills / MCP 的供应链风险
公开社区里的 Skills / MCP 确实方便,但本质上它们属于:
- 第三方代码
- 第三方提示模板
- 第三方调用链路
- 第三方 API 依赖
潜在风险包括:
- 读取超出预期的文件
- 把数据发送到外部接口
- 执行高风险命令
- 引入恶意更新或依赖
建议:
- 只安装确实需要的 Skills / MCP
- 优先选择活跃、透明、可审查源码的项目
- 更新前先看 release note / 提交记录
- 给不同用途的 Agent 分不同工作区
- 不要把生产密钥直接暴露给测试中的 MCP
7)Prompt Injection 导致越权执行
Agent 不只是“聊天机器人”,它还能:
- 读写文件
- 调工具
- 访问网页
- 执行命令
- 联动外部服务
所以当它处理:
- 网页内容
- Markdown
- issue / PR
- 邮件
- 聊天记录
- 第三方文档
时,可能被内容中的恶意提示诱导。
建议:
- 在
AGENTS.md/SOUL.md中明确写入禁止项 - 不要让默认 Agent 自动执行高危命令
- 对删除、下载、上传、联网、覆盖写入操作加确认
- 将“浏览网页”和“执行系统命令”拆给不同 Agent
7. 最小权限运行建议
这部分很重要。OpenClaw 应尽量在最小权限下运行,不要为了图省事直接给满权限。
7.1 运行原则
遵守下面几条就够用了:
- 非 root 用户运行
- 最小目录挂载
- 最小网络暴露
- 最小系统能力
- 最小密钥权限
- 最小可执行工具集
一句话总结就是:
让 OpenClaw 只能访问“它完成当前任务所必需的东西”,其余一律不给。
7.2 宿主机权限建议
建议新建专用用户
不要直接用 root 跑,建议专门创建一个低权限用户,例如:
1 | sudo adduser --disabled-password --gecos "" openclaw |
注意:
把用户加入
docker组本身就带来较高权限,因为 Docker 组通常等价于较强宿主机控制能力。更稳妥的做法是:
- 由管理员统一部署容器
- OpenClaw 自身运行在非 root 容器用户下
- 平时不要让 Agent 直接接触 Docker 控制面
目录权限收紧
1 | mkdir -p /home/openclaw/.openclaw |
如果有单独的配置文件和日志文件,建议:
1 | chmod 600 /home/openclaw/.openclaw/openclaw.json |
7.3 Docker 最小权限建议
不要使用这些高危配置
1 | privileged: true |
也不要挂载:
1 | /var/run/docker.sock |
推荐的约束思路
可以考虑在 docker-compose.yml 中逐步加入以下限制:
1 | services: |
说明
user: "1000:1000":避免容器内以 root 运行read_only: true:根文件系统只读tmpfs:给临时文件一个受控的可写区域no-new-privileges:true:阻止进程提权cap_drop: [ALL]:去掉多余 Linux capabilitiespids_limit:避免异常 fork 或任务堆积mem_limit/cpus:限制资源占用127.0.0.1:18789:18789:只绑定本机,不直接暴露公网
注意:
某些版本或功能可能需要额外写权限。如果加了
read_only: true后启动失败,就只针对必需目录单独放开,不要整容器放开。
7.4 反向代理最小暴露建议
推荐架构:
1 | 公网 -> HTTPS 反向代理 -> 127.0.0.1:18789 |
而不是:
1 | 公网 -> 直接暴露 OpenClaw 网关端口 |
建议至少做到
- 只开放 80/443
- 18789 仅监听
127.0.0.1 - 使用 HTTPS
- 加访问控制
- 关闭目录索引与无关日志记录
- 敏感 Header 不回显
如果你的代理支持,可以额外加:
- IP 白名单
- Basic Auth
- Fail2ban / WAF
- 速率限制
7.5 模型 API Key 最小权限建议
如果模型平台支持,尽量使用:
- 单独项目级 API Key
- 限额度 Key
- 限 IP Key
- 限模型范围 Key
- 测试 / 生产分离 Key
不要把:
- 主账号全局密钥
- 高额度长期密钥
- 复用在多个项目里的密钥
直接塞进 OpenClaw。
7.6 Telegram Bot 最小权限建议
虽然 Telegram Bot 不像服务器权限那么危险,但也建议收紧:
- 单独创建一个专用 Bot
- 不与其他项目共用 Token
- 只开放需要的消息能力
- 不把 Bot 拉进大群乱跑
- 发现泄露立即去 BotFather 重置 Token
7.7 Skills / MCP 的最小权限建议
给第三方扩展时,建议采用“沙箱式思路”:
- 一个 Skill 只解决一类问题
- 一个 MCP 只给一组最小凭证
- 测试环境先跑
- 验证没问题再进正式环境
- 能只读就不要读写
- 能本地就不要联网
- 能手工确认就不要全自动执行
8. 一份更稳妥的生产部署清单
如果你准备长期使用,建议至少做到下面这些:
必做项
- 使用 非 root 用户 部署和运行
-
18789只监听本地,不直接暴露公网 - 通过 HTTPS 域名 + 反向代理 访问
- 关闭
allowInsecureAuth: true - 定期轮换 Gateway Token、Bot Token、模型 API Key
- 工作区使用专用目录,不挂宿主机敏感路径
- 不使用
privileged: true - 不挂载 Docker Socket
- 只安装必要的 Skills / MCP
- 定期备份
~/.openclaw,但备份文件要加密保存
推荐项
- 给反向代理加 Basic Auth / IP 白名单
- 将配置文件权限收紧为
600 - 为容器设置
cap_drop: [ALL] - 设置
no-new-privileges:true - 限制 CPU / 内存 / PID
- 将高危任务与日常聊天分配给不同 Agent
- 在
AGENTS.md中加入危险操作确认规则
9. 建议加入 AGENTS.md 的安全约束
为了降低误操作,建议在 AGENTS.md 中加入类似规则:
1 | 1. Never read files outside the designated workspace unless the user explicitly authorizes a specific path. |
如果你更习惯中文,也可以写成:
1 | 1. 未经明确授权,不得读取工作目录之外的任何文件。 |
10. 最后建议
如果你只是“先跑起来玩玩”,前面的部署步骤已经够用。
但如果你准备:
- 长期开着
- 放在公网
- 接入真实工作流
- 绑定自己的模型账户和 Bot
- 让它接触文档、代码、客户资料
那就一定要把它当成一个有外部输入、有文件权限、有联网能力的自动化执行系统来看,而不是普通聊天机器人。
所以最终建议只有一句:
OpenClaw 能力越强,越要在最小权限下运行。默认不给,按需开放,而不是默认全开。
- Thanks for your appreciation. / 感谢您的赞赏






.4ckocdw8i3.jpg)

.2a4vobxnfx.jpg)
.6m3ovvgyxl.jpg)