⚠️ 免责声明
本文默认读者拥有基础的动手能力,所以对于一些安装简单的软件不会细说,只会附上官方网址,读者可以通过官方文档自行安装,都很简单~
另外,本文使用的很多软件工具都是小团体甚至个人研发,本文只作教程,不保证安全与可靠性,请读者自行拿捏~
此方法可能导致 QQ 号有风控风险,也请读者自行拿捏~
🎯 实现目标
OpenClaw 运行在云端,通过一个自备的 QQ 号与你交流,支持语音、图片、各式文件的收发。
📋 前期准备
🖥️ 云服务器一台
为了安全隔离,本文采用云服务器 + Docker 的安装方式。
云服务器选择时推荐遵循以下要求:
- 更好的配置:因为 OpenClaw 需要在其中为我们做很多工作,所以如果选择了比如 1C1G 版本的超级小罐头,那当你想让它帮你剪视频时后悔的只会是你自己。
- 低延迟:因为你跟它的所有交互都要通过 TCP 协议,所以低延迟会显著提高使用体验。传输速度的要求反而不是那么高,只有语音和大文件收发场景会有差异——当然传输速度高更好,可以获得更自然的语音收发反馈。
- 境外主机(可选):主要是可以大大缓解外网拉镜像、拉插件、拉库的问题,会自己配置国内镜像或代理的可以无视。另外,如果后面你想把 OpenClaw 的后台页面反代到域名上,境外主机也可以免去备案的烦恼。
这里也说一下作者使用的服务器:某野鸡厂商的特惠无售后产品,香港 4C8G,Intel CPU,一年只要 288 RMB,还要什么自行车。
不过不推荐读者学我,选择大厂的服务器肯定还是更有保障,售后也更完备,所以这里就不贴厂家了~
🔑 AI API Key
国内大厂的基本都可以,常见的 Kimi、GLM 还有 MiniMax 都是支持的。海外旗舰当然更好,不过也更贵,而且注意这里只能用 API Key,你的比如 Claude Code Max 套餐可是用不了的。我之前试了一下上 Sonnet 4.6,一下午不敲代码用个几十美刀还是轻轻松松的。
关于哪个模型更适合 OpenClaw,可以参考 PinchBench,这个站列出了常用模型在 OpenClaw 中完成任务的正确率以及速度表现,可以结合使用价格来选择。
作者因为囊中羞涩,选择的是性价比拉满的 MiniMax Token Plan,29 块钱的套餐,使用 MiniMax M2.1。不用 M2.5 是因为 M2.5 是专门为 coding 做的,听说通用任务表现不如 M2.1。套餐完全用不完,而且恢复速度很稳定也很快。唯一的缺点就是确实傻——跟我之前使用 Sonnet 4.6 的体验完全不同,看似很简单的事 M2.1 也经常会做错,而且回复你的时候总喜欢甩锅和摆烂。不过有钱谁会用这个呐受着吧
不过写本文的时候发现 MiniMax 发布了最新的 M2.7,我的 Plan 自动升级啦!一会儿就去试试~
试完了,还是很弱智😅
💬 一个 QQ 号
一个属于你自己的 QQ 号,不能是你主力用的号。接下来这个号会由 OpenClaw 接管。注意 OpenClaw 只会用它收发消息,头像和昵称之类的还是由你来管理。你甚至还可以用手机登录该账号——可以理解为 OpenClaw 只是接管了这个号的 PC 端聊天框。
🌐 域名一个(可选)
如果不想每次通过 IP:Port 的形式来访问后台管理界面,可以找大厂买个域名,比如腾讯云或者阿里云,后面反代一下就可以用域名访问了。
🔧 安装
因为作者是基于 1Panel 安装的,所以这里不介绍 OpenClaw 的原生安装方法,读者想跳过 1Panel 的可以自行查阅 OpenClaw 官方文档。
不过还是推荐装 1Panel 的,后续连接和管理自己的服务器都会方便很多~
安装 1Panel
首先 SSH 连接你的服务器,使用指令安装 1Panel,参考 官网教程 即可,非常简单,全程都有中文指引。
1Panel 安装好之后,会在你的服务器上以一个随机端口运行起来。此处如果心大,可以直接给服务器添加对应的安全规则,开放该端口的防火墙,这样你就可以直接用 IP:Port 的格式登录了。不过作者个人建议还是使用 SSH 端口转发来访问,全程通过 SSH 隧道,更安全:
ssh -L 1panel端口号:127.0.0.1:1panel端口号 root@你vps的ip -p ssh端口号
使用此命令后,你本地发往该端口的流量都会被 SSH 转发到服务器的同端口,接下来就可以用 127.0.0.1:1panel端口号 来打开管理界面了。
安装 OpenClaw + NapCat
🐳 Docker
进入 1Panel 后台之后,首先安装 Docker。点击左侧「计划任务」,然后找到右边出现的「安装 Docker」脚本,点击「执行」即可。该脚本会自动前往 1Panel 的镜像网址安装 Docker,并帮你的 Docker 切换到 1Panel 的镜像源,非常好用~
🤖 准备模型账号
点击左侧 AI → 智能体 → 模型账号,添加一个你自己渠道的模型账号,然后填入你自己的 API Key。比如作者 MiniMax 的就这么填——对了,很多 AI 厂商都分国内站和国际站,这里记得分辨:

「同步关联智能体」可以不勾,没啥影响。第三方中转站的用户这一步可以先不管,等容器创建好之后再手动改 JSON 文件也是可以的。
📦 安装应用
点击左侧「应用商店」,安装 OpenClaw,会自动跳转到智能体界面。都是中文,绝大多数大家应该自己都会填,不会填的就别动,保持默认即可。
唯一需要注意的是:模型供应商记得改成刚才已经准备好的模型账号~
另外,安装过程中会生成一个 Token,相当于你默认的后台登录初始密码,记得复制出来备用~
点击确认后就开始自动安装了,完成后还会自动创建 Docker 容器,在「容器」菜单下可以找到。
想要自己改 OpenClaw 配置的读者,可以点击工作目录下面的小文件夹图标,它会自动跳转到该容器在宿主机的映射目录,比如 /opt/1panel/apps/openclaw/OpenClaw/。进入里面的 data/conf 目录,就能找到 OpenClaw 的配置文件 openclaw.json,可以参考 官方配置文档 来修改。
后期想要给 OpenClaw 后台做反代的读者,此时也可以同步安装 DDNS-GO 和 OpenResty,等反代时会用到。
🐱 部署 NapCat
这一步主要是为了给 OpenClaw 提供一个通过 QQ 来联系你的方式。需要用到一个开源的 QQ 机器人框架——NapCat。各位可以直接用命令行安装,作者高度依赖图形化界面,这边继续选择使用 1Panel 提供的图形化界面安装~
点击「容器」界面顶端的「编排」按钮,进入编排界面,点击创建,在文件夹位置填入 napcat 就可以。然后在 Compose 内容中填入下列内容:
networks:
1panel-network:
external: true
services:
napcat:
environment:
- NAPCAT_UID=${NAPCAT_UID}
- NAPCAT_GID=${NAPCAT_GID}
ports:
# 此处外部端口改为 13000 主要是因为不知道为什么我的 VPS 的 3000 端口已经被占用了
- 13000:3000
- 3001:3001
- 6099:6099
volumes:
# 这里加入两个映射路径主要是为了两个 Docker 容器共享目录准备的
- /opt/shared_data:/shared
- /opt/napcat/qq_data:/app/.config/QQ
container_name: napcat
networks:
- 1panel-network
restart: always
image: mlikiowa/napcat-docker:latest
然后在环境变量中加入如下内容:
NAPCAT_UID=0
NAPCAT_GID=0
点击保存后就会自动拉取镜像、创建并启动容器了。这样创建的容器可以保证跟 1Panel 创建的 OpenClaw 在同一个 Docker 网络下,同时拥有共享目录,为后面的文件传输做准备。
✏️ 修改 OpenClaw 的编排
接下来修改 OpenClaw 的编排,让它拥有 root 权限,同时也能访问 NapCat 的共享目录。按下面这么改就可以:
networks:
1panel-network:
external: true
services:
openclaw:
user: "root"
container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
environment:
HOME: /home/node
TERM: xterm-256color
healthcheck:
interval: 3m
retries: 3
start_period: 15s
test:
- CMD
- node
- -e
- fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))
timeout: 10s
image: 1panel/openclaw:2026.3.13
init: true
labels:
createdBy: Apps
networks:
- 1panel-network
ports:
- ${HOST_IP}:${PANEL_APP_PORT_HTTPS}:8443
restart: unless-stopped
volumes:
- ./data/conf:/home/node/.openclaw
- ./data/workspace:/home/node/.openclaw/workspace
- ./data/caddy/Caddyfile:/etc/caddy/Caddyfile:ro
- ./data/caddy/data:/data
- /opt/shared_data:/shared
- /opt/napcat/qq_data:/napcat/qq_data
可以看到主要就是加了个 user: "root" 和两行 volumes,环境变量不用动。点击保存,1Panel 会自动帮你把新的编排变动同步到容器里。
⚠️ 注意:通过 1Panel 更新 OpenClaw 版本时会覆盖你本地的 Compose 改动,记得备份~
🔌 安装 channel-qq 插件
感谢大佬 izhimu 制作的插件,这个插件主要是打通 OpenClaw 和 NapCat 的连接。大家闲的没事可以去给大佬点个 Star~ 👉 openclaw-channel-qq
这一步很简单,在容器或者智能体界面都可以,打开 OpenClaw 所在的 Docker 容器终端,使用命令行安装插件:
# 安装插件
openclaw plugins install @izhimu/qq
# 更新插件
openclaw plugins update qq
🔐 登录 NapCat
先去 NapCat 的容器,点击「日志」按钮看一下日志里的 Token,这相当于你本地 NapCat 服务的初始默认密码,复制出来备用~
同时记住 NapCat 被 Docker 分配到的 IP 地址,一会儿需要配置到 OpenClaw 里。
然后就可以断开跟 1Panel 的 SSH 端口转发,准备下一步~
还是用前面教过的 SSH 端口转发方式连接你服务器上 NapCat 正在用的端口。如果你没有改过我的 Compose 的话,此处应该是 6099 端口:
ssh -L 6099:127.0.0.1:6099 root@你vps的ip -p ssh端口号
连接后,用 127.0.0.1:6099 就可以进入 NapCat 的登录界面了。输入刚才备用的 Token,进入登录 QQ 的界面——扫码或者账号密码都可以——登录你打算让 OpenClaw 控制的 QQ 号。
登录进来之后,可以先找到最下面的「系统配置」,在「登录配置」里选择你想要后续自动登录的 QQ 号,并在「修改密码」那里把密码改成你能记住的密码。这样以后就不需要保留之前的 Token 了,直接用你自己设置的密码登录即可。
然后点击左侧的「网络配置」,选择新建一个 WebSocket 服务器,像下图这样配置就可以。记住这个 Token 备用:

这样我们就启用了 NapCat 的 WebSocket 服务,以支持用你的 QQ 号收发消息~
⚙️ 配置 Channel QQ
接下来断开 NapCat 的端口转发,连接 OpenClaw 的端口。需要注意的是,1Panel 在最新版本里套了一层 Caddy 用来守护你的 OpenClaw——聊胜于无吧——所以登录时需要使用 HTTPS 协议而非 HTTP。输入 https://127.0.0.1:18789,就会打开默认的登录界面了~
在「网关令牌」处输入创建智能体时复制下来的 Token,就可以登录到 OpenClaw 后台了~
登录进来后其实你就已经可以在聊天界面跟智能体聊天了,只是还不能通过 QQ 交流。你可以先在聊天界面聊聊试试,先爽一下——此时已经离成功不远了~
点击侧边栏的「频道」按钮,打开 Channel 设置界面。现在最上面应该有一个叫 QQ 的频道,没有的话就去 1Panel 后台重启一下 OpenClaw 的容器应该就能刷出来。
这里主要是要把刚才从 NapCat 那边获取到的 Token 和 IP 地址填进去,分别填在下图这两个地方就可以:

对了,记得把 Enable 打开 2333~
其他配置可以按需调整。正常来说 Save 之后 Connected 那一栏应该显示 Yes。作者这边的 QQ 号被风控了没登录,所以显示的是 No。
然后回 1Panel 后台重启一下 OpenClaw 的容器,这个 Channel 应该就可用了。
其实理论上这一步你甚至可以在聊天里让 Agent 自己配置
哈哈
💬 完善 QQ 交流
此时你应该已经可以通过 QQ 和你的 Agent 交流了 🎉 如果不行的话,就把我这篇博客发给你的 Agent,让它看看愚蠢的人类到底是哪一步做错了,哈哈哈哈哈~
📁 文件传输
不过此时你的 Agent 应该还不会收发图片、语音和本地文件。正常来说,NapCat 在接收到这些内容时其实都是以文件形式保存的,存放在它本地的 /app/.config/QQ 目录下(具体位置会根据 QQ 号来存),并且这个目录是不能改的。
它正常会通过 WebSocket 发一个 fileID 给客户端,供客户端用 ID 来下载文件。但是我在实际操作中,Agent 说它没有拿到这个 ID(虽然我也不知道是真是假)。主要是你想想,它俩实际上就在同一台机器里,还要走下载流程,是不是有点弱智?
于是我直接把这个目录映射给了 OpenClaw 一份。如果前面的 Compose 你都完全按照我的改的话,你就可以跟你的 Agent 说:
我已经把 NapCat 的
/app/.config/QQ目录映射到你的/napcat/qq_data目录下了,以后 NapCat 给你发的 file url,你都自己替换一下相对位置就可以找到了。另外,你们俩的
/shared目录是相通的,当你想通过 NapCat 给我发本地文件的时候,可以把文件放在这个目录下,然后用 url 的方式让 NapCat 发给我。
理论上来说比较聪明的 Agent 此时应该就知道怎么跟你收发文件了。你可以给它发一张图片,让它原样发给你试一下~
🎙️ 语音交流
现在理论上你已经可以实现给 OpenClaw 发语音了,它也可以收到,也可以用语音形式给你发音频。但它还没法理解你发的语音,也没法给你发它自己真正说的语音。
我们需要 STT(语音转文字) 和 TTS(文字转语音) 工具来实现这个流程。
TTS 比较简单,我的 Agent 自己就搞定了,似乎是它本身就有相关的 Skills?我记得是装了个微软的什么东西,总之效果还不错。
比较麻烦的是 STT。OpenClaw 默认的 Skills 使用的是谷歌的 Whisper 模型,这个模型又大、对中文支持还不好,而且如果你要用别人的 API 还很贵。
这边作者使用的是 SenseVoice,似乎是阿里开源的一款 STT 模型。体量很小,在我的垃圾 VPS 上十秒的语音也只需要不到五秒就能转完,而且对中文支持很好~
此处你只需要跟你的 Agent 说用这个 STT 工具,然后给它发这个官方仓库的链接,它自己就会用了。只不过第一次使用需要下载模型,用时可能比较久——我这台垃圾带宽的 VPS 不到 1G 的模型下了二十多分钟才下完……
🚀 进阶使用
到此应该就可以实现跟 Agent 几乎全形式的无障碍交流了。你也可以进一步去调教你的 Agent,包括让它去装各种各样的 Skills,替你做各种各样的事~
而且基本都可以通过自然语言来交流,只不过有的时候它配置完需要你替它重启一下容器就可以了。
🌍 域名反代
有些人总觉得每次用 SSH 端口转发去连接 OpenClaw 后台很麻烦,但又担心开放端口不安全,比如我。此时可以用反向代理来解决这个问题,而且因为我们安装了 1Panel,反代实际上非常简单~
Caddy 无效化
不过首先我们得把 1Panel 给我们装的 Caddy 这层壳给剥了。最简单的方式就是找到 /opt/1panel/apps/openclaw/OpenClaw/data/caddy 目录下的 Caddyfile 文件,然后把内容改成:
{
admin off
auto_https off
skip_install_trust
storage file_system {
root /data/caddy
}
}
http://:8443 {
bind 0.0.0.0
reverse_proxy 127.0.0.1:18789
}
说实话这个改动其实挺弱智的——这个逻辑相当于是把本来 Docker 映射的端口反过来再映射回去,而且什么也不做。但没办法,把 Caddy 卸了怪麻烦的,改个文件多简单,而且又没啥性能开销~
改完之后重启 OpenClaw 的容器,我们就可以通过 HTTP 来访问 OpenClaw 的 WebUI 服务了。
DDNS 设置
DDNS-GO 是我最喜欢用的一款 DDNS 服务,它最主要的作用就是帮我们把服务器的 IP 注册到域名服务商的域名解析下。此处我们还是通过 SSH 端口转发的方式连接 DDNS-GO 的管理后台,第一次登录会让你设置账号密码,设置一下别忘了就行。
打开之后是这样的。作者用的是腾讯云的域名,所以这里是腾讯云,其他的云也一模一样,没区别。我们点击「创建腾讯云 API 密钥」(别的云就是创建别的云的密钥,都一样),创建好之后回来把下面两个 SecretId 和 SecretKey 填上:

然后开始填下面的。首先是 IPv4,在 Domains 里填上你要用的域名即可。比如你买的域名叫 abc.com,你此处就加个三级域名,比如叫 openclaw.abc.com 即可,多个域名直接回车分行就可以:

下面的 IPv6 操作方式是一样的,不想打开也可以不启用。如果要启用的话,推荐在正则表达式中填入 @2——这是因为我们的 IPv6 地址有时候会变,变了之后用网卡获取的第一个地址是老地址(已废弃),第二个才是新地址。此处如果不写 @2 的话就会获取到已废弃的老地址,导致 IPv6 失效。Domains 栏跟 IPv4 完全相同的填法就可以。
然后拉到最下面点击保存,等待几分钟后,域名应该就可以正确解析到你服务器的 IP 了。
不过其实因为你的 VPS 的 IP 大概率是固定的,此处也可以选择自己手动在域名服务商的后台做解析,效果上没区别~
📜 Let's Encrypt 证书申请
接下来回到 1Panel,点击「网站」菜单,先进入「证书」页。
首先点击「DNS 账户」,保存一个 DNS 账户,让 1Panel 用来申请证书。此处的 ID 和 Token 就把我们刚才 DDNS 那边创建的 API Key 填进去就可以。
接着点击「申请证书」,主域名就填你打算用的三级域名,选择自带的 1Panel 的 ACME 账户,DNS 账号选择你刚才添加的账号,其他不用动。点击确认,就会自动帮你申请一个证书。很快,估计两三分钟,状态栏显示「正常」时就表示证书申请下来了。
🔀 配置 OpenResty 反代
切回到「网站」页面,点击「创建」按钮。最上面的标签选择「反向代理」,然后按如下配置:
- 域名:填刚才的域名
- 端口:填
443 - 勾选:SSL、监听 IPv6、启用 HTTPS
- 代理地址:不用手动填,直接打开应用下拉列表选择 OpenClaw,就会自动填上;或者你自己填
127.0.0.1:18789也可以 - 协议:保持
http,不要切换成 https
点击确认,你就可以通过域名访问 OpenClaw 后台啦~
🛡️ 安全建议
- 有什么不懂的都可以问你的 Agent,它大概率比你懂!
- 不推荐公开自己的服务器 IP,也不推荐开放任何公开端口接收所有 IP 访问
- 推荐使用域名反代隐藏真实 IP 和端口
- 要么让自己的 IP 固定,在防火墙把自己的 IP 加白
- 要么就每次使用 SSH 端口转发来访问