OpenClaw 从 0 到 1 部署:2 核 3.4G 小服务器跑通,附 8 个真实报错

摘要:在一台 2 核 3.4G 内存的阿里云 ECS 上把 OpenClaw 从零跑通,接上微信、装上 HTTPS、建了管理端。这篇文章不写"理论上可以",只记真实执行过的命令、真实报出来的错、真实花掉的时间。8 个坑里有一半会让你以为自己配对了、其实三个月后才炸。


先说结论

OpenClaw 本身不难装,难的是它跑起来之后你要给它配的那些周边——反向代理、HTTPS、开机自启、定时任务。这篇解决的是后者。

如果你只想跑通,看第 2 节;如果你不想三个月后半夜被证书过期搞醒,第 4 节的坑 3 必看


场景:我要让 AI 干什么

目标很具体:一个能 24 小时待命的 AI 助手,挂在微信上,能自己按定时任务干活(每天生成日报、抓热点、发文章),还能管我自己的网站。

不是聊天机器人,是常驻后台的自动化进程


环境(真实配置)

项目
服务器 阿里云 ECS,2 核
内存 3.4 Gi(实测已用 1.0 Gi)
系统 Ubuntu 22.04.5 LTS
OpenClaw 2026.8.2
nginx 1.18.0(Ubuntu 源)
磁盘 剩余 40 G

这个配置跑 OpenClaw + 一个静态站 + 两个 Python 后端,内存占用 30%,完全够用。不用上 4 核 8G。


配置步骤

步骤 1:装 OpenClaw 并让它常驻

OpenClaw 装好后不要手动 nohup 拉起来——重启就没了。用 systemd 托管:

systemctl enable --now openclaw
systemctl is-active openclaw   # 应输出 active

它默认监听 127.0.0.1:18789。注意是本地回环,外网直接访问不到——这是对的,后面靠 nginx 反代出去。

步骤 2:确认服务真的活着

ss -tlnp | grep 18789

看到 127.0.0.1:18789 才算起来。只看到进程不代表端口在监听。

步骤 3:配 nginx 反向代理

location / {
    proxy_pass http://127.0.0.1:18789;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

改完必须先校验再 reload:

/usr/sbin/nginx -t      # 必须用全路径,nginx 不在 PATH 里
systemctl reload nginx

翻车记录(8 个真实报错)

坑 1:nginx 1.18 不认 http2 on;

报错:nginx -t 直接失败。

原因:独立的 http2 on; 指令是 nginx 1.25.1+ 才有的。Ubuntu 22.04 源里是 1.18.0,写这个必挂。

解决:用老语法写在同一行:

listen 443 ssl http2;    # ✅ 1.18 认这个
# http2 on;              # ❌ 1.25.1+ 才有

坑 2:certbot 的 --nginx 插件会改坏你的配置

现象:用 certbot --nginx 一键签证书,它会自动改写 nginx 配置。你手写的注释、自定义 location 可能被重排。

解决:改用 webroot 模式,配置完全自己控制:

certbot certonly --webroot -w /var/www/你的站点 \
  -d 你的域名 -d www.你的域名

坑 3:全站 301 跳 HTTPS,会让证书三个月后失效 ⚠️ 最隐蔽

现象:签证书一切正常,网站 HTTPS 也能访问。但三个月后续期失败,整站挂掉。

原因:Let's Encrypt 续期用的是 HTTP-01 校验,它会访问 http://你的域名/.well-known/acme-challenge/xxx。如果你配了"HTTP 全站 301 跳 HTTPS",这个校验请求会被跳走,续期拿不到文件。

解决:ACME 校验路径必须单独放行,不跳转:

# 这个 location 要放在 301 跳转规则之前
location /.well-known/acme-challenge/ {
    root /var/www/你的站点;
    # 注意:这里绝对不能写 return 301
}

必做验证——干跑一次续期,别等三个月后才发现:

certbot renew --dry-run

看到 Congratulations, all simulated renewals succeeded 才算真配对了。

坑 4:裸 IP 签不了 HTTPS 证书

报错:SSL: no alternative certificate subject name matches target host name '47.92.243.8'

原因:Let's Encrypt 只给域名签证书,不给公网 IP 签。证书里只有 zyker.cn,没有 IP。

后果:https://你的IP 浏览器会报证书错误(红锁),http://你的IP 正常。这不是配错了,是无解。

结论:IP 只能留作应急备用,正式访问一律走域名

坑 5:nginx 正则里的 {2} 必须加引号

报错:pcre_compile() failed: missing )

原因:nginx 把 { 当成配置块的开始。

解决:正则整体加引号:

location ~ "^/(20[0-9]{2}-[0-9]{2}-[0-9]{2}-.+[.]html)$" {

坑 6:配置文件里的默认值,会在你最想不到的时候生效

现象:我把站点基址从 IP 改成了域名,验证通过。结果第二天早上一看,又变回 IP 了

原因:生成脚本是 SITE_BASE = os.environ.get("SITE_BASE", "http://47.92.243.8")。我手动跑的时候传了环境变量,但crontab 里的每日自动重跑没传,于是退回了默认值。

教训:靠环境变量覆盖默认值的设计,默认值必须和当前事实一致。否则任何一次没带环境变量的执行都会把你的改动冲掉。

验证方法:模拟 crontab 场景跑一次:

env -u SITE_BASE python3 你的脚本.py

坑 7:服务器 pip 无源,装不了任何包

报错:ERROR: No matching distribution found for flask

原因:服务器出网有白名单,pypi 不可达。

影响:Flask、passlib、python-multipart 全都装不上

解决:只能用 Python 内置库。表单自己解析、密码用 hashlib.pbkdf2_hmac、会话用 http.cookies。写起来多几十行,但能跑。

坑 8:同名 checkbox 提交后只剩一个

现象:管理端有 8 个"是否显示"勾选框,勾了 5 个,保存后只有最后一个生效

原因:name="show" 同名,解析成 dict 时后面的 key 覆盖前面的。

解决:name 必须唯一,把标识编进去:

<input type="checkbox" name="show_/price-calendar.html" value="1">

保存时按前缀收集:{k[5:] for k in form if k.startswith("show_")}


成本账单

项目 金额 说明
云服务器 ¥50-100/月 2核3.4G,已有
HTTPS 证书 ¥0 Let's Encrypt 免费
OpenClaw ¥0 开源
域名 已持有
API 调用 按量,几元到几十元 取决于任务量

纯新增成本:0 元。 用到的全是已有资源 + 免费证书。


效果

从动手到跑通,主要时间花在踩坑和验证上,不是安装上。


下一步

这套环境跑起来只是第一步。接下来要接的是:微信渠道、定时任务、内容自动生成。

卡在哪、怎么过的,我会继续记。 这类"报错信息 + 解决方案"的内容最容易被搜到——因为写的人大多只写成功案例,不写翻车过程。


本文所有命令与报错均来自真实部署环境,非推测。环境:Ubuntu 22.04.5 + OpenClaw 2026.8.2 + nginx 1.18.0。

🛒 读完想直接上手?配套提示词包

这篇文章涉及的场景,我整理成了拿来即用的提示词包,复制粘贴就能跑:

🛒 逛商店 · 15 款 · 全套 ¥39.9

单包 ¥9.9 / 任选三包 ¥19.9 / 全套 15 包 ¥39.9,均可先免费预览。

💡 本篇文章工具,帮你省时间的推荐

以下工具经实际使用验证(部分含推广链接,你购买不影响价格,我能获得分成):

广告与推广说明:本站部分链接为推广链接,感谢你的支持让内容持续更新。