
2026年刚开始我就把折腾了大半个月的 OpenClaw社区里更多人还习惯叫它 Clawdbot正式迁到了阿里云 ECS 上。起因很朴素本地那台旧笔记本上跑的 agent 服务出差一周断了三次Windows 的 WSL2 环境还时不时弹“无法安全验证”的红字每次开会演示前都要先祈祷它别掉链子。换到阿里云一键部署之后情况立刻简单了——用创建实例页面里的“自定义数据”塞一个部署脚本十几分钟后公网地址就能打开一个完整可用的 OpenClaw再配合阿里云百炼的 Qwen 模型和自研的 Skill 技能包整个方案才算真正落地。这篇文章把这次迁移的完整过程整理出来包括部署脚本的每一段说明、Skill 开发的完整流程、百炼 API 的接入方式以及上线后踩过的坑。无论你是刚接触 Agent 编排的新手还是已经在本地跑过想搬迁上云的老手照着走一遍都能少绕不少弯。1. 为什么我把 OpenClaw 从本地搬到了阿里云1.1 本地部署的痛点WSL2、功耗与稳定性先说本地方案的真实问题。官方文档对 Windows 用户主推 WSL2但很多人第一次装 OpenClaw 就卡在“无法安全验证 WSL2 环境”这一步。你按提示打开 PowerShell 运行wsl --status大概率会看到默认版本还停在 WSL1或者内核版本过旧。常规修复路径是wsl --set-default-version 2之后手动更新内核听起来不难可一旦公司电脑有组策略限制、虚拟化平台没开、或者 Windows 家庭版缺组件这个排查过程能被拖到半天以上。我当时就在这一步反复折腾最后索性放弃 Windows 本地方案。就算 WSL2 装好了本地跑也有天然短板笔记本合盖就断、休眠唤醒后 Docker 容器起不来、出差时家里那台机器没人看管。OpenClaw 这类 agent 服务的价值恰恰在于“常驻在线”——你随时可以通过 Web 界面或消息平台向它派活它也能按 Skill 设定定时执行任务。一台随时可能休眠的个人电脑根本撑不起这个使用场景。1.2 云端部署解决的核心问题换到阿里云之后上述问题几乎全部消失。ECS 实例是 7x24 小时运行的不依赖本地网络和电源自带公网 IP手机、办公室电脑、家里平板都能直接访问同一个 Web 控制台数据都落在云盘上skill 目录和配置文件只要定期打包备份就不会因为本地硬盘损坏而前功尽弃。还有一点被很多人忽略OpenClaw 需要调用模型 API本地部署时如果网络环境波动API 请求经常超时重试agent 的链路稳定性会直线下降。而 ECS 实例本身就在阿里云机房里访问阿里云百炼的模型接口走的是内网级别的低延迟链路抖动明显小于家用宽带任务执行的成功率高出一截。1.3 成本明细免费试用与 99 元续费方案费用这块我帮大家算过一笔账。阿里云对新用户有免费的试用实例通常是一台 2 核 2G 的轻量或 ECS时长一个月左右跑 OpenClaw 基础版问题不大。试用到期后如果不续数据会释放所以更推荐的是新用户专享的那档优惠套餐2 核 2G 或 2 核 4G一年价格大概在 99 元级别约等于一天三毛钱比一杯咖啡便宜得多。2 核 2G 够不够用如果只跑基础消息收发、Skill 调用和轻量脚本答案是够的。但要注意OpenClaw 本身是 Node.js 服务再叠加系统进程内存长期徘徊在 70% 以上遇到定时任务并发时就可能触发 OOM。我的建议是预算允许直接上 2 核 4G省心如果只有 2G务必在部署脚本里加 swap 文件兜底后面第 6 节会详细说。2. 阿里云 ECS 环境准备一次配到位的初始化2.1 规格与镜像是选对的第一步创建实例时有两件事值得提前定好否则后面返工很麻烦。第一是地域选离你主要使用场景近的区域即可国内访问都挺快我选的华东地区延迟在 20ms 以内。第二是操作系统镜像优先选 Ubuntu 22.04 LTS原因很实际OpenClaw 及其依赖组件的安装文档大多以 Ubuntu/Debian 为例apt 源里的软件包版本新遇到问题社区回答也多。阿里云自带的 Alinux 系列其实也能跑但很多第三方脚本默认判断 Debian 系偶尔会多出一些兼容性小问题新手没必要在镜像上给自己添堵。2.2 Node.js LTS 的安装选择OpenClaw 是 Node.js 生态的项目运行环境需要 Node.js 20 以上的 LTS 版本。这里有个细节Ubuntu 自带 apt 源里的 nodejs 往往不是最新 LTS直接apt install nodejs装完版本可能只有 18启动 OpenClaw 时会直接报错。我建议用 NodeSource 官方源或者 nvm 来装。用 nvm 的好处是可以随时切换版本而且不需要 sudo 权限后续升级 OpenClaw 也干净。安装命令就三行curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20装完验证一下node -v只要输出 v20.x 就没问题。npm 会随着 Node 一起装上同样确认npm -v能正常输出。2.3 安全组与端口规划这一步是新手最容易忽略的。实例创建之后OpenClaw 的 Web 界面默认监听某个本地端口按当前版本惯例通常是 3000但你在浏览器里访问公网 IP 加端口却打不开——十有八九是安全组没放行。阿里云的安全组相当于云防火墙所有入方向流量默认拒绝。需要手动添加规则端口用途建议22SSH 远程登录限制来源 IP别对 0.0.0.0/0 全开3000OpenClaw Web 界面如果后面接 SSL可以只对内网开放80 / 443Nginx 反代与 HTTPS上线必备我自己踩过一次坑当时只放行了 22 和 3000装上 Nginx 做 SSL 后发现 80 端口一直不通排查了半天才想起来安全组规则没加。记住一个顺序云上改端口、云下改安全组两边都要检查。3. 一键部署脚本拆解裸机到可用的 12 分钟3.1 把部署脚本放进 user-data阿里云 ECS 创建页面里有一个“自定义数据”选项也就是常说的 user-data。实例首次启动时系统会自动以 root 身份执行这段脚本。所谓“一键部署”本质就是把环境准备、依赖安装、服务配置全部写进这个脚本然后让机器第一次开机就自己搭好整套环境。这里有个细节user-data 脚本在云服务器上首次启动时执行执行过程可能耗时几分钟期间你 SSH 登录进去会看到系统还在跑初始化任务。不要急着反复重启给它 5 到 10 分钟。脚本是否执行完可以通过/var/log/cloud-init-output.log查看完整日志这是排查部署失败的第一现场。3.2 user-data 脚本逐段说明下面是我实际用过并精简过的部署脚本按社区通用做法整理。直接复制时记得把版本号和占位符替换成你要装的版本#!/bin/bash set -e # 1. 系统基础更新 apt-get update -y apt-get upgrade -y # 2. 安装基础工具 apt-get install -y git curl wget unzip tar # 3. 安装 Node.js 20 LTSNodeSource 方式 curl -fsSL https://deb.nodesource.com/setup_20.x | bash - apt-get install -y nodejs node -v npm -v # 4. 创建运行目录并安装 OpenClaw mkdir -p /opt/openclaw cd /opt/openclaw npm install -g openclawlatest openclaw --version # 5. 初始化配置目录 mkdir -p /opt/openclaw/skills openclaw init # 6. 创建环境变量文件 cat /opt/openclaw/.env EOF OPENCLAW_MODEL_PROVIDERopenai-compatible OPENCLAW_MODELqwen-plus OPENAI_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1 OPENAI_API_KEYsk-改成你的百炼APIKey EOF # 7. 防火墙放行Ubuntu 默认 ufw 未启用这步仅作兜底 ufw allow 3000/tcp || true逐段解释一下我的设计意图。第 1、2 步是把系统基础打牢set -e保证任一步出错脚本立即停止避免带着残缺环境继续往下走。第 3 步用 NodeSource 而不是 apt 默认源原因上面说过版本可控。第 4 步是核心安装OpenClaw 以 npm 全局包的形式安装后续升级也直接用同一条命令。第 5 步里openclaw init会生成默认配置文件和目录结构这是很多人容易漏掉的一步——直接装完就启动会发现连配置文件都没有。第 6 步把模型接入信息预先写好这样服务首次启动时就能直接对话不用再手动补环境变量。3.3 openclaw.json 核心字段解读初始化之后会生成 openclaw.json这是整个服务的总配置。我挑几个关键字段说明{ server: { port: 3000, host: 0.0.0.0 }, skills: { directory: /opt/openclaw/skills }, channels: { web: { enabled: true } } }server.host记得设成0.0.0.0否则服务只监听本机回环地址公网访问直接拒绝。skills.directory指向你的技能目录这是第 4 节要讲的重点路径一旦写错之后放进去的 Skill 不会被识别。channels.web打开 Web 控制台日常管理全靠它。有一个经验之谈配置文件的字段名在不同小版本之间偶有调整如果你照着旧教程写完后启动报“未知字段”优先查看该版本自带的配置示例文件通常就在安装目录的config子目录下。3.4 部署后的验证清单脚本跑完不是结束我习惯按顺序跑一遍验证清单SSH 登录后执行openclaw --version确认版本号正常。执行curl -I http://127.0.0.1:3000看本地是否返回 HTTP 响应。在本地电脑浏览器访问http://公网IP:3000确认能打开控制台。在控制台发送一条简单消息确认模型 API 能正常回话。如果走到第 3 步就打不开先回安全组检查如果第 4 步没反应检查环境变量里的 API Key 和模型名。这两类问题占整个部署失败原因的八成以上。4. Skill 机制与集成实操从会聊天到会干活4.1 Skill 的本质SKILL.md 与可执行资产聊到 Skill先要纠正一个常见误解Skill 不是传统意义上的“插件”也不是一段提示词。它是一个以SKILL.md为入口的完整能力包里面可以包含说明文档、脚本、模板、参考数据由 agent 在需要时主动加载并执行。换句话说提示词只能改变“怎么说”Skill 还能改变“能做什么”。一个标准 Skill 的目录结构长这样skills/ server-inspector/ SKILL.md scripts/ inspect.shSKILL.md是技能的灵魂它的 frontmatter 部分至少要有name和description。description特别关键agent 会拿它和当前任务做匹配写得越精准技能被正确触发的概率越高。比如“当用户询问服务器状态、磁盘空间、运行异常时使用”就比“服务器相关工具”要有效得多。正文部分则是给 agent 的操作手册告诉它先做什么、再做什么、什么情况算异常。4.2 实战写一个服务器巡检 Skill我部署完 OpenClaw 后写的第一个 Skill 就是服务器巡检日报你可以直接参考。先建目录和脚本mkdir -p /opt/openclaw/skills/server-inspector/scripts cd /opt/openclaw/skills/server-inspectorinspect.sh内容如下#!/bin/bash echo CPU uptime echo MEMORY free -h echo DISK df -h --outputsource,size,used,avail,pcent,target | grep -vE tmpfs|udev echo RECENT ERRORS journalctl --since 24 hours ago -p err --no-pager | tail -20记得chmod x scripts/inspect.sh。然后是SKILL.md--- name: server-inspector description: 当用户询问服务器运行状态、健康检查、磁盘空间、内存占用或最近异常日志时使用。 allowed-tools: bash --- # 服务器巡检 你是运维助手负责生成服务器巡检报告。执行流程 1. 运行 scripts/inspect.sh 采集原始指标。 2. 检查磁盘使用率超过 80% 给出告警。 3. 检查内存剩余量低于 20% 给出告警。 4. 若最近 24 小时有错误日志附上摘要并给出可能原因。 5. 输出结构化报告按 CPU/内存/磁盘/日志四部分组织。把这个目录放到skills目录下然后在控制台问一句“帮我看看服务器状态”你会发现 agent 会自动选中这个 Skill、执行脚本、再按 SKILL.md 的格式输出报告。这就是“从会聊天到会干活”的转变过程。设计 Skill 时我也总结了一个原则脚本负责采集确定性数据SKILL.md 负责教 agent 如何解读和输出两者分工明确可维护性最好。4.3 社区 Skill 的类型与安装管理现在社区里的 Skill 已经很多了大致能分成几类。一类是“知识型”把某领域的操作手册、术语表整理进 Skill 的知识区agent 遇到相关问题时直接引用比如有人把产品手册转成 Skill 的 “book to skill” 玩法本质上就是把静态文档变成可复用的 agent 记忆。一类是“工具型”给 agent 一个可执行脚本我上面写的巡检 Skill 就属于这类。还有一类是“风格型”比如社区里流传的“去 AI 味”润色 Skill专门把报告里的“赋能”“抓手”“闭环”这类词清出去还有“狗头军师”型的反方意见 Skill专门在团队决策时泼冷水提供另一个视角。安装第三方 Skill 的流程很统一下载对应目录放到配置好的 skills 目录下重启服务或重载配置即可。有一点务必注意Skill 里的脚本也会以一定权限在服务器上执行非官方来源的 Skill 要先读一遍 SKILL.md 和脚本内容确认没有危险操作再放进来。5. 接入阿里云百炼 Qwen模型成本和能力双赢5.1 为什么不用默认模型而接百炼OpenClaw 默认配置面向 Anthropic 的 Claude 模型但国内使用有两个现实问题一是 API Key 开通流程和额度购买不顺手二是访问稳定性受网络环境影响。我选择接阿里云百炼的 Qwen 模型主要原因有三个百炼是阿里云官方的大模型服务平台账号和 ECS 在同一套体系里开通、充值、开票都方便它提供的是 OpenAI 兼容接口OpenClaw 这类框架接入时几乎不用改代码只要改地址和密钥Qwen 系列模型的 token 单价相比海外旗舰模型低一个数量级对高频调用的 agent 场景友好得多。5.2 OpenAI 兼容模式的配置方法百炼模型广场里找到你想要模型之后在“API-KEY”页面生成一个sk-开头的密钥。然后在 OpenClaw 的环境变量中做如下设置OPENCLAW_MODEL_PROVIDERopenai-compatible OPENCLAW_MODELqwen-plus OPENAI_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1 OPENAI_API_KEYsk-你的密钥关键点在于OPENAI_BASE_URL。百炼的兼容模式地址是固定的配置时必须带上/v1后缀否则鉴权会失败。至于模型名基础对话用qwen-plus性价比最高复杂推理任务换qwen-max如果只想低成本跑通链路也可以试qwen2.5-3b这类小尺寸模型——胜在便宜但多轮 tool 调用和长上下文下的表现明显不如大尺寸模型生产环境不太建议。配置完成后重启服务在控制台里随便问一句如果返回正常说明整条链路已经通了。5.3 多模型兜底与实测感受我在实际使用中碰到过一次很尴尬的情况某个晚上 qwen-plus 的调用量突增响应速度明显下降agent 的任务链整个变慢。从那以后我做了一个“多模型兜底”的配置思路主模型用 qwen-max 保证复杂对话质量普通任务用 qwen-plus 控制成本同时在 scripts 里留一个切换入口手动改环境变量里的模型名后重启即可。虽然 OpenClaw 目前对自动 failover 的原生支持还不算完善但手动切换基本够用。实测下来qwen-plus 处理日常消息、Skill 触发和中等复杂度任务完全没问题偶尔生成代码或长文档时会有一些表达不精准的情况但瑕不掩瑜。考虑到成本只有海外旗舰模型的零头我认为这是国内云服务器上跑 OpenClaw 最务实的模型方案。6. 上线后稳定性维护systemd、SSL 与排错手册6.1 systemd 托管 OpenClaw如果你直接用nohup openclaw 方式跑服务那迟早要吃一次教训——SSH 会话断开、系统重启、进程崩溃服务都有可能静默消失。正确做法是用 systemd 把 OpenClaw 托管成系统服务。写一个服务单元文件[Unit] DescriptionOpenClaw Agent Service Afternetwork.target [Service] Userubuntu WorkingDirectory/opt/openclaw EnvironmentFile/opt/openclaw/.env ExecStart/usr/bin/openclaw serve --host 0.0.0.0 --port 3000 Restartalways RestartSec5 [Install] WantedBymulti-user.target这里的EnvironmentFile很关键它让 5.2 节里配置的百炼密钥在服务启动时自动加载不用把密钥写死在命令行。启动命令是sudo systemctl daemon-reload sudo systemctl enable openclaw sudo systemctl start openclaw之后所有运维动作都围绕systemctl status openclaw和journalctl -u openclaw -f展开。还有一个我在 2G 内存机器上踩过的坑任务一多进程就被 OOM killer 干掉Restartalways只能保证重启不能保证不崩。解决办法是加 2G swapsudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile加完之后内存压力明显缓解再也没出现过无故被杀的情况。6.2 免费 SSL 证书与 Nginx 反代Web 控制台裸奔在 HTTP 下不是长久之计尤其你在公网 IP 上直接暴露 3000 端口。我当时的做法是在前面架一层 Nginx 反代再挂上阿里云免费 SSL 证书。流程分四步申请免费证书、下载证书文件、配置 Nginx、校验生效。阿里云数字证书管理服务里可以申请免费的单域名证书有效期三个月到期前在控制台重新申请并下载替换即可整套续期流程十分钟内能完成。Nginx 配置要点server { listen 443 ssl; server_name your-domain.com; ssl_certificate /etc/nginx/ssl/your-cert.pem; ssl_certificate_key /etc/nginx/ssl/your-key.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }配好后记得在安全组里放行 80 和 443。这里有个传承下来的好习惯证书文件放/etc/nginx/ssl/并限制权限为 600HTTP 服务之后也可以选择把 80 端口跳转到 443避免明文传输。6.3 高频报错排查清单上线两个月我把遇到过的典型问题整理成了下面这张表基本覆盖了社区里能刷到的绝大多数 case现象根因处理方式公网 IP 打不开 Web 界面安全组未放行对应端口ECS 控制台添加入方向规则对话返回 401 鉴权失败百炼 API Key 错误或未加载检查 .env 文件重启 systemd 服务Skill 一直不被触发SKILL.md 的 name 或 description 不规范检查 frontmatterdescription 写清楚触发场景始终走默认模型而非 Qwen环境变量未生效确认 EnvironmentFile 路径清除旧变量后重启服务突然消失且 restart 不生效内存不足触发 OOM加 swap或升级到 4G 内存新 Skill 放进去没反应skills.directory 路径配置错误检查 openclaw.json重启服务排查顺序有个通用原则先看进程再看日志最后看网络。systemctl status查进程journalctl -u openclaw -n 50查日志curl本地端口查网络。按这个顺序走大多数问题五分钟内能定位。6.4 迁移后的一些真实体会最后聊点个人经验。从本地迁到阿里云之后最大的变化不是“跑得更快”而是“终于可以不用管它了”。以前每天都要确认本地进程还在不在现在 systemd 托管之后哪怕进程崩溃也会自动拉起加上百炼 API 的稳定性连续运行几星期不用人工干预是常态。还有一个被反复验证的建议Skill 目录和 openclaw.json 一定要定期备份。我每周用 cron 把这两个目录打包传到 OSS 或其他存储位置恢复成本只有解压和重启两步。Skill 才是 OpenClaw 的核心资产模型和服务器都可以换唯独你给 agent 写的那些技能是花时间沉淀下来最值得保存的东西。如果你准备照着这篇文章做一次部署我的建议是把第 3 节的部署脚本和第 6 节的 systemd 配置放在一起看这两块才是稳定上云的真正底座。等跑通第一个 Skill、接上百炼模型之后你大概率也会和我一样觉得从“本地折腾”切换到“云上一键”这一步是整个 OpenClaw 使用体验里最值回票价的决定。