乐于分享
好东西不私藏

硬核!OpenClaw实战部署之Docker Compose

硬核!OpenClaw实战部署之Docker Compose

 不是在学习,就是在学习的路上。。。。。。

写这一篇文章,主要是有些小伙伴问起本地部署OpenClaw的一些问题,部署过程中遇到不少坑,虽然各家大厂也出了很多国产龙虾,例如QClaw、JVSClaw、KimiClaw等等,但OpenClaw任然有着不可撼动的地位,也能为很多项目带来助力,例如使用龙虾进行服务部署、日志跟踪、项目问题排查等等,今天就以我的实操经验来帮助小伙伴们更加顺利的部署本地龙虾服务。

面对OpenClaw(一款功能强大的开源大语言模型)复杂的依赖环境和硬件要求,手动配置不仅耗时耗力,而且难以维护。于是我选择使用Docker Compose模式部署,Docker Compose作为一种轻量级的容器编排工具,成为了本地部署或中小规模生产环境的首选。它通过一个YAML文件定义多容器应用的服务、网络和卷,能够确保环境的一致性,极大简化了部署流程。龙虾官网虽然很简单的一笔带过安装方法,但里面的坑属实不少,本文将带你通过Docker Compose实战部署OpenClaw,并深入探讨其中的优缺点、配置流程及常见“坑点”

01.为何选择Docker Compose

在动手之前,我们需要明确为何选择这种方式,以及它带来的权衡

优点:

● 环境隔离与一致性:这是Docker的核心优势。OpenClaw依赖特定版本的CUDA、Python库和系统工具。通过容器化,我们可以将这些依赖“打包”,避免污染宿主机环境,也解决了“在我机器上能跑”的经典难题

● 简化编排:OpenClaw往往不是孤立运行的。在实际应用中,它可能需要配合向量数据库(如ChromaDB)、缓存服务(如Redis)或API网关。Docker Compose允许我们在一个文件中定义所有这些服务,并通过一条命令启动整个生态系统

● 版本控制与复用:docker-compose.yml文件是纯文本,可以纳入Git进行版本控制。这意味着你可以精确复现某个特定时间点的系统状态,或者将配置分享给团队成员,实现“一键部署”

缺点:

● 性能开销:虽然Docker在Linux上的性能损耗较小,但依然存在。特别是对于GPU密集型的大模型推理任务,容器化可能会带来微小的延迟增加

● 调试复杂性:当容器内出现问题时,由于多了一层抽象,排查问题的难度会增加。你需要熟悉docker logs、docker exec等命令才能深入容器内部查看状态

● 学习曲线:对于不熟悉容器技术的开发者,理解镜像、容器、卷、网络等概念需要一定的时间成本

02.直接上手

第一步  安装Docker

Windows系统安装Docker Desktop for Windows,直接官网下载安装包安装即可
Linux系统以CentOS7为例
#1.替换 Yum 源为阿里云源sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.baksudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.reposudo yum clean all && sudo yum makecache#2.安装依赖包sudo yum install -y yum-utils device-mapper-persistent-data lvm2#3.添加阿里云 DockerCE源sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#4.查看并安装稳定版本(推荐 24.0.7 或 20.10.9)yum list docker-ce --showduplicates | sort -rsudo yum install -y docker-ce-24.0.7-1.el7 docker-ce-cli-24.0.7-1.el7 containerd.io
第二步  拉取OpenClaw源码并初始化
##没装git也没事,直接进网址下载.zip文件下来就行git clone https://github.com/openclaw/openclaw.gitcd openclawbash docker-setup.sh

这里的脚本会创建 ~/.openclaw(配置与密钥)和 ~/openclaw/workspace(代理工作区)

第三步  调整配置
这里只讲两个重要的配置文件,按需改动里面的部分内容即可,重要部分必须调整
/openclaw-main/docker-compose.yml文件
#yml内容说明services:  openclaw-gateway:    image: ${OPENCLAW_IMAGE:-openclaw:local}    environment:      HOME/home/node      TERM: xterm-256color      OPENCLAW_GATEWAY_TOKEN${OPENCLAW_GATEWAY_TOKEN:-}      OPENCLAW_ALLOW_INSECURE_PRIVATE_WS${OPENCLAW_ALLOW_INSECURE_PRIVATE_WS:-}      CLAUDE_AI_SESSION_KEY${CLAUDE_AI_SESSION_KEY:-}      CLAUDE_WEB_SESSION_KEY${CLAUDE_WEB_SESSION_KEY:-}      CLAUDE_WEB_COOKIE${CLAUDE_WEB_COOKIE:-}      TZ${OPENCLAW_TZ:-UTC}      ##重要:允许哪些网址(域名或 IP)来访问我的管理后台(Control UI)      OPENCLAW_GATEWAY_CONTROL_UI_ALLOWED_ORIGINS"http://宿主机ip:18789"    volumes:      ##配置文件路径配置      - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw      ##工作空间路径配置      - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace    ports:      ##网关端口,用于处理所有的请求      - "${OPENCLAW_GATEWAY_PORT:-18789}:18789"      ##桥接服务端口,用于处理与外部消息渠道(如 WhatsApp、Telegram 等)的连接      - "${OPENCLAW_BRIDGE_PORT:-18790}:18790"    init: true    restart: unless-stopped    command:      [        "node",        "dist/index.js",        "gateway",        "--bind",        "${OPENCLAW_GATEWAY_BIND:-lan}",        "--port",        "18789",      ]    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  openclaw-cli:    image: ${OPENCLAW_IMAGE:-openclaw:local}    network_mode: "service:openclaw-gateway"    cap_drop:      - NET_RAW      - NET_ADMIN    security_opt:      - no-new-privileges:true    environment:      HOME/home/node      TERM: xterm-256color      OPENCLAW_GATEWAY_TOKEN${OPENCLAW_GATEWAY_TOKEN:-}      OPENCLAW_ALLOW_INSECURE_PRIVATE_WS${OPENCLAW_ALLOW_INSECURE_PRIVATE_WS:-}      BROWSER: echo      CLAUDE_AI_SESSION_KEY${CLAUDE_AI_SESSION_KEY:-}      CLAUDE_WEB_SESSION_KEY${CLAUDE_WEB_SESSION_KEY:-}      CLAUDE_WEB_COOKIE${CLAUDE_WEB_COOKIE:-}      TZ${OPENCLAW_TZ:-UTC}    volumes:      - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw      - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace    stdin_open: true    tty: true    init: true    entrypoint: ["node""dist/index.js"]    depends_on:      - openclaw-gateway

/openclaw-main/.env环境变量配置文件,可以通过该文件统一配置docker-compose.yml文件中的变量

OPENCLAW_GATEWAY_TOKEN 该配置需要一个token,两种生成方式

#方式1:使用 OpenClaw 命令(推荐)openclaw token generate#方式2:使用系统命令生成随机字符串openssl rand -hex 32
#.envOPENCLAW_CONFIG_DIR=/root/.openclawOPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspaceOPENCLAW_GATEWAY_PORT=18789OPENCLAW_BRIDGE_PORT=18790OPENCLAW_GATEWAY_BIND=lanOPENCLAW_GATEWAY_TOKEN=OPENCLAW_IMAGE=openclaw:localOPENCLAW_DOCKER_SOCKET=/var/run/docker.sock
第四步  启动服务
先说下几个重要的docker compose常用命令,需要注意的是docker compose命令都要在openclaw-main文件夹下执行
使用命令启动服务,若是报错Missing config等错误可以先执行setup命令
##启动服务docker compose up -d##停止服务docker compose down##查看日志docker compose logs##openclaw官网会告诉你直接用下面这个命令启动docker compose run --rm openclaw-cli dashboard --no-open##但直接启动可能也有问题,可以先执行一下设置命令,完成后会自动删除容器docker compose run --rm openclaw-cli setup
第五步  进入OpenClaw Control UI页面
浏览器访问 http://宿主机ip:18789
注意网络是否畅通,端口号是否改动,ALLOWED_ORIGINS配置项是否放开ip
下面需要进入页面进行配置大模型
进入配置-->点击Raw
可以看到一些配置项,以阿里百炼平台举例,可以进入百炼官网找到配置内容进行copy,将apikey、secretKey复制过来,模型配置等复制过来即可