“ 不是在学习,就是在学习的路上。。。。。。”
写这一篇文章,主要是有些小伙伴问起本地部署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
#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
##没装git也没事,直接进网址下载.zip文件下来就行git clone https://github.com/openclaw/openclaw.gitcd openclawbash docker-setup.sh
这里的脚本会创建 ~/.openclaw(配置与密钥)和 ~/openclaw/workspace(代理工作区)
#yml内容说明services:openclaw-gateway:image: ${OPENCLAW_IMAGE:-openclaw:local}environment:HOME: /home/nodeTERM: xterm-256colorOPENCLAW_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/workspaceports:##网关端口,用于处理所有的请求- "${OPENCLAW_GATEWAY_PORT:-18789}:18789"##桥接服务端口,用于处理与外部消息渠道(如 WhatsApp、Telegram 等)的连接- "${OPENCLAW_BRIDGE_PORT:-18790}:18790"init: truerestart: unless-stoppedcommand:["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: 30stimeout: 5sretries: 5start_period: 20sopenclaw-cli:image: ${OPENCLAW_IMAGE:-openclaw:local}network_mode: "service:openclaw-gateway"cap_drop:- NET_RAW- NET_ADMINsecurity_opt:- no-new-privileges:trueenvironment:HOME: /home/nodeTERM: xterm-256colorOPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN:-}OPENCLAW_ALLOW_INSECURE_PRIVATE_WS: ${OPENCLAW_ALLOW_INSECURE_PRIVATE_WS:-}BROWSER: echoCLAUDE_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/workspacestdin_open: truetty: trueinit: trueentrypoint: ["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 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



夜雨聆风