技术笔记 · 2026年3月21日 0

OpenClaw的docker部署

网上有太多胡说八道的了,没啥用,还是要自己看文档摸索

我并不喜欢使用127.0.0.1这样的ip去访问,还是希望作为一个正常的网站来用,所以使用了traefik进行反代,这里的坑略多,不过还是都解决了。
我的服务器是ubuntu,所有的操作不要在root用下进行。创建的本地目录 /data/openclaw 需要给与权限 chown 1000:1000 -R /data/openclaw

docker-compose.yml文件内容如下

services:
  openclaw:
    image: alpine/openclaw:latest
    container_name: openclaw
    user: "1000:1000"
    volumes:
      # 记得先创建本地目录,比如我的
      - /data/openclaw:/home/node/.openclaw
      - /data/openclaw/workspace:/home/node/.openclaw/workspace
    environment:
      - HOME=/home/node
      - TERM=xterm-256color
      - NODE_ENV=production
      # 建议创建 .env 文件设置: OPENCLAW_GATEWAY_TOKEN=your-secure-token
      - OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN:-}
      - TZ=${OPENCLAW_TZ:-UTC}
      # 跳过首次初始化检查(仅高级用户使用)
      # - OPENCLAW_SKIP_SETUP=1
    restart: unless-stopped
    # 默认启动 gateway(首次需要初始化,见下方说明)
    command: openclaw gateway run --allow-unconfigured
    healthcheck:
      test:
        [
          "CMD",
          "node",
          "-e",
          "fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
        ]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 20s
    # 这是我的traefik工作的网络,需要修改为你自己的
    networks:
      - work-net
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.openclaw.rule=Host(`openclaw.yourdomain.com`)"
      - "traefik.http.routers.openclaw.entrypoints=websecure"
      - "traefik.http.routers.openclaw.tls.certresolver=cloudflare"
      - "traefik.http.services.openclaw.loadbalancer.server.port=18789"

networks:
  work-net:
    external: true

复制文件到/data/openclaw路径下,然后新建一个.env文件,内容是

OPENCLAW_GATEWAY_TOKEN=YOUR-TOKEN
OPENCLAW_TZ=Aisa/Shanghai

注意Token里最好不要有特殊字符,英文大小写+数字即可
执行 docker compose up -d
这样就可以通过 https://openclaw.yourdomain.com 进行访问了

现在你还需要进行一些设置,否则无法进入聊天网页,注意,以下的命令都必须在/data/openclaw下执行

# 初始化操作
sudo docker compose exec openclaw openclaw onboard

这里跟着网上来就行,没什么不同的,下面的比较重要

# 配置允许非本机访问
sudo docker compose exec openclaw openclaw config set gateway.bind lan
sudo docker compose exec openclaw openclaw config set gateway.auth.token YOUR_TOKEN

# 配置允许访问的网址头
sudo docker compose exec openclaw openclaw config set gateway.controlUi.allowedOrigins '["https://openclaw.yourdomain.com", "http://localhost:18789", "http://127.0.0.1:18789"]'

# 配置受信代理,此处你应该查询你的traefik所处的网络的ip,并替换下面的172.19
sudo docker compose exec openclaw openclaw config set gateway.trustedProxies '["127.0.0.1", "::1", "172.19.0.0/16"]'

# 查看正在访问的设备,此时你应该打开了https://openclaw.yourdomain.com
sudo docker compose exec openclaw openclaw devices list

# 允许某个设备进行访问,注意,以后如果要配置Telegram,也是同样的方法进行允许
# 注意替换最后的ID为你的
sudo docker compose exec openclaw openclaw devices approve e6bb662a-xxxx-xxxx-xxxx-262764723c88

# 重启龙虾
sudo docker compose restart

到这里,你应该可以直接通过网址 https://openclaw.yourdomain.com 访问龙虾了。