在阿里云 ECS 上从零部署 OpenClaw
本指南面向没有服务器的用户,从注册阿里云账号开始,一步步完成 ECS 云服务器购买、系统配置、Docker 安装,到最终运行 OpenClaw 网关。全程无需公网域名,使用 SSH 隧道安全访问。
预估费用:约 30-50 元/月(按量付费最低配置),新用户享首年优惠。详见 费用估算。
已有服务器? 如果你已经有安装了 Docker 的 Linux 服务器,可以直接跳到 Docker Compose + 飞书部署指南 开始部署。
前置条件
- 阿里云账号,已完成 实名认证
- SSH 客户端 — macOS/Linux 自带
ssh,Windows 推荐 PuTTY 或 Windows Terminal - AI 模型 API 凭据 — 如 Anthropic API Key 和 Base URL(或兼容 Anthropic Messages API 的自定义端点)
- (可选)飞书/其他通道凭据 — 如需配置飞书机器人,参阅 飞书应用配置详解
第 1 步:选择 ECS 实例规格
OpenClaw 网关是轻量级服务,对资源要求不高。以下是推荐配置:
| 配置项 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 1 vCPU | 2 vCPU | 共享型实例即可 |
| 内存 | 1 GB | 2 GB | 1 GB 在高负载时可能 OOM |
| 系统盘 | 20 GB SSD | 40 GB ESSD Entry | ESSD Entry 性价比最高 |
| 操作系统 | Ubuntu 22.04 LTS | Ubuntu 22.04 / Debian 12 | 本指南以 Ubuntu 22.04 为例 |
| 地域 | 中国大陆任意 | 上海 / 北京 / 杭州 | 选择离你最近的地域 |
推荐实例规格族:
ecs.t6-c1m1.large— 突发性能实例,适合轻量负载,价格最低ecs.e-c1m1.large— 经济型实例,无性能限制
提示:阿里云经常推出新用户优惠和限时折扣活动。建议在购买前先查看 阿里云优惠页面。抢占式实例(Preemptible Instance)价格低至按量付费的 1-2 折,但可能被回收,适合用于测试环境。
第 2 步:创建 ECS 实例
- 登录 阿里云 ECS 控制台
- 点击 创建实例
- 选择 付费模式:
- 按量付费 — 按小时计费,适合测试(随时释放不浪费)
- 包年包月 — 包月更便宜,适合长期运行
- 选择 地域和可用区(如 华东 1 - 上海)
- 选择 实例规格 — 在搜索框中输入
ecs.t6或ecs.e,选择 1C1G 或 2C2G 配置 - 选择 镜像 — 公共镜像 → Ubuntu → 22.04 64位
- 配置 系统盘 — ESSD Entry,40 GB
- 配置 登录凭证 — 选择 密钥对(推荐)
重要:强烈建议使用 SSH 密钥对而非密码登录。如果还没有密钥对,点击 创建密钥对,阿里云会自动生成并下载私钥文件(
.pem)。请妥善保管该文件,丢失后无法恢复。
- 填写 实例名称(如
openclaw-gateway) - 确认配置并 创建实例
创建完成后,在 ECS 实例列表中记录实例的 公网 IP 地址。
第 3 步:配置安全组
阿里云 ECS 默认的安全组规则可能过于宽松。请进入实例详情 → 安全组 → 编辑规则,确保只开放必要端口:
| 方向 | 端口 | 协议 | 授权对象 | 用途 |
|---|---|---|---|---|
| 入方向 | 22 | TCP | 你的 IP 或 0.0.0.0/0 | SSH 远程连接 |
| 出方向 | 全部 | 全部 | 0.0.0.0/0 | 默认出站(拉取镜像、调用 API 等) |
重要:不要在安全组中开放 18789 端口。OpenClaw 网关默认绑定到
127.0.0.1,我们通过 SSH 隧道安全访问,无需将网关端口暴露到公网。如果阿里云默认安全组开放了 3389、443 等不需要的端口,建议一并删除。
提示:如果你的本地网络有固定公网 IP,建议将 SSH 的授权对象设置为你的 IP 地址(如
1.2.3.4/32),而非0.0.0.0/0,以提升安全性。
第 4 步:SSH 连接服务器
使用密钥对登录 ECS 实例:
# 设置密钥文件权限(首次需要)
chmod 400 ~/Downloads/your-keypair.pem
# SSH 连接
ssh -i ~/Downloads/your-keypair.pem root@YOUR_ECS_IP将 your-keypair.pem 替换为你下载的密钥文件名,YOUR_ECS_IP 替换为 ECS 实例的公网 IP。
提示:为方便后续使用,可以在
~/.ssh/config中添加配置:Host openclaw HostName YOUR_ECS_IP User root IdentityFile ~/Downloads/your-keypair.pem之后只需
ssh openclaw即可连接。
登录后,建议创建非 root 用户用于日常操作:
adduser openclaw
usermod -aG sudo openclaw以下步骤以 root 用户操作为例。如使用非 root 用户,在需要时添加 sudo 前缀。
第 5 步:安装 Docker 和 Docker Compose
更新系统软件包
apt update && apt upgrade -y安装 Docker
curl -fsSL https://get.docker.com | sh配置 Docker 镜像加速器
在中国大陆直接拉取 Docker Hub 和 GitHub Container Registry 的镜像可能很慢甚至超时。阿里云提供免费的容器镜像加速服务。
访问 阿里云容器镜像服务 → 镜像工具 → 镜像加速器,获取你的专属加速地址(格式为
https://xxxxx.mirror.aliyuncs.com)创建或编辑 Docker 配置文件:
mkdir -p /etc/docker{
"registry-mirrors": [
"https://xxxxx.mirror.aliyuncs.com"
]
}将上述内容写入 /etc/docker/daemon.json,并将 xxxxx 替换为你的专属加速地址前缀。
提示:如果你没有阿里云容器镜像服务账号,也可以使用其他公开镜像源。注意:公开镜像源的可用性可能会变化,建议优先使用阿里云专属加速地址。
- 重启 Docker 使配置生效:
systemctl daemon-reload
systemctl restart docker验证安装
docker --version
docker compose version应输出 Docker 和 Docker Compose v2 的版本号。
添加用户到 docker 组(可选)
如果使用非 root 用户:
usermod -aG docker openclaw重新登录 SSH 后生效。
第 6 步:部署 OpenClaw
创建项目目录
mkdir -p ~/openclaw/openclaw-data
cd ~/openclaw创建 .env 文件
# .env
# 网关安全令牌
OPENCLAW_GATEWAY_TOKEN=your-secure-gateway-token
# AI 模型凭据
ANTHROPIC_AUTH_TOKEN=your_api_token_here
ANTHROPIC_BASE_URL=https://api.anthropic.com安全提示:请将
.env加入.gitignore,切勿提交到版本控制。生成令牌:使用以下命令生成安全的随机令牌:
bashopenssl rand -base64 32将生成的字符串填入
OPENCLAW_GATEWAY_TOKEN。
如需配置飞书通道,在 .env 中追加:
# 飞书凭据(可选)
FEISHU_APP_ID=cli_xxx
FEISHU_APP_SECRET=your_feishu_app_secret创建 openclaw.json 配置
mkdir -p openclaw-data在 openclaw-data/openclaw.json 中写入以下内容:
{
"agents": {
"defaults": {
"workspace": "/home/node/.openclaw/workspace",
"model": { "primary": "custom-claude/claude-sonnet-4-5-20250929" }
}
},
"models": {
"providers": {
"custom-claude": {
"baseUrl": "${ANTHROPIC_BASE_URL}",
"apiKey": "${ANTHROPIC_AUTH_TOKEN}",
"api": "anthropic-messages",
"models": [
{
"id": "claude-sonnet-4-5-20250929",
"name": "Claude Sonnet 4.5",
"contextWindow": 200000,
"maxTokens": 4096
}
]
}
}
},
"gateway": {
"mode": "local",
"port": 18789,
"auth": { "token": "${OPENCLAW_GATEWAY_TOKEN}" }
}
}提示:配置文件中的
${VAR_NAME}是 OpenClaw 运行时变量替换语法,由 OpenClaw 在启动时从容器环境变量中读取。请保持原样写入,不要手动替换。模型 ID:自定义端点通常需要完整的带日期后缀的模型 ID(如
claude-sonnet-4-5-20250929),短别名(如claude-3-5-sonnet)可能会返回 422 错误。请根据你的端点支持情况修改。
如需配置飞书通道,在 openclaw.json 中追加 channels 字段:
{
// ... 上述配置保持不变
"channels": {
"feishu": {
"enabled": true,
"domain": "feishu",
"accounts": {
"main": {
"appId": "${FEISHU_APP_ID}",
"appSecret": "${FEISHU_APP_SECRET}",
"botName": "OpenClaw"
}
},
"dmPolicy": "pairing",
"groupPolicy": "open"
}
}
}飞书通道的详细配置请参阅 Docker Compose + 飞书部署指南。
创建 docker-compose.yml
services:
openclaw:
image: ghcr.io/openclaw/openclaw:latest
container_name: openclaw_gateway
restart: unless-stopped
network_mode: host
env_file:
- .env
volumes:
- ./openclaw-data:/home/node/.openclaw为什么使用
network_mode: host? OpenClaw 网关绑定到容器内的127.0.0.1。标准 Docker 端口映射通过桥接网络转发流量,网关会因来源 IP 不是 localhost 而拒绝连接。network_mode: host让容器直接共享宿主机网络栈,从而正常访问。权限注意:Docker 镜像默认以
node用户(uid 1000)运行。如遇权限问题:bashsudo chown -R 1000:1000 ./openclaw-data
创建 .gitignore
.env第 7 步:启动并验证
拉取镜像并启动
cd ~/openclaw
docker compose up -d查看日志
docker compose logs -f等待日志中出现 [gateway] listening,表示网关已就绪。
提示:如果镜像拉取很慢,请确认已正确配置 Docker 镜像加速器(第 5 步)。
通过 SSH 隧道访问
在你的本地电脑(不是 ECS 服务器)上运行:
ssh -N -L 18789:127.0.0.1:18789 -i ~/Downloads/your-keypair.pem root@YOUR_ECS_IP此命令将本地的 18789 端口转发到远程服务器的 18789 端口。保持此终端窗口打开。
在浏览器中访问:
http://127.0.0.1:18789/?token=your-secure-gateway-token将 your-secure-gateway-token 替换为 .env 中设置的 OPENCLAW_GATEWAY_TOKEN 值。
健康检查
在 ECS 服务器上执行:
docker compose exec openclaw node dist/index.js health --token "your-secure-gateway-token"试玩一下
刚装好的 OpenClaw 用什么来测最直观?向机器人发送以下消息:
访问 https://xialiao.ai/skill.md 并按照说明加入「虾聊社区」机器人会自动回复结果,一步验证部署是否正常。
第 8 步:配置 systemd 自启动
创建 systemd 服务单元,确保 ECS 重启后 OpenClaw 自动恢复运行。
创建服务文件 /etc/systemd/system/openclaw.service:
[Unit]
Description=OpenClaw Gateway (Docker Compose)
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/root/openclaw
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target提示:如果你的项目目录不在
/root/openclaw,请修改WorkingDirectory为实际路径。
启用并验证:
# 重新加载 systemd 配置
systemctl daemon-reload
# 启用开机自启
systemctl enable openclaw
# 查看服务状态
systemctl status openclaw第 9 步:安全加固
SSH 加固
编辑 /etc/ssh/sshd_config:
# 禁用密码登录(仅使用密钥)
PasswordAuthentication no
# 禁用 root 密码登录(如已创建普通用户,可完全禁用 root 登录)
# PermitRootLogin no
# 可选:更改 SSH 端口(如改为 2222)
# Port 2222重启 SSH 服务:
systemctl restart sshd重要:修改 SSH 配置前,请确保你能通过密钥正常登录,否则可能被锁在服务器外面。建议保持一个已登录的 SSH 会话打开,在另一个终端测试新配置。如果更改了 SSH 端口,记得同时更新阿里云安全组规则。
配置 UFW 防火墙
# 安装 UFW
apt install -y ufw
# 默认拒绝入站
ufw default deny incoming
# 默认允许出站
ufw default allow outgoing
# 允许 SSH(如更改了端口,替换 22 为新端口号)
ufw allow 22/tcp
# 启用防火墙
ufw enable
# 查看规则
ufw status verbose提示:不需要为 18789 端口添加 UFW 规则。网关绑定到
127.0.0.1,只接受本地连接(通过 SSH 隧道访问),UFW 不影响 loopback 流量。
安装 fail2ban
fail2ban 可以自动封禁多次 SSH 登录失败的 IP 地址:
apt install -y fail2ban创建配置文件 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22
maxretry = 5
bantime = 3600
findtime = 600启动并启用:
systemctl enable fail2ban
systemctl start fail2ban网关安全
OpenClaw 网关默认绑定到 127.0.0.1,仅接受本地连接。配合以下措施确保安全:
- 安全组中 不开放 18789 端口
- 通过 SSH 隧道访问网关
.env中设置强随机令牌(OPENCLAW_GATEWAY_TOKEN)- 定期更新 Docker 镜像:
docker compose pull && docker compose up -d
费用估算
| 方案 | 规格 | 月费用(约) | 说明 |
|---|---|---|---|
| 按量付费 | 1C1G | 30-50 元 | 适合测试,随时释放 |
| 包年包月 | 2C2G | 50-100 元 | 长期运行更划算 |
| 新用户优惠 | 2C2G | 30-60 元(首年) | 关注阿里云活动页面 |
| 抢占式实例 | 2C2G | 10-30 元 | 可能被回收,适合测试 |
提示:以上价格仅供参考,实际费用取决于地域、可用区、流量和具体优惠活动。API 调用费用(如 Anthropic)不包含在内,需另行计算。
Claude Code 一键部署
将下方的完整指令复制给 claude --dangerously-skip-permissions,即可让 Claude Code 自动完成大部分部署工作。你只需提前准备好 ECS 服务器的 SSH 连接信息和 API 凭据。
使用方法
- 确保你已完成第 1-4 步(创建 ECS 实例并能 SSH 登录)
- 在 ECS 服务器上运行:
claude --dangerously-skip-permissions- 将下方 完整指令 全部复制,粘贴给 Claude
- Claude 会自动安装 Docker、配置镜像加速、创建项目文件、启动容器
- Claude 会在需要你填入凭据时暂停并等待确认
准备清单
- [ ] ECS 服务器已创建,能通过 SSH 登录
- [ ] 已获取阿里云容器镜像加速地址(见第 5 步)
- [ ] AI 模型 API Token 和 Base URL
- [ ] (可选)飞书 App ID 和 App Secret
完整指令
将以下内容直接复制,粘贴给 claude --dangerously-skip-permissions(无需修改任何内容):
请帮我在这台阿里云 ECS 服务器上从零部署 OpenClaw 网关。按照以下步骤操作,在需要我手动操作的步骤**停下来等我确认**。
## 操作步骤
### 1. 更新系统并安装 Docker
```bash
apt update && apt upgrade -y
curl -fsSL https://get.docker.com | sh
```
### 2. 配置 Docker 镜像加速器
创建 `/etc/docker/daemon.json`,写入以下内容(使用阿里云镜像加速):
```json
{
"registry-mirrors": [
"https://xxxxx.mirror.aliyuncs.com"
]
}
```
### 3. 停下来,询问我的镜像加速地址
提醒我去阿里云容器镜像服务(https://cr.console.aliyun.com/)→ 镜像工具 → 镜像加速器,获取专属加速地址,然后将 `daemon.json` 中的 `xxxxx` 替换为我提供的地址前缀。
**等我提供加速地址后再继续。**
### 4. 重启 Docker 并验证
```bash
systemctl daemon-reload
systemctl restart docker
docker --version
docker compose version
```
### 5. 创建项目目录
```bash
mkdir -p ~/openclaw/openclaw-data
cd ~/openclaw
```
### 6. 生成网关令牌并创建 .env 模板
生成一个安全的随机令牌:
```bash
openssl rand -base64 32
```
用生成的令牌创建 `.env` 文件,其中网关令牌填入生成的值,其余凭据留空让我手动填写:
```
OPENCLAW_GATEWAY_TOKEN=<填入上面生成的令牌>
ANTHROPIC_AUTH_TOKEN=
ANTHROPIC_BASE_URL=
```
### 7. 停下来,提醒我手动编辑 .env
告诉我 `.env` 文件已创建在 `~/openclaw/.env`,请我填入以下值:
- `ANTHROPIC_AUTH_TOKEN` — AI 模型 API Token
- `ANTHROPIC_BASE_URL` — AI 模型 API 地址(如 `https://api.anthropic.com`)
并确认 `OPENCLAW_GATEWAY_TOKEN` 已自动填入。
如果我还需要飞书通道,追加 `FEISHU_APP_ID` 和 `FEISHU_APP_SECRET`。
**等我说"已填好"或"done"后再继续下一步。**
### 8. 创建 openclaw-data/openclaw.json
```json5
{
"agents": {
"defaults": {
"workspace": "/home/node/.openclaw/workspace",
"model": { "primary": "custom-claude/claude-sonnet-4-5-20250929" }
}
},
"models": {
"providers": {
"custom-claude": {
"baseUrl": "${ANTHROPIC_BASE_URL}",
"apiKey": "${ANTHROPIC_AUTH_TOKEN}",
"api": "anthropic-messages",
"models": [
{
"id": "claude-sonnet-4-5-20250929",
"name": "Claude Sonnet 4.5",
"contextWindow": 200000,
"maxTokens": 4096
}
]
}
}
},
"gateway": {
"mode": "local",
"port": 18789,
"auth": { "token": "${OPENCLAW_GATEWAY_TOKEN}" }
}
}
```
注意:配置文件中的 `${VAR_NAME}` 是 OpenClaw 运行时变量替换语法,不要展开它们,保持原样写入文件。
如果我需要飞书通道,在 `gateway` 同级追加 `channels` 配置(参考飞书部署指南的配置格式)。
### 9. 创建 docker-compose.yml
```yaml
services:
openclaw:
image: ghcr.io/openclaw/openclaw:latest
container_name: openclaw_gateway
restart: unless-stopped
network_mode: host
env_file:
- .env
volumes:
- ./openclaw-data:/home/node/.openclaw
```
### 10. 创建 .gitignore
```
.env
```
### 11. 设置目录权限并启动容器
```bash
chown -R 1000:1000 ./openclaw-data
docker compose up -d
docker compose logs -f
```
等待日志中出现 `[gateway] listening`,然后告诉我网关已启动。
### 12. 创建 systemd 自启动服务
创建 `/etc/systemd/system/openclaw.service`:
```ini
[Unit]
Description=OpenClaw Gateway (Docker Compose)
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/root/openclaw
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target
```
```bash
systemctl daemon-reload
systemctl enable openclaw
```
### 13. 基础安全加固
执行以下安全配置:
1. 安装 UFW 防火墙并配置规则:
```bash
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw --force enable
```
2. 安装 fail2ban:
```bash
apt install -y fail2ban
```
创建 `/etc/fail2ban/jail.local`:
```ini
[sshd]
enabled = true
port = 22
maxretry = 5
bantime = 3600
findtime = 600
```
```bash
systemctl enable fail2ban
systemctl start fail2ban
```
3. 加固 SSH — 在 `/etc/ssh/sshd_config` 中确认以下配置:
```
PasswordAuthentication no
```
```bash
systemctl restart sshd
```
### 14. 告诉我部署完成
总结部署结果,并提醒我:
- 在本地电脑运行 SSH 隧道:`ssh -N -L 18789:127.0.0.1:18789 root@<ECS_IP>`
- 浏览器访问:`http://127.0.0.1:18789/?token=<gateway-token>`
- 检查健康状态:`docker compose exec openclaw node dist/index.js health --token "<gateway-token>"`
## 注意事项
- .env 文件包含敏感信息,绝不要读取、打印或提交到 Git
- 如果遇到权限问题,运行:`chown -R 1000:1000 ./openclaw-data`
- 配置文件中的 `${VAR_NAME}` 是 OpenClaw 运行时变量替换语法,不要展开它们常见问题
Docker 镜像拉取缓慢或超时
症状:docker compose pull 卡住或报 timeout 错误。
解决:确认已配置 Docker 镜像加速器。检查 /etc/docker/daemon.json 中的 registry-mirrors 配置是否正确,重启 Docker 后重试:
systemctl restart docker
docker compose pullPermission denied 权限错误
症状:日志中出现 EACCES: permission denied。
解决:Docker 镜像以 node(uid 1000)用户运行,需要确保挂载目录权限正确:
chown -R 1000:1000 ./openclaw-data容器因 OOM 被终止
症状:容器频繁重启,docker inspect 显示 OOMKilled。
解决:
- 升级 ECS 实例配置(增加内存到 2 GB)
- 或添加 swap 作为临时方案:
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstabSSH 连接超时
症状:ssh 命令长时间无响应。
解决:
- 确认 ECS 实例处于 运行中 状态
- 确认安全组入方向规则允许 22 端口
- 确认使用了正确的公网 IP(非内网 IP)
- 如果更改过 SSH 端口,使用
ssh -p 新端口号连接
网关无法通过浏览器访问
症状:浏览器打开 http://127.0.0.1:18789/ 无响应。
解决:
- 确认 SSH 隧道已建立且终端窗口保持打开:bash
ssh -N -L 18789:127.0.0.1:18789 -i your-key.pem root@YOUR_ECS_IP - 确认网关正在运行:在 ECS 上执行
docker compose logs -f,查看是否有[gateway] listening - 确认本地 18789 端口未被其他程序占用:
lsof -i :18789
容器持续重启
症状:docker compose ps 显示容器状态为 restarting。
解决:
- 查看详细日志:
docker compose logs --tail=50 - 检查
.env文件中的变量是否正确填写 - 检查
openclaw.json语法是否正确(JSON5 格式允许注释和尾逗号,但标准 JSON 不允许) - 检查端口 18789 是否被其他进程占用:
lsof -i :18789
相关文档
- Docker Compose + 飞书部署指南 — 飞书通道配置的完整步骤
- 用 Claude Code 一键部署 OpenClaw + 飞书 — 飞书场景的 Claude Code 自动化部署
- Docker 安装 — Docker 部署详细参考
- 网关配置 — 网关配置参考