折腾了整整一个周末,终于在阿里云轻量服务器上把 OpenClaw 跑通了。说实话,整个部署过程踩的坑比我想象中多得多——国内服务器拉镜像慢、容器权限报错、ICP 备案导致 80 端口被拦截、ACME 证书签不下来……每一个问题单拿出来都能让人卡半天。

网上现有的教程要么太简略,要么版本已经过时,很多关键细节(比如 docker compose run 和 docker compose exec 的区别、DNS-01 验证的正确姿势)根本没人提。所以我决定把自己的完整部署过程记录下来,写成这篇保姆级教程,希望能帮你少走弯路。

本教程面向的读者:有基本的 Linux 操作经验,但不熟悉 Docker / Nginx / HTTPS 证书配置。每一步我都会给出可以直接复制粘贴的完整命令。


一、前置准备

1.1 服务器要求

项目 推荐配置 说明
服务器 阿里云轻量应用服务器 ECS 也行,轻量更便宜
内存 2GB 以上 实测 1.87GB 也能跑,但比较紧张
系统 Alibaba Cloud Linux 3 / Ubuntu 22.04 本教程以 Alibaba Cloud Linux 3 为例
带宽 3Mbps+ 太低会影响 Web 界面响应

1.2 你还需要

  • 一个域名,已经解析到服务器公网 IP(A 记录)
  • DeepSeek API Key(或其他 OpenClaw 支持的模型 Key)
  • 一个 SSH 工具(推荐 Windows Terminal / MobaXterm / 阿里云控制台自带的 Web Terminal)

1.3 域名解析

在你的域名服务商控制台(比如阿里云 DNS 控制台),添加一条 A 记录:

主机记录: @(或你想要的子域名前缀,如 claw)
记录类型: A
记录值: 你的服务器公网 IP

解析生效一般需要几分钟,可以用 ping 你的域名 验证。


二、安装基础环境

SSH 登录服务器后,先检查当前环境:

docker --version
node --version
nginx -v

2.1 安装 Docker(如果没有)

# Alibaba Cloud Linux / CentOS
yum install -y docker

启动并设置开机自启

systemctl start docker systemctl enable docker

验证

docker --version

Ubuntu 用户用 apt install -y docker.io 或者通过 Docker 官方脚本安装。

2.2 安装 Docker Compose 插件

阿里云的 Docker 包通常自带 compose 插件。如果没有:

# 验证是否有 compose
docker compose version

如果没有,手动安装插件

mkdir -p /usr/local/lib/docker/cli-plugins curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 \ -o /usr/local/lib/docker/cli-plugins/docker-compose chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

⚠️ 国内服务器下载 GitHub Release 可能很慢。如果卡住,可以用南京大学镜像。

2.3 安装 Nginx

yum install -y nginx
systemctl start nginx
systemctl enable nginx

2.4 安装 Node.js 20+(可选)

OpenClaw 本身在 Docker 里运行,宿主机不强制要求 Node.js。但如果你想在宿主机上调试或使用 CLI 工具:

curl -fsSL https://rpm.nodesource.com/setup_20.x | bash -
yum install -y nodejs
node --version  # 应该显示 v20.x.x

三、部署 OpenClaw Docker 容器

3.1 创建项目目录

mkdir -p /opt/openclaw/data/config
cd /opt/openclaw

3.2 生成 Gateway Token

openssl rand -hex 16

输出类似 a3f8c2d1e9b0456781234567890abcde把它保存好,后面多处要用。

3.3 编写 docker-compose.yml

cat > /opt/openclaw/docker-compose.yml << 'EOF'
services:
  openclaw-gateway:
    image: ghcr.nju.edu.cn/openclaw/openclaw:latest
    container_name: openclaw-gateway
    restart: unless-stopped
    ports:
      - "127.0.0.1:18789:18789"
      - "127.0.0.1:18790:18790"
    volumes:
      - ./data/config:/home/node/.openclaw
    environment:
      - OPENCLAW_GATEWAY_TOKEN=替换为你的token
      - TZ=Asia/Shanghai
      - DEEPSEEK_API_KEY=替换为你的key
      - TERM=xterm-256color
    stdin_open: true
    tty: true

openclaw-cli: image: ghcr.nju.edu.cn/openclaw/openclaw:latest volumes: - ./data/config:/home/node/.openclaw environment: - OPENCLAW_GATEWAY_TOKEN=替换为你的token - TZ=Asia/Shanghai - DEEPSEEK_API_KEY=替换为你的key stdin_open: true tty: true profiles: - cli EOF

⚠️ 镜像源说明:这里用的是南京大学镜像 ghcr.nju.edu.cn/openclaw/openclaw:latest,国内服务器拉 GitHub Container Registry 的镜像非常慢,南大镜像是 ghcr.io 的国内代理。
⚠️ 安全说明:端口绑定的是 127.0.0.1,外部无法直接访问。所有外部流量必须经过 Nginx 反向代理。

3.4 修复目录权限(超级重要!)

chown -R 1000:1000 /opt/openclaw/data
⚠️ OpenClaw 容器内部使用 node 用户(UID 1000),而 root 创建的目录归属 root(UID 0)。不修复会导致 EACCES 错误。

3.5 拉取镜像并启动

cd /opt/openclaw
docker compose pull
docker compose up -d openclaw-gateway

查看容器状态和日志确认启动成功:

docker compose ps
docker compose logs -f openclaw-gateway

四、初始配置

⚠️ 必须用 docker compose run --rm -T openclaw-cli ...,不要用 docker compose exec
run 创建临时容器执行命令后自动销毁,exec 会连到正在运行的 gateway 进程导致卡死。

4.1 设置 Gateway 模式

docker compose run --rm -T openclaw-cli node dist/index.js config set gateway.mode local

4.2 设置 AI 模型

docker compose run --rm -T openclaw-cli node dist/index.js config set model deepseek/deepseek-v4-flash

4.3 设置允许的访问来源

docker compose run --rm -T openclaw-cli node dist/index.js config set allowedOrigins '["https://你的域名"]'

4.4 关闭设备认证(可选)

docker compose run --rm -T openclaw-cli node dist/index.js config set dangerouslyDisableDeviceAuth true

4.5 重启并验证

docker compose restart openclaw-gateway
docker compose run --rm -T openclaw-cli node dist/index.js config list

五、配置 Nginx 反向代理

5.1 创建 Nginx 配置文件

cat > /etc/nginx/conf.d/openclaw.conf << 'EOF'
server {
    listen 80;
    server_name 你的域名;
    return 301 https://$host$request_uri;
}

server { listen 443 ssl http2; server_name 你的域名;

ssl_certificate /etc/nginx/ssl/你的域名.cer; ssl_certificate_key /etc/nginx/ssl/你的域名.key; ssl_protocols TLSv1.2 TLSv1.3;

location / { proxy_pass http://127.0.0.1:18789; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_buffering off; proxy_cache off; proxy_read_timeout 600s; proxy_send_timeout 600s; } } EOF

三个关键:WebSocket 支持(Upgrade/Connection)、关闭 proxy_buffering(流式响应)、超时 600s。

六、签发 HTTPS 证书(DNS-01)

6.1 安装 acme.sh 并切换 CA

curl https://get.acme.sh | sh -s email=你的邮箱
source ~/.bashrc
acme.sh --set-default-ca --server letsencrypt

6.2 DNS-01 手动验证

acme.sh --issue -d 你的域名 --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

按提示在 DNS 控制台添加 TXT 记录,等待生效后:

acme.sh --renew -d 你的域名 --yes-I-know-dns-manual-mode-enough-go-ahead-please

6.3 安装证书并重载 Nginx

acme.sh --install-cert -d 你的域名 \
  --cert-file /etc/nginx/ssl/你的域名.cer \
  --key-file /etc/nginx/ssl/你的域名.key \
  --fullchain-file /etc/nginx/ssl/fullchain.cer \
  --reloadcmd "systemctl reload nginx"

nginx -t && systemctl reload nginx


七、验证访问

访问 https://你的域名,输入 Gateway Token 登录,发送消息确认 AI 正常回复。

常用运维命令

cd /opt/openclaw && docker compose ps          # 查看状态
docker compose logs -f openclaw-gateway        # 查看日志
docker compose restart openclaw-gateway        # 重启
docker compose pull && docker compose up -d openclaw-gateway  # 更新

更多推荐