OpenClaw这阵子是真的火,群里隔三差五就有人问"萌新怎么部署OpenClaw""腾讯云部署OpenClaw有没有教程"。我自己的OpenClaw实例已经稳定跑了一个多月,接在飞书上当私人助理用,平时写写周报、查查资料、调一下内部API,省了不少事。这次干脆把从零开始部署OpenClaw到腾讯云的完整过程写出来,包括服务器选型、Docker拉取、模型接入、IM渠道配置,以及我实际踩过的坑。
先说结论:如果你有一台腾讯云轻量服务器,并且跟着下面的步骤走,从SSH登录到看到Control UI界面,确实可以控制在几分钟内完成。标题里说的"1分钟部署"指的是核心容器从拉取到启动的时间,前提是前置配置一次到位。下面我把每一步拆开讲,争取让完全没接触过云服务器的小白也能照着做下来。
1. 先搞清楚OpenClaw是什么,以及为什么它适合跑在云服务器上
1.1 OpenClaw是干什么的:一句话版本和十分钟版本
一句话版本:OpenClaw是一个开源的自主AI助手框架,你可以把它理解为"自带躯干和手脚的大模型"。它不只是聊天,而是能根据大模型的决策去调用工具、读取信息、执行任务,然后通过IM(即时通讯)渠道和你交互。
十分钟版本:传统的大模型部署(比如本地跑一个DeepSeek、Qwen)解决的是"模型怎么跑"的问题,但OpenClaw解决的是"模型怎么用起来"的问题。它内置了Agent循环(思考、调用工具、观察结果、再思考),还带了一个Control UI(控制面板),你可以通过网页查看当前Agent的状态、对话历史、Skill调用记录。更关键的是,它支持接入各种渠道——飞书、企业微信、Discord等,让AI助理长在你的聊天软件里。
1.2 "1分钟部署"不是噱头:部署链路里到底省掉了哪些步骤
很多教程喜欢把部署讲得很复杂,其实是把"部署"和"配置"混在一起了。OpenClaw的部署之所以能这么快,是因为它采用了容器化分发,镜像里把Node.js运行时、项目依赖、Control UI静态资源全部打包好了。你只需要做两件事:
- 有一条命令能把镜像拉下来并启动;
- 启动前把模型API的地址和密钥通过环境变量告诉它。
没有源码编译,没有手动装依赖,没有数据库初始化。对比一下传统部署流程,自己要把Node环境配好、npm install跑一遍、再配置数据库和反向代理,那确实要半小时起步。所以"1分钟"不是吹牛,而是容器化带来的红利。
那为什么建议用腾讯云而不是直接在本地电脑跑?最核心的原因是公网回调地址。OpenClaw要接入飞书这类IM平台,平台需要把一个事件回调URL指向你的服务,而云服务器自带公网IP,天然满足这个条件。如果用本地电脑,你得额外解决公网可达的问题,光这一项就能劝退大部分萌新。云服务器相当于帮你把最麻烦的网络环节提前解决了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手之前,先把腾讯云这台机器选对
2.1 服务器配置怎么选、地域怎么选
我在腾讯云上用的是轻量应用服务器,2核2G内存的配置。OpenClaw本身是Node.js写的,内存占用大头在Control UI和Agent运行时,实际跑下来空闲时内存大概在600MB到1GB之间,2G内存足够日常使用。如果你打算同时挂载多个本地模型(比如用Ollama跑量化版本),那就建议直接上4G内存,或者干脆用GPU实例。不过对于绝大多数"接一个大模型API"的场景,2核2G是最性价比之选。
地域选择上,初次体验建议直接选腾讯云的香港地域。原因有两个:第一,香港地域不需要进行域名相关的合规操作,买完就能用公网IP访问;第二,OpenClaw默认只走API调用,不涉及大规模数据传输,香港地域的网络质量对国内用户来说完全可以接受。如果你后续要绑定自己的域名并走80/443端口,那就要按云厂商的要求完成相关合规流程,这会额外花时间,萌新期可以先把这一步跳过去。
2.2 密钥登录、防火墙放行和Docker准备
购买服务器时,建议直接设置SSH密钥登录。用密码登录不是不行,但云服务器暴露在公网上,密码爆破是常有的事。密钥登录更安全,也省得记密码。创建好实例后,在控制台把密钥下载到本地,然后打开终端,执行:
bash复制chmod 400 /path/to/your-key.pem
ssh -i /path/to/your-key.pem root@你的服务器公网IP
登录上去之后,先做一件很重要的事:在腾讯云控制台的防火墙规则里,放行OpenClaw要用到的端口。默认的Control UI端口是18789,如果你打算在服务器上用curl测试Webhook,80端口也放行(或者用其他端口转发)。轻量服务器的防火墙在控制台"防火墙"页面里加规则即可,放行TCP 18789端口。这一步遗漏的话,后面浏览器访问Control UI会直接超时,而且排查起来很头疼。
2.3 首次远程连接后我建议你先做的三件事
第一件事:更新系统软件包。
bash复制apt update && apt upgrade -y
第二件事:检查是否已经安装Docker。腾讯云轻量应用服务器的基础镜像里有些已经预装了Docker,有些没有。执行:
bash复制docker --version
如果没有输出,安装Docker:
bash复制curl -fsSL https://get.docker.com | bash
systemctl enable --now docker
第三件事:确认磁盘空间。OpenClaw镜像本身不大,但Docker会把镜像层和容器日志存在/var/lib/docker下,长期跑的话日志可能会增长。执行:
bash复制df -h
如果根分区小于10G,建议后续加上日志轮转配置,这个我在后面会详细讲。
3. 完整部署命令拆解:从拉镜像到看到Control UI
3.1 核心docker run命令逐段解释
这是我实际在腾讯云上跑通的命令(镜像名以你拉取到的官方仓库为准,不同版本可能略有差异):
bash复制docker run -d \
--name openclaw \
--restart unless-stopped \
-p 18789:18789 \
-v $PWD/openclaw-data:/app/data \
-e OPENCLAW_AGENT_MODEL="deepseek-chat" \
-e OPENCLAW_AGENT_API_KEY="sk-你的密钥" \
-e OPENCLAW_AGENT_BASE_URL="https://api.deepseek.com/v1" \
openclaw/openclaw:latest
逐段解释一下:
-d:后台运行容器,终端不会卡住。--name openclaw:给容器起名,后面看日志、重启都方便。--restart unless-stopped:服务器重启后容器自动拉起,这个参数对长期运行非常重要。-p 18789:18789:宿主机18789端口映射到容器的18789端口。Control UI就跑在这个端口上。-v $PWD/openclaw-data:/app/data:挂载数据目录。OpenClaw会把配置、日志、会话记录写到这个目录,以后升级容器数据不丢。-e:环境变量配置。这里填模型相关的三个关键值。
3.2 模型接入:DeepSeek等API密钥怎么填
OpenClaw本身不内置模型,它需要对接一个模型服务。对国内用户来说,DeepSeek是目前性价比很高的选择,API地址是https://api.deepseek.com/v1,支持OpenAI兼容格式,所以OpenClaw可以直接对接。填环境变量时注意:
OPENCLAW_AGENT_MODEL填的是模型ID。DeepSeek的对话模型ID是deepseek-chat,不要填成"deepseek-v3"这类旧写法。OPENCLAW_AGENT_API_KEY填你在DeepSeek开放平台创建的API Key,以sk-开头。OPENCLAW_AGENT_BASE_URL填https://api.deepseek.com/v1,注意末尾的/v1不能省。
如果不用DeepSeek,也可以换成任何OpenAI兼容接口。比如你要接Ollama本地模型,BASE_URL填http://宿主机IP:11434/v1,MODEL填你本地跑的模型名(比如qwen2.5:7b)。后文进阶部分我会详细说。
3.3 启动日志、健康检查和"跑起来了"的判定标准
执行完docker run之后,用下面两条命令确认状态:
bash复制docker ps
docker logs -f openclaw
docker ps看状态是否为Up。docker logs看启动日志。正常情况下你会看到类似这样的日志输出:
code复制[init] Loading configuration...
[server] Control UI listening on http://0.0.0.0:18789
[agent] Connecting to model provider...
[agent] Model connected: deepseek-chat
看到Control UI listening和Model connected,就说明核心服务已经跑起来了。此时在浏览器地址栏输入http://服务器公网IP:18789,就能看到OpenClaw的Control UI界面。如果打不开,先检查腾讯云防火墙是否放行了18789端口,再检查docker ps容器有没有在运行。这一步是萌新最容易卡住的地方,九成是防火墙而不是程序问题。
4. 接入飞书:让AI助手真正能对话
4.1 为什么我建议直接用IM渠道而不是网页
只看Control UI的话,OpenClaw只是一个"能跑起来的系统",你还得手动在网页里发消息,这和使用体验是两回事。真正的价值在于把它接进IM工具,让它出现在你日常聊天的地方。飞书是目前体验比较好的渠道,创建应用、配权限都是官方开放的,不存在封号风险。相比之下,个人微信的机器人方案大多基于非官方协议,有封号风险,我不推荐在生产环境用。如果你的团队在用飞书或企业微信,优先走官方开放平台。
4.2 飞书自建应用的创建与权限配置
打开飞书开放平台,创建一个企业自建应用,然后依次做三件事:
- 在"凭证与基础信息"里拿到App ID和App Secret,这两个值后面要填到OpenClaw配置里。
- 在"权限管理"里开启机器人需要的权限。至少要加
im:message(读取消息)和im:message:send_as_bot(以机器人身份发消息),如果有图片、文件需求,再对应加上相关权限。权限添加后需要等待审核,一般企业自建应用秒过。 - 在"事件订阅"里配置回调地址。飞书要求你提供一个公网可访问的URL来接收事件回调,这个URL指向你的OpenClaw服务,格式一般是
http://服务器公网IP:18789/webhook/feishu。飞书会先发送一个URL验证请求,OpenClaw会自动处理验证,配置好之后点"保存"即可。
然后在OpenClaw的配置文件(挂载目录下的openclaw.yaml或config.json,具体以版本为准)里,把飞书的App ID、App Secret和回调路径填进去。不同版本配置字段名可能有一些差异,核心思路是告诉OpenClaw"飞书的凭证是什么、回调路径是哪个"。保存后重启容器:
bash复制docker restart openclaw
启动完成后,在飞书里搜索到你创建的这个机器人,私聊发一句"你好",如果OpenClaw回复了,恭喜你,整个部署链路已经完整打通。
4.3 测试对话的完整检查顺序
如果发送消息后没有回复,我建议按下面的顺序排查,而不是先怀疑配置写错了:
- 在飞书机器人聊天窗口看一下是否有"消息已送达"的提示,如果没有,说明机器人并没有被正确激活,回到权限管理检查。
- 在服务器上看OpenClaw日志有没有收到Webhook。执行
docker logs openclaw,刷新日志里如果有webhook received之类的记录,说明飞书回调已经到达服务端。 - 如果日志里显示收到了消息但Agent没回,多半是模型接口的问题,比如API Key额度不足、模型ID填错。
5. 萌新最容易踩的5个坑和排查链路
5.1 "Control UI did not start":大概率不是服务挂了
很多人在日志里看到Control UI did not start就慌了,以为OpenClaw凉了。实际上,这个提示通常发生在端口被占用或者Control UI组件启动超时时。排查链路如下:
bash复制# 第一步:确认容器状态
docker ps
# 第二步:看完整日志
docker logs openclaw --tail 200
# 第三步:确认端口是否被占用
ss -lntp | grep 18789
如果端口被宿主机上的其他进程占用,把3000之类的其他端口映射到容器端口即可,比如-p 18000:18789。还有个常见情况:旧版本镜像里Control UI和Agent是分开两个进程,Agent先启动了,UI组件启动稍慢,日志里短暂出现这个提示,过几秒UI照样能访问。所以看到这个报错先别急着重启,等10秒再访问页面。
5.2 "unknown model: deepseek":模型ID与Provider不匹配
这是我见过最多的报错,没有之一。报错信息类似:
code复制agent failed before reply: unknown model: deepseek
这个报错的核心原因是:填的模型ID对应的Provider没有正确匹配。OpenClaw对接模型时,会根据BASE_URL和模型ID的组合来决定用哪套调用规范。比如DeepSeek的接口兼容OpenAI格式,但如果你在OPENCLAW_AGENT_MODEL里填了deepseek而不是deepseek-chat,服务端就找不到对应模型。排查时记住一个原则:模型ID要以API提供商文档为准,不是你想叫什么就叫什么。DeepSeek的模型ID在它们的开放平台文档里有明确标识,照抄即可。
5.3 Windows下oneclaw node runtime not found:换Docker环境
这个报错我在Windows本机部署时踩过。出现oneclaw node runtime not found,一般是因为OpenClaw在Windows上需要通过原生Node运行时启动,而你的环境变量或Node版本不对,或者安装路径里有中文/空格。我的建议是:Windows用户不要试图在本地裸机部署,直接用Docker Desktop或者直接上云服务器。OpenClaw的官方支持重点基本都放在Linux容器环境,Windows裸机部署的兼容性问题会浪费你大量时间。其实腾讯云部署的好处就在这——服务器环境是标准的Ubuntu,没有路径、权限、运行时这些乱七八糟的问题。
5.4 内存不足与容器被OOM Killer杀掉
2G内存的服务器跑OpenClaw,短时间没问题,但如果Agent循环里加载的模型上下文变长,Node进程内存可能涨到1.5G以上,这时系统可能会杀掉容器。现象是docker ps显示容器退出了,docker logs里没有明显的错误,因为是被内核直接杀掉的。查看方法:
bash复制dmesg | grep -i oom
如果确认是OOM,有两个解决方向:一是给容器设置内存上限,让Node在接近上限时自己崩溃而不是拖垮主机:
bash复制docker run -d --memory=1.5g ...
二是给系统增加Swap。轻量服务器默认没有Swap,手动建一个2G的swap文件可以显著缓解内存压力。
5.5 通用排查思路:看日志三步法
不管遇到什么奇怪问题,我强烈建议萌新养成"先看日志再搜索"的习惯。很多报错看似不同,根因就那么几个。我的三步法:
- 看启动日志(
docker logs openclaw)确定服务有没有起来。 - 看运行时日志(
docker logs -f openclaw)复现问题,发一条消息观察输出。 - 看挂载目录下的日志文件(
openclaw-data/里有没有log文件)排查慢性问题。
九成问题在日志里都有线索,比去搜索引擎复制粘贴报错信息高效得多。
6. 部署完之后的进阶配置:Skill、本地模型与长期维护
6.1 最简单的Skill编写套路:让OpenClaw会写小说、会调API
OpenClaw真正厉害的地方是Skill机制。简单理解,Skill就是给Agent预设好的"能力包":告诉它遇到什么任务该调用什么工具、按什么步骤执行。热搜里有人问"openclaw如何编写skill接入api""openclaw写小说",这两个需求本质上是一样的——都是通过Skill给Agent扩展一个自定义能力。
一个Skill通常包含两部分:描述文件(告诉Agent这个能力是干什么的)和执行脚本(真正干活的东西)。以"写小说"为例,描述文件里写明触发条件,比如"当用户要求创作故事、写小说时,使用本Skill",执行逻辑则告诉Agent先确定题材、角色、世界观,然后按章节生成。写完之后把Skill放到挂载目录的skills文件夹下,在Control UI里刷新即可生效。
接API也是同一套逻辑。比如你想让OpenClaw查询内部系统的订单状态,就写一个Skill,描述里写"当用户询问订单状态时调用订单查询API",脚本里定义好请求地址、鉴权和返回格式。Agent看到符合条件的需求时,会自动加载这个Skill并执行,这就是"让AI自己调用API"的完整链路。
6.2 接Ollama本地模型、NVIDIA NIM这些本地推理服务
除了DeepSeek这类云端API,OpenClaw也能接本地模型服务。热搜里的"ollama本地部署""openclaw配置nvidia nim"都是这个方向。如果你有一台带GPU的机器或者已经跑着Ollama,可以在Ollama里先拉一个模型:
bash复制ollama pull qwen2.5:7b
然后启动Ollama的兼容接口(Ollama默认监听11434端口,也提供OpenAI兼容接口),再把OpenClaw的环境变量改成:
bash复制-e OPENCLAW_AGENT_MODEL="qwen2.5:7b" \
-e OPENCLAW_AGENT_BASE_URL="http://<你的机器IP>:11434/v1" \
-e OPENCLAW_AGENT_API_KEY="ollama"
注意,如果Ollama和OpenClaw不在同一台机器上,需要把Ollama的监听地址改成0.0.0.0,同时确保防火墙放行11434端口。本地模型的好处是数据不出内网、没有API费用,代价是生成速度和效果会弱于云端大模型。我的建议是:生产环境用云端API保证效果,研发测试阶段可以用本地模型避免烧钱。
6.3 配置备份、升级与长期稳定运行的三个习惯
容器部署最大的好处是升级方便,但也意味着你要养成三个习惯:
第一,定期备份挂载目录。OpenClaw的会话数据、Skill、配置都在openclaw-data目录里,定期把这个目录打个包传到对象存储或者本地,就能防止误删和异常丢失。
第二,升级前先拉镜像再替换容器:
bash复制docker pull openclaw/openclaw:latest
docker stop openclaw
docker rm openclaw
docker run -d ...(使用同样的参数重新创建)
因为数据目录是挂载出来的,升级容器不会丢数据。但升级前还是建议看一眼官方更新日志,有时新版本会调整配置字段,不兼容旧配置。
第三,日志轮转一定要配。Docker默认会把所有stdout日志堆到宿主机的json-file里,跑久了可能占满磁盘。配置一个全局日志上限:
bash复制cat > /etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
}
}
EOF
systemctl restart docker
注意重启Docker会重启所有容器,所以这个配置最好在部署OpenClaw之前就配好。
最后一个经验分享:部署OpenClaw这件事,技术上真的不难,难的是把"能跑"变成"好用"。我在实际跑的过程中发现,最值得投入时间的不是反复调整部署参数,而是把Skill写好、把接入渠道配顺、把模型选对。先把基础链路跑通,再琢磨更多玩法,你会慢慢体会到这个项目真正的潜力。
