ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

云服务器上部署OpenClaw,打造7×24小时在线的AI私人助手

云服务器上部署OpenClaw,打造7×24小时在线的AI私人助手

你有没有过这种时刻:临时想查个东西,手机解锁、打开App、输入问题、等回复,一整套流程下来,自己都忘了刚才想干什么。我折腾OpenClaw之前,总觉得大模型挺好用,但每次都缺一个随手能喊出来的入口。后来我换了个思路,把OpenClaw部署到云服务器上,做成一个7×24小时在线的AI私人助手,随时通过消息窗口发一句话就能得到响应。这篇文章记录的就是整个部署过程,从服务器选购、基础环境初始化,到跑通第一条消息,再到保障它长期稳定运行的所有细节。适合刚接触Linux、想自己动手搭一个专属AI助手的人,照着做完全能复现。

1. 为什么用OpenClaw搭私人AI助手

1.1 从真实需求倒推方案选型

说实话,我一开始也动过直接用大模型官方App的念头。装个应用、充个值、打开就能聊,体验确实流畅。但真正用了两周之后,几个硬伤越来越明显:第一,消息是碎片化的,今天想问的问题散落在不同对话里,根本没办法沉淀和回顾;第二,我想让AI在特定时间主动提醒我,比如每天早上九点把当天天气和待办事项推过来,官方App做不到;第三,数据全部留在别人服务器上,有些工作相关的信息我始终不太敢往上放。

所以我的核心需求其实只有三条:随时能找它、它能主动找我、数据尽量可控。OpenClaw这类开源AI助手框架,正好完整覆盖了这三件事。它本质上是一个运行在你自己的服务器上的消息调度中枢,接上大模型API就有了对话能力,再接上消息渠道就有了交互入口,再配上定时任务就有了主动性。和直接用大模型App相比,自建方案牺牲了一点开箱即用,换来的是完全可控、可扩展、可私有化。

我把两种方案放在一起对比过,思路大概是这样:

对比项直接用大模型App自建OpenClaw
消息沉淀各对话互相孤立本地存储,可检索可备份
定时/主动推送基本不支持秒级定时任务,任意时间推送
接入渠道只有官方App企业微信、钉钉、网页端等
数据可控性在厂商服务器在自己服务器
部署难度零门槛需要基础Linux/docker知识
维护成本无偶尔看日志、更新版本

对我来说,切换成本很值。这套方案折腾一次,后面长期受益,尤其是当你长期稳定运行之后,你会越来越离不开这种"发一句话就有响应"的入口。

1.2 OpenClaw是怎么跑起来的

在动手之前,建议先花五分钟把这个框架的运行逻辑想清楚,后面配置的时候就不会一头雾水。OpenClaw的整体架构可以拆成四块:

  • 核心引擎:负责理解指令、调度任务、管理会话状态,相当于"大脑中枢";
  • 渠道适配器:负责把不同聊天工具的消息翻译成统一格式,这是它能接企业微信、钉钉等多种渠道的原因;
  • 模型接入层:统一封装大模型API调用,让你可以随时换模型服务商,不需要改业务代码;
  • 存储层:保存会话记录、任务配置、用户资料,保证重启后状态不丢。

打个不太严谨但很好理解的比方:OpenClaw像你雇的一个24小时值班助理,他坐在云服务器里,通过企业微信、钉钉这些"前台窗口"跟你对话。遇到不懂的问题,他会打电话给外面的"专家团队"(大模型API)获取答案,再把结果转述给你。你给他的指令、他收到的信息,全都记在工位上(本地存储),每天下班也不用清空。

想跑通这套逻辑,前提条件就两个:一个稳定的公网环境,让消息渠道能随时找到它;一个不让进程随便死掉的运行环境,保证凌晨三点那条定时提醒能准时发出去。这两个前提,恰恰是云服务器天生的优势,也是我为什么没有在自家旧电脑上折腾的原因。家里那台机器偶尔断电、断网,重启后还得人肉点一下启动脚本,根本不满足"7×24小时"这个底线。

2. 部署前的准备工作

2.1 云服务器选型:不追求高配,追求稳定

我用的这台服务器是2核4G内存、40G SSD、带宽选了5M,系统用的Ubuntu 22.04。这个配置可能比你预想的低——其实非常保守。为什么不需要高配?因为OpenClaw本身只是个调度中枢,真正的AI计算发生在云端的大模型API那边,服务器只负责转译请求、管理队列、存聊天记录,占用的CPU和内存都极低。除非你打算在服务器本地跑开源大模型,否则完全没必要碰GPU主机。预算紧张的话,1核2G也能勉强跑起来,但系统内存余量太小,日志一多容易把内存或磁盘打满,建议至少给2G。

选服务器的时候有几个容易踩的坑,先写在前面:

  • 地域别乱选。如果你主要在国内使用,就选国内主流云厂商的国内节点,消息渠道的回调延迟低、链路稳定;选海外节点虽然有时便宜,但回调不稳定,排查起来非常头疼。
  • 带宽计费模式优先选"固定带宽",不要用流量计费,否则有人在深夜触发大量扫描请求,流量账单可能让你肉疼。
  • 登录方式首选密钥对,而不是密码。云厂商控制台创建实例时一般都能直接生成密钥对,这比事后手动改安全得多。
  • 系统镜像用Debian系(Ubuntu/Debian)最省事,后面所有依赖用apt一把梭完事,没必要为难自己去用不熟的发行版。

2.2 登录与基础环境初始化

服务器创建完成之后,第一件事是SSH登录。假设你的服务器公网IP是123.123.123.123,在本地终端里执行:

ssh -i ~/.ssh/your_key.pem ubuntu@123.123.123.123

登录成功后,我习惯先把系统软件源更新一遍,再装几个基础工具。这一步看似简单,但在干净系统上做一次,能帮你省掉后面很多莫名的兼容问题:

sudo apt update && sudo apt upgrade -y sudo apt install -y curl git vim ca-certificates gnupg

接着安装Docker。如果决定用容器部署,这是最省心的一步。官方提供的安装脚本一条命令就能完成,在国内网络环境下执行稍慢,但通常都能顺利通过:

curl -fsSL https://get.docker.com | bash sudo systemctl enable --now docker

安装完验证一下docker版本,能输出版本号就说明环境就绪。我为这台服务器单独创建了一个普通用户claw,日常操作都用这个用户执行,root只在安装系统级软件时用sudo。这个习惯能有效防止在root权限下手滑做出不可逆操作——比如误删目录、改错权限。下面所有部署步骤,我都会以claw用户的视角来写。

3. 一步步部署OpenClaw核心实操

3.1 方案一:Docker容器部署

OpenClaw官方仓库通常都提供Docker镜像,这也是我最推荐的部署方式。原因很简单:依赖全在镜像里,升级是拉一个新镜像重建容器,回滚是指定旧tag重跑,环境不会越搞越脏。

先建一个工作目录,准备好docker-compose编排文件。下面是我实际使用的配置模板,里面的镜像名和路径以你手上仓库的README为准,整体结构可以直接照抄:

# docker-compose.yml version: '3.8' services: openclaw: image: your-registry/openclaw:latest container_name: openclaw restart: unless-stopped ports: - "8080:8080" environment: - TZ=Asia/Shanghai - OPENCLAW_CONFIG_DIR=/data volumes: - ./data:/data logging: driver: json-file options: max-size: "20m" max-file: "5"

我特意加了TZ环境变量,设置成Asia/Shanghai。这个看着不起眼,但不设置的话,定时任务和日志时间会默认按UTC算——你写早上九点的定时提醒,它八点就给你推出来,你排查半天才发现是时区问题。日志限制也一定要加,OpenClaw会打印每条消息的处理过程,时间长了日志文件能悄悄涨到几个G,把磁盘塞满。

配置写好后,启动容器前先在data目录下手动创建config.yaml,把大模型API信息填进去。我建议API Key这类敏感信息用环境变量引用,不要直接写死在配置文件里。启动命令很简单:

docker compose up -d docker compose logs -f

看到日志里出现"service started"或类似的关键字,说明核心引擎已经跑起来。这时候先别急着接渠道,优先测试API连通性。

3.2 方案二:源码部署

如果你想做二次开发,比如改OpenClaw的插件逻辑、在调度层加自己的过滤器,源码部署会更合适。Docker镜像里改代码不方便,源码方式改完直接重启服务就能生效。

我以Python生态为例描述这个过程,如果你拿到的项目是Node.js或Go写的,思路完全一样。

git clone https://github.com/your-org/openclaw.git cd openclaw python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp config.example.yaml config.yaml vim config.yaml

配置改完之后,用systemd保证它在开机时自动启动、崩了自动拉起。在/etc/systemd/system/openclaw.service里写入:

[Unit] Description=OpenClaw AI Assistant After=network-online.target Wants=network-online.target [Service] User=claw WorkingDirectory=/home/claw/openclaw ExecStart=/home/claw/openclaw/.venv/bin/python main.py Restart=always RestartSec=3 [Install] WantedBy=multi-user.target

然后执行:

sudo systemctl daemon-reload sudo systemctl enable --now openclaw systemctl status openclaw

这里解释一下Restart=always和RestartSec=3的含义:前者告诉systemd,不管进程是异常退出还是被kill,都给我拉起来;后者控制重启前的等待时间,防止程序启动失败后陷入"疯狂重启"的循环。日志排查用journalctl -u openclaw -f就能实时看到输出。

两种方式的取舍我再直接一点:只是日常使用,选Docker;打算改代码,选源码。如果你的服务器磁盘很紧张,源码方式占用空间更小,但依赖管理需要自己维护。我自己是Docker派,因为升级实在太省事了。

3.3 接入大模型API:让AI真正开口说话

框架跑起来之后,最关键的配置就是接大模型API。这一步相当于给上面说的"值班助理"接通了"专家团队"的热线。

我建议你选择国内合规可用、且API兼容主流开放协议格式的服务商,这样OpenClaw的模型接入层基本不用改,填上base_url、api_key、model_name就能用。无论最后选哪家,有几个通用原则:

  • API Key只存在服务器环境变量或配置文件中,绝不提交到任何Git仓库。
  • 模型名称要填对方API文档里能查到的准确名称,随便填一个不存在的别名,会直接报model not found。
  • 先建一个有限额的API Key,设好月度用量上限,防止意外超支。有些服务商支持受限Key,设个上限比自己记账靠谱得多。

config.yaml里模型部分大概是这样的形态:

model: provider: openai-compatible base_url: https://your-api.example.com/v1 api_key: ${OPENCLAW_API_KEY} model_name: your-model-name temperature: 0.7 max_tokens: 2048

temperature是生成回复的随机性参数,范围0到2。做问答助手,我会设0.7左右,既保持稳定又不会太机械;如果用来写文案、写段子,可以调到1.0以上,让回复更有发散性。max_tokens控制单次回复的最大长度,不用调太大,2048对日常对话完全够用,调太大会拖慢响应时间、浪费调用额度。

配置完成后,在OpenClaw的网页管理端或直接发一条测试消息,看能不能收到模型回复。这一步通了,整个链路的核心就打通了。

4. 接入消息渠道,让AI真正可用

4.1 优先用官方机器人接口,别碰非官方协议

OpenClaw的渠道适配器是它最吸引人的部分,但渠道接入时一定要擦亮眼睛。市面上有一些开源工具通过非官方协议模拟个人微信登录,账号行为特征一旦异常,随时可能被限制,非常不值得。我的建议很明确:优先使用服务方官方开放的机器人能力。

  • 企业微信群机器人:安全稳定,支持Webhook和主动推送,个人和团队都能用。
  • 钉钉自定义机器人:支持加签校验,能收到@消息,配置也直观。
  • 网页管理后台:OpenClaw自带,适合配置、测试、查看任务状态,不用另外申请权限。

我首选企业微信,因为回调配置最直观,而且不需要走复杂审批,创建一个群聊就能把机器人拉进去试用。以企业微信为例,在群里添加一个机器人后能拿到一个Webhook地址。把Webhook地址填到OpenClaw的渠道配置里,再开启接收消息的回调模式,填上回调URL和Token。回调URL必须是云服务器上能公网访问的地址,这就是为什么前面反复强调公网IP的重要性。

4.2 配置回调与基础指令

渠道配置里有个细节很容易踩坑:回调URL填http还是https、端口是多少,一定要和docker-compose里映射的端口对应。我曾经把回调URL写成https,但服务器上其实没配证书,回调一直失败,日志里只有一条摸不着头脑的握手异常。改成http之后,五分钟内就收到了测试消息。如果你打算长期使用,还是建议通过反向代理加证书把公网通道升级成https,否则消息内容是明文传输的。

OpenClaw支持自定义指令,相当于给预置了"成语手册"。我一开始就把最常用的几个指令写好:

commands: - trigger: /todo action: add_todo - trigger: /weather action: query_weather - trigger: /daily action: send_daily_report

这样我在群里发一句/todo 买牛奶,它就会把待办事项存下来;发/weather,它走天气插件查完直接返回。指令系统的价值在于,它让大模型的对话能力和工具能力真正合在了一起,而不是做一个只能陪聊的"复读机"。

5. 7×24小时稳定运行的保障手段

5.1 进程守护:让程序崩了自动复活

无论用Docker还是systemd,第一步都是保证进程不会"死得悄无声息"。Docker方式里,restart: unless-stopped的含义是:容器异常退出时自动重启,但如果你手动stop了它,系统会尊重你的选择,不再自动拉起。这个策略很适合绝大多数场景。

不过仅靠容器重启还不够。我遇过一次容器看着是up状态,但内部线程死锁,消息发过去半天没反应的情况。这种"活着但没反应"的假死最坑人。后来我写了一个简单的健康检查脚本,每两分钟探一次端口,连续探测失败就重启容器,再把异常记录写到日志里:

#!/bin/bash # /home/claw/healthcheck.sh if ! curl -sf http://127.0.0.1:8080/health > /dev/null; then echo "$(date '+%Y-%m-%d %H:%M:%S') health check failed, restarting" >> /home/claw/healthcheck.log docker restart openclaw fi

再用crontab挂上去:

*/2 * * * * /home/claw/healthcheck.sh

这属于轻量级保命手段。如果对监控有更高要求,可以把健康检查结果上报到一些免费监控平台,配置好之后,晚上基本能睡个安心觉。

5.2 日志查看与异常排查

日志是7×24服务里最宝贵的排障线索。Docker方式:

docker logs -f openclaw docker logs --tail 200 openclaw

systemd方式:

sudo journalctl -u openclaw -f sudo journalctl -u openclaw --since "1 hour ago"

我自己的习惯是,每次更改配置后,先清掉日志再看新输出,避免被旧内容干扰。比如docker logs --since 1m openclaw只显示最近一分钟的日志,配合-f实时看,能快速定位"配置改完到底有没有生效"。

还有一个容易忽略的点:磁盘空间。日志轮转配置我在前面已经给了,但建议定期执行df -h看一眼磁盘使用率。OpenClaw的data目录里会存会话记录,时间久了体量必然膨胀,最好在运维计划里加一个每月备份并清理旧数据的任务,别等塞满了才临时抱佛脚。

5.3 安全加固清单

云服务器暴露在公网上,安全这块我列了个清单,每一条都是实际做过或者吃过亏总结出来的:

  • SSH登录用密钥,禁用root直接登录。修改/etc/ssh/sshd_config里的PermitRootLogin为no、PasswordAuthentication为no,改完重启sshd。
  • 安全组只放行必要端口。网页管理端如果没有公网访问需求,就把它的端口只允许你本地IP访问,或者干脆只绑在127.0.0.1,用SSH隧道访问。
  • 给服务器装fail2ban。它会对多次登录失败或端口扫描的IP自动封禁,安装配置都很简单:
sudo apt install -y fail2ban sudo systemctl enable --now fail2ban
  • API Key不要出现在任何代码仓库、聊天截图、公开配置里。我在各类平台见过太多把Key泄露到配置文件里的案例,泄露之后一夜之间账单爆掉,非常痛。
  • 数据目录定期备份。OpenClaw的配置文件和会话数据都在data目录,用tar打包传到独立存储就行,不一定要用复杂工具,关键是"有备份"这个动作本身。

6. 常见问题与排查技巧实录

6.1 高频问题速查表

我把实际运行中碰到的高频问题整理成了一张速查表,建议直接存下来,遇到问题先查一遍再翻日志。

症状可能原因排查方向解决参考
发消息没有任何回复渠道回调没配置好检查回调URL、Token、端口映射用webhook测试工具直接模拟回调请求
回复特别慢大模型API本身慢或触发限流查模型服务商控制台的调用记录换更快的模型、调低max_tokens
定时任务不触发时区不对执行timedatectl检查系统时区容器或服务设置TZ=Asia/Shanghai
容器反复重启配置错误或API Key无效用docker logs查看启动时报错修正配置,确认Key有效
磁盘被日志占满日志轮转没生效执行df -h查看使用率加上logging配置,清理旧日志
外网访问管理端超时安全组没放行查云平台控制台安全组规则只放行必要IP和端口

6.2 我踩过的一些坑

很多坑并不是项目本身的问题,而是"没仔细看配置就开始跑"造成的。举三个印象最深的例子。

第一个坑是环境变量没生效。我在docker-compose里写了OPENCLAW_API_KEY,但OpenClaw读的是配置文件里的同名引用,两者没对上,测试时一直报401。排查了二十分钟才发现,原来启动命令里根本没有把env_file加载进去。记住一个原则:改完环境变量或配置文件之后,一定要用docker compose down加docker compose up -d重建容器,而不是只restart。环境变量在容器创建时就固定了,restart不会重新读取。

第二个坑是云平台安全组和系统防火墙的"双保险"问题。有次我在云厂商的安全组里放行了8080端口,但系统里装了ufw忘了放行同端口,外部怎么都连不上。以后排查网络问题,先看云平台安全组,再看服务器本机防火墙,两边都对上了才通。

第三个坑和主动推送有关。OpenClaw主动推送消息时,如果目标企业微信机器人的Webhook地址暂时不可达,消息是不会自动重发的,丢掉就没了。我后来在定时任务里加了失败重试机制,把没发出去的消息重新入队,才算彻底解决。

7. 进阶玩法:把AI助手从"能用"变成"好用"

7.1 定时日报与主动推送

当OpenClaw稳定运行一个星期后,你一定会想让它做更多事。我最满意的功能是每天早上九点的日报推送:先读取前一天记录的待办,再调天气接口,最后结合模型生成一段简洁的当日计划。这个功能的本质就是定时任务加多个插件的编排。

配置上不复杂,在任务定义里声明cron表达式和动作就行。比如0 9 * * *就是每天早上九点触发。我建议新手先跑一个最简单的例子,比如每小时推送一次当前时间,确认能触发后再慢慢加插件。一上来就做复杂的多插件编排,出了问题反而分不清是哪一环挂了。

7.2 多模型路由与个人知识库

OpenClaw支持配置多个模型,可以根据任务类型走不同模型。日常问答用响应更快的模型,长文档摘要用能力更强的模型,定时提醒这种短消息能用便宜模型就尽量不用贵的。在模型接入层配置多个provider之后,给每个任务指定model_name就行。

如果你想让它真正了解你的信息,可以挂一个个人知识库。最简单的做法是把常用资料整理成文本,通过OpenClaw的索引功能导入,之后问相关问题时,它会先检索再回答。这个玩法前期上手慢一点,但收益最大,等于把自己的私有知识和AI的通用能力组合在了一起。

我个人用下来的体会是,进阶功能不用一次性全部加上。先让基础链路稳定跑几周,等对日志、任务、渠道都有了感觉,再按需扩展。毕竟7×24服务的核心指标不是功能多,而是不乱、不挂、随时找得到人。希望这篇记录能让你少踩几个坑,早点拥有自己的AI私人助手。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进