腾讯云部署OpenClaw完整指南:从Docker到Ollama的智能体落地实践

腾讯云部署OpenClaw完整指南:从Docker到Ollama的智能体落地实践 最近在折腾AI Agent相关的东西朋友圈里好几个做自动化工作流的朋友都在聊OpenClaw这个项目之前叫Clawdbot改名之后热度反而更高了。我花了大半个周末把OpenClaw完整部署到了腾讯云上中间踩了不少坑也把整个部署链路理顺了从云服务器选型、Docker环境搭建、Redis配置、镜像构建推到腾讯云容器镜像服务再到接Ollama本地大模型和OpenClaw的Skill扩展基本是一套能直接照着做的完整流程。这篇文章就把我实际的部署过程、配置思路和排错记录全部拆开聊适合想在国内云环境下手动部署OpenClaw、又不想被零散教程带偏的朋友参考。1. 为什么选腾讯云部署OpenClaw选型逻辑与坑前预习OpenClaw本质是一个智能体运行框架它把模型调用、工具调用、消息渠道比如微信、飞书、Telegram这类IM、任务编排全部聚合到一个进程里。你可以在Windows/Mac本机跑也可以扔到云端跑但实际用下来云端部署几乎是刚需。1.1 本地跑和云端跑的差异本地跑OpenClaw最直接的问题是网络环境和进程稳定性。OpenClaw要跟各种模型API通信要接收IM平台回调本机如果断网、睡眠、重启Agent就跟着断了。而且它内部的定时任务、消息轮询、Skill脚本执行都依赖一个常驻进程放到云端CVM上配合systemd或者Docker的restart策略才能把它当作一个“服务”来养而不是一个“临时脚本”。腾讯云这一侧我选的是轻量应用服务器配置2核4G系统镜像选了Ubuntu 22.04 LTS。这个配置跑OpenClaw本体加一个Ollama的小参数量模型比如qwen2.5:7b是够用的但如果要跑更大的模型4G内存会非常紧张建议至少8G。1.2 部署方案的选择Docker还是裸进程我一开始想直接裸机部署也就是在Ubuntu上装Node.js、Python环境然后拉OpenClaw源码启动。好处是省资源、好调试坏处是环境依赖极其容易乱。OpenClaw的依赖链涉及Node.js版本、Python解释器、各种native模块比如sharp、better-sqlite3这类本机装一遍之后系统环境就被“污染”了升级版本时经常出现依赖冲突。后来我改成Docker部署镜像构建、版本切换、数据持久化都变得干净很多而且腾讯云CVM对Docker的支持非常成熟后面的镜像推送流程也很顺。所以我的最终选型是组件方案云服务器腾讯云轻量应用服务器 2C4GUbuntu 22.04容器环境Docker CE 24.x docker compose v2镜像托管腾讯云容器镜像服务个人版Agent框架OpenClaw原Clawdbot本地模型Ollama qwen2.5:7b可选消息通道微信个人号 / 企业微信群机器人1.3 部署之前必须先想清楚的事部署OpenClaw之前最好先明确几个问题否则后面配置会反复改。第一你的模型API从哪里来OpenClaw支持OpenAI兼容接口、Anthropic风格接口也可以接Ollama、vLLM这类本地推理服务。如果你有线上大模型API Key部署流程会更简单如果走Ollama本地模型就需要额外处理内网通信和模型加载。第二你的消息渠道是哪种OpenClaw对微信的支持力度很大但微信的登录凭证、扫码机制、风控规则在各个版本差异很大部署时调试IM登录的时间往往比安装本身还久。第三你的Skill脚本打算怎么管理OpenClaw的Skill是一套可插拔的自动化能力有的是Python脚本有的是Node脚本有的调外部API。这些Skill的依赖必须在容器里提前准备好否则运行时会报“module not found”。把这些前置问题想清楚再往下走部署过程就不会反复推倒重来。2. 腾讯云侧的三件套准备安全组、Docker与持久化目录进入实操环节。腾讯云服务器的初始配置有几个细节容易踩坑这里一步步说清楚。2.1 安全组规则不能只开22端口很多教程只会让你开一个22端口用于SSH但OpenClaw部署完成后你需要访问它的Web控制台、调试API这些端口如果不开你会发现服务明明起来了却连不上。我实际开通的安全组规则如下端口协议用途22TCPSSH登录80TCP可选Web服务反代3000TCPOpenClaw Web控制台默认端口按版本可能不同11434TCPOllama默认API端口仅建议内网开放8080TCP可选调试用注意如果Ollama和OpenClaw部署在同一台机器上Ollama端口完全不需要对公网开放只需要监听127.0.0.1或者Docker内网地址就行没必要暴露到公网减少扫描风险。登录服务器后我习惯先更新系统包并安装基础工具sudo apt update sudo apt upgrade -y sudo apt install -y git curl wget vim htop2.2 Docker安装与镜像加速配置腾讯云的Ubuntu镜像本身没有预装Docker需要手动装。用apt源直接装Docker官方源有时候很慢国内建议直接用腾讯云镜像源curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository deb [archamd64] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin装完确认版本docker --version docker compose versionDocker安装好之后还要处理镜像加速。虽然腾讯云容器镜像服务自己的域名可以不用加速但拉取Docker Hub上的公共镜像确实慢尤其是openclaw相关的镜像有时候几百兆硬拉能等到怀疑人生。我给/etc/docker/daemon.json配置了加速地址{ registry-mirrors: [ https://mirror.ccs.tencentyun.com ], data-root: /data/docker, log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } }这里我把data-root改到了/data/docker同时限制容器日志大小。OpenClaw跑起来之后日志输出很频繁尤其是调用了Skill或者出错重试的时候不限制日志文件大小几天就能把磁盘写满这是很实际的一个坑。修改后重启Dockersudo systemctl daemon-reload sudo systemctl restart docker2.3 持久化目录规划数据不能随容器销毁Docker容器是无状态的容器删了重来里面的数据就没了。OpenClaw需要持久化的数据至少有这几类配置文件config、环境变量数据库文件默认是SQLite或本地KV存储日志文件Skill脚本目录微信登录凭证/缓存我建议在宿主机上建一个统一目录sudo mkdir -p /data/openclaw/{config,data,logs,skills}这些目录在后面的docker run或者compose配置中通过volume挂载进容器。这样无论是升级OpenClaw版本还是容器崩溃重启数据都不会丢失。3. Redis配置的坑改完密码重启失败问题其实不在Redis我在部署OpenClaw的过程中顺手在腾讯云服务器上装了Redis用来做消息队列和缓存。但这里遇到一个很经典的问题修改Redis密码之后只要重启Redis服务就再也连不上了。3.1 问题表象与初步排查我的操作流程是sudo apt install redis-server sudo vim /etc/redis/redis.conf # 修改 requirepass 为自定义密码 sudo systemctl restart redis重启之后用redis-cli ping返回NOAUTH Authentication required这个其实正常因为我设置了密码但没认证。接着我用redis-cli -a 我的密码 ping结果还是报错ERR Client sent AUTH, but no password is set。这个报错很迷惑配置文件里明明写了requirepass为什么Redis提示“没有设置密码”3.2 根因定位systemd服务重写了配置路径查了很久最后发现问题出在Redis的systemd unit文件上。Ubuntu 22.04的redis-server包默认是受/etc/redis/redis.conf控制的但systemd服务里有一个-c参数指向配置文件如果你安装的是带哨兵模式的redis-sentinel或者同时存在多个Redis实例systemd会加载另一个配置文件。我这里的情况更直接redis-server --version显示的是7.0版本但默认的service文件里没有加载我修改的/etc/redis/redis.conf它加载的是/etc/redis/redis.conf里的旧配置缓存而我改完密码后忘了检查systemd的override。另一个常见原因Redis 7.0之后引入了ACL机制user default on nopass ~* * all这种默认用户配置会覆盖requirepass。如果配置文件里同时有ACL和requirepass需要确认默认用户是否被设置成nopass如果是requirepass就不生效。最终解决办法是直接用redis-cli在线修改密码并持久化redis-cli CONFIG SET requirepass 你的新密码 AUTH 你的新密码 CONFIG REWRITECONFIG REWRITE会把当前运行配置写回配置文件然后systemd重启后也能保持。这也是OpenClaw接入Redis时很关键的一步如果Redis认证信息对不上OpenClaw启动时会一直报连接错误反复重试日志刷屏。3.3 OpenClaw里的Redis配置如果OpenClaw配置了Redis作为channel或者缓存后端需要在.env或config文件里填对地址、端口、密码和db编号REDIS_HOST127.0.0.1 REDIS_PORT6379 REDIS_PASSWORD你的新密码 REDIS_DB0注意如果OpenClaw运行在Docker容器里而Redis跑在宿主机上127.0.0.1就指向容器内部了这时候应该填宿主机内网IP或者让容器使用host网络模式。这个细节不处理好就会一直出现“连接拒绝”。4. OpenClaw本体部署源码安装到Docker镜像的完整链路OpenClaw的部署方式有几种一是直接用安装脚本二是用Docker镜像三是从源码构建。我这次完整走了一遍构建镜像并推送到腾讯云容器镜像服务的流程这里详细拆解。4.1 为什么要用腾讯云容器镜像服务直接把镜像放在腾讯云的机器上当然能跑但如果你有多台服务器或者后续要重置机器每次都要重新构建镜像非常痛苦。把镜像推到腾讯云容器镜像服务的个人版仓库我可以在任何一台腾讯云CVM上docker pull速度非常快因为走的是内网。腾讯云容器镜像服务的地址格式是ccr.ccs.tencentyun.com/你的命名空间/镜像名:标签个人版镜像仓库需要先在控制台创建命名空间和仓库然后用docker login登录。4.2 从源码构建OpenClaw镜像OpenClaw官方提供的镜像不一定覆盖最新的release所以我更倾向于拉源码自己构建。具体流程如下。先在服务器或者本地开发机克隆代码git clone https://github.com/openclaw/openclaw.git cd openclaw查看当前版本git tag -l git checkout v2.0.0这里的版本号要根据你实际拉取的release来定。构建镜像docker build -t ccr.ccs.tencentyun.com/myopenclaw/openclaw:2.0.0 .这一步可能会有几个坑构建过程中要下载大量依赖国内网络环境建议先配置好npm镜像和pip镜像。Dockerfile里的基础镜像如果来自Docker Hub拉取可能会很慢可以先把基础镜像pull下来并tag到加速地址。如果内存只有4G构建OpenClaw的前端资源时可能会OOM建议构建时加上--memory3g限制或者临时加Swap。4.3 登录并推送镜像到腾讯云构建成功后登录腾讯云镜像仓库docker login ccr.ccs.tencentyun.com --username 你的腾讯云账号ID密码不是云服务器登录密码而是腾讯云容器镜像服务里的访问凭证需要在控制台生成。登录后推送docker push ccr.ccs.tencentyun.com/myopenclaw/openclaw:2.0.0推送过程中如果镜像分层比较大建议把/data/docker挂在SSD盘上否则I/O会成为瓶颈。4.4 用compose编排OpenClaw容器推送完成之后在服务器上创建一个compose文件来编排服务。version: 3.8 services: openclaw: image: ccr.ccs.tencentyun.com/myopenclaw/openclaw:2.0.0 container_name: openclaw restart: unless-stopped ports: - 3000:3000 volumes: - /data/openclaw/config:/app/config - /data/openclaw/data:/app/data - /data/openclaw/logs:/app/logs - /data/openclaw/skills:/app/skills environment: - TZAsia/Shanghai - OPENCLAW_CONFIG_PATH/app/config networks: - openclaw-net networks: openclaw-net: driver: bridge启动docker compose up -d docker compose logs -f openclaw这套compose配置的好处是以后升级版本只需要把镜像tag改掉再docker compose up -d数据全部保留在宿主机目录里基本不会丢。5. 配置核心解密连接微信、Ollama与NVIDIA NIM容器启动只是第一步真正需要耐心的是OpenClaw的配置文件。这里把几个关键配置项按实际使用场景拆开讲。5.1 主配置文件的组成OpenClaw的配置文件可以是YAML或JSON一般位于config目录下。它大体分为几个块agentAgent基础参数、channels消息渠道、models模型配置、skills技能开关与参数、storage存储设置。我第一次打开配置文件时有点懵因为字段非常多但实际上大部分都有默认值。关键要改的就是渠道、模型和Skill三块。5.2 微信渠道接入OpenClaw对微信的支持分为个人微信和公众号、企业微信。个人微信的接入原理是模拟客户端登录因此对登录环境比较敏感。实际配置项大概长这样channels: wechat: enabled: true mode: personal storage: file login_type: qrcode启动之后控制台会输出一个二维码链接用微信扫码完成登录。这里有几个经验个人微信账号别用刚注册的小号容易触发风控。登录凭证会保存在storage目录容器重启后不需要重复扫码但如果你重新部署、storage目录没有持久化就会要求重新登录。如果扫码后长期不成功大概率是网络出口IP被风控了可以尝试切换网络出口或者等一段时间再试。5.3 Ollama本地部署作为模型后端如果你不想把对话数据发到外部API完全可以接Ollama本地部署。在腾讯云服务器上装Ollama很简单curl -fsSL https://ollama.com/install.sh | sh然后拉取模型ollama pull qwen2.5:7b启动Ollama服务systemctl start ollama systemctl enable ollama确认Ollama监听端口ss -tnlp | grep 11434Ollama默认监听127.0.0.1:11434为了让OpenClaw容器能访问宿主机Ollama需要让Ollama监听所有网卡或者把OpenClaw和Ollama放进同一个Docker网络。我采用的是前者修改/etc/systemd/system/ollama.service的环境变量[Service] EnvironmentOLLAMA_HOST0.0.0.0:11434改完重启systemctl daemon-reload systemctl restart ollama然后在OpenClaw配置里把模型地址指到宿主机内网IPmodels: default: provider: ollama base_url: http://宿主机内网IP:11434 model: qwen2.5:7b temperature: 0.7注意如果OpenClaw是通过Docker Compose启动宿主机内网IP不能写成localhost或127.0.0.1要写腾讯云服务器的内网IP或者用host.docker.internal部分平台不支持。最简单的方式是docker inspect看一下容器所在网桥的网关地址。5.4 配置NVIDIA NIM的补充如果你有GPU服务器并且想用NVIDIA的NIM推理服务OpenClaw也支持。搜索关键词里也有不少人在问OpenClaw配置NVIDIA NIM这里顺带提一下。NVIDIA NIM本质上也是提供一个OpenAI兼容的推理端点配置方式和Ollama类似只是base_url指向NIM的地址模型名换成NIM上部署的模型名。要注意NIM的端点可能需要额外的API Key或Headersmodels: nim: provider: openai base_url: http://NIM地址/v1 api_key: nvapi-xxxx model: meta/llama-3.1-8b-instruct5.5 PowerShell安装OpenClaw的目录指定问题Windows本机安装OpenClaw也有不少人问特别是在PowerShell里能不能指定目录。官方安装脚本默认会把OpenClaw装到用户目录下但用PowerShell执行安装时openclaw命令经常出现无法识别的报错openclaw : 无法将“openclaw”项识别为 cmdlet、函数、脚本文件或可运行程序的名称这个报错基本都是环境变量没有刷新。安装完成后关掉PowerShell重新打开或者手动刷新PATH$env:Path [System.Environment]::GetEnvironmentVariable(Path, Machine) ; [System.Environment]::GetEnvironmentVariable(Path, User)如果还要指定安装目录可以在Windows安装脚本里设置安装路径参数或者在安装完成后把整个文件夹移动到你想要的位置再把该目录加入PATH。我实际操作时是直接改用户环境变量把OpenClaw的安装路径加进去然后重新登录系统。6. Skill扩展与升级维护从安装到自食其力OpenClaw真正强大的地方在于Skill机制你可以把重复性工作封装成一个Skill比如本地文件整理、网页信息抓取、自动归档邮件甚至是调用ComfyUI生成图片然后通过对话或定时任务触发。6.1 Skill的目录结构和安装要点每个Skill是独立的目录里面有SKILL.md描述文件、main.py或者script.js这样的执行脚本以及可选的requirements.txt依赖清单。OpenClaw在识别Skill时会扫描配置里指定的Skill目录。安装Skill不要只拷贝脚本requirements.txt里的依赖必须装进OpenClaw容器。如果容器是自定义镜像可以在构建时把Skill的依赖一起打进去如果用现有镜像通过volume挂载Skill目录后还需要在容器内安装依赖或者把Skill放到一个带独立依赖的运行时沙箱里。我吃过一次亏挂载了一个Python Skill脚本本身没问题但容器里没有requests和beautifulsoup4运行时报错排查了半天才发现是依赖缺失。6.2 版本升级的正确姿势OpenClaw迭代速度很快从搜索热词里就能看到“如何升级openclaw版本”被反复问。升级不是重新拉代码然后重启那么简单要按这个顺序操作先备份把config、data、skills目录完整打包备份。拉取新镜像docker pull ccr.ccs.tencentyun.com/myopenclaw/openclaw:新版本查看CHANGELOG新版本经常有配置格式变更我的习惯是先跑一下docker run --rm 新镜像 /app/openclaw doctor之类的自检命令看看配置是否兼容。更新compose文件里的镜像标签。执行docker compose up -d。观察日志确认没有字段废弃、数据库迁移报错。关于卸载OpenClaw如果是Docker部署的直接docker compose down -v会把容器和卷一起删除但宿主机上的/data/openclaw目录不会自动删需要手动清理。这也是为什么我坚持把OpenClaw的数据都放在同一个目录下卸载时清楚利落。6.3 与ComfyUI、Codex等生态的联动热词里不少人把OpenClaw和ComfyUI本地部署、Codex放在一起搜。这类联动的核心思路是OpenClaw作为Agent调度器负责理解任务并调用相应的SkillComfyUI是一个执行图像生成的工作流服务Codex则是代码生成和执行的辅助工具。在腾讯云上同时部署ComfyUI和OpenClaw时建议给ComfyUI单独分配端口和显存如果有GPUOpenClaw通过Skill脚本调用ComfyUI的API接口来出图。如果CPU服务器ComfyUI跑SD模型会非常吃力不建议这么做。7. 常见报错排查链路按我的排错顺序来省一半时间部署过程中肯定会遇到各种报错这里把几个高频问题按实际排查链路整理出来。7.1 “openclaw无法识别为cmdlet”的完整排查这个报错我在Windows上遇到过好几次不只是OpenClaw很多命令行工具都有这个毛病。排查顺序是先确认安装是否真的成功。用ls看一下安装目录里的可执行文件是否存在。如果存在问题就是PATH没有生效。再检查PATH$env:Path -split ; | Select-String -Pattern openclaw如果输出为空说明安装程序没有把目录写入环境变量手动添加[Environment]::SetEnvironmentVariable(Path, $env:Path ;C:\你的OpenClaw目录, User)改完关掉重开终端再执行openclaw --version验证。7.2 腾讯云WAF拦截与误报的处理如果你给OpenClaw域名接入了腾讯云的WAF会有一定概率出现OpenClaw API被判定为异常请求而拦截的情况。热词里“腾讯云WAF绕过”大概率说的就是这种问题但我不会去讲什么绕过WAF的思路那是安全红线。正确的做法是配置WAF的白名单规则或放行策略把你自己的合法域名、API路径、UA标识加进白名单而不是绕过防护。如果你用的是腾讯云CDN/WAF组合建议先在小流量下观察日志看拦截的URL和规则ID然后在WAF控制台添加精准白名单。OpenClaw的Web控制台和回调接口通常需要放行但一定要限制来源IP或来源地域别把整个规则都关掉。7.3 OpenClaw容器频繁重启如果docker compose ps显示容器一直在重启先看日志docker logs --tail 200 openclaw比较常见的几类原因配置格式错误或必填项缺失程序启动自检直接退出。端口被占用比如宿主机3000端口已经有一个旧容器。权限问题volume挂载的config目录没有写权限。数据库版本不兼容老数据文件无法被新版本读取。定位到原因后按上面说的升级流程处理不要直接在运行的容器里改文件因为容器重建后改动全丢。8. 部署完之后的稳定性调优与使用心得OpenClaw在腾讯云上跑起来只是第一步真正让Agent稳定可用还需要做几件事。8.1 给容器设置资源限制OpenClaw本身内存占用不算高但加载Skill和调用模型时会突然飙升。在compose里给容器加资源限制deploy: resources: limits: memory: 2g这样即使OpenClaw内存泄漏也不会把整台服务器拖死Docker会自动OOM杀掉容器配合restart: unless-stopped又能自动拉起。8.2 日志轮转与定期巡检前面提到在daemon.json里设置了日志大小限制这是最基础的一层防线。我还定时写了一个cron脚本每天检查磁盘空间和数据目录大小。#!/bin/bash # 每天凌晨3点清理多余日志和临时文件 docker system prune -f --volumes find /data/openclaw/logs -name *.log -mtime 7 -delete加进crontabcrontab -e 0 3 * * * /usr/local/bin/openclaw-cleanup.sh8.3 关于Dify、vLLM、DeepSeek等组件的联动搜索热词里出现了很多OpenClaw与Dify、DeepSeek、vLLM、Zabbix等组件的组合需求。其实核心路径都是通用的OpenClaw不是唯一的大模型应用框架它更像是一个能力层把各种工具和模型编排起来。你可以用Dify搭一个可视化的知识库工作流然后用OpenClaw作为对话入口通过API调用Dify发布的服务也可以用vLLM部署一个高吞吐推理服务给OpenClaw当模型后端DeepSeek的API也可以直接作为OpenClaw的默认模型只要配置兼容OpenAI接口。部署的底层思路都是一致的把每个组件当成一个独立服务明确端口、API Key、数据目录再用Docker网络把它们串起来。不要试图把东西全部塞进一个容器维护起来会很痛苦。8.4 我个人对这套部署方案的最终体会折腾完这一整套我的感受是OpenClaw的部署难度不低但它的回报是“一个真正属于你自己的Agent基座”这句话不是空话。你把它接入微信之后每天定时整理信息、调用Skill跑脚本、按设定好的流程处理任务这套东西跑通后的稳定感远远超过各种SaaS平台提供的托管Agent。如果你也是第一次在腾讯云上部署OpenClaw建议按这样的节奏来先创建一台干净的Ubuntu服务器用Docker跑通OpenClaw本体再接入一个最简单的模型API把对话走通之后再逐步接微信、加Ollama、挂载Skill、调整自动化任务。每一步都验证成功再进入下一步别一上来就追求全功能那样出问题的时候连排查方向都没有。最后再分享一个小技巧OpenClaw的配置文件改动后不需要重启整个容器很多配置项支持热加载在控制台里执行reload命令即可生效。但如果是模型provider或者渠道相关的配置还是老实重启容器免得出现缓存不一致的诡异问题。祝大家都能跑出一个稳定听话的Agent。