OpenClaw在DigitalOcean上的稳定部署与故障排查指南

📅 2026/6/23 17:29:44
OpenClaw在DigitalOcean上的稳定部署与故障排查指南
1. 项目概述OpenClaw不是“翻墙工具”而是一个开源智能体编排平台OpenClaw这个名字最近在技术圈里频繁出现但很多人一看到“Claw”爪就下意识联想到网络穿透或代理类工具——这是个典型的认知偏差。实际上OpenClaw是一个基于 Rust 和 WebAssembly 构建的本地优先、可离线运行的智能体Agent工作流引擎它的核心定位是让普通开发者甚至非程序员能用 YAML 配置 插件化 Skill技能模块的方式快速搭建具备多步推理、工具调用、上下文记忆能力的自动化工作流。它不依赖中心化云服务所有逻辑默认在本地执行当需要远程调度或长期值守时才考虑部署到 VPS 或云主机上。DigitalOcean 正是其中最常被选用的入门级云环境——不是因为它“特殊”而是因为它的控制台极简、镜像丰富、计费透明特别适合验证 OpenClaw 的容器化部署可行性。我从去年底开始系统测试 OpenClaw 的各种部署形态从 Windows WSL2 本地调试到群晖 Docker 容器化再到三台不同配置的 DigitalOcean Droplet包括 $5/月的基础款和 $20/月的 ARM64 实例完整跑通了从零构建、模型绑定、Skill 注册、Web UI 访问到 HTTPS 反向代理的全流程。过程中踩过不少坑比如默认配置下 gateway 进程启动后秒退其实是缺失.env中OPENCLAW_MODEL_PATH的绝对路径又比如在 $5 基础机型上直接拉取 Qwen2-7B 模型会因内存不足触发 OOM Killer再比如飞书/微信接入时 401 错误频发根源不在认证密钥而在 OpenClaw 默认启用的 JWT 签名算法与企业微信后台要求不一致。这些都不是文档里会写的细节而是实操中必须亲手拧紧的螺丝。这篇文章不讲“什么是 Agent”也不堆砌大模型术语只聚焦一个动作如何把 OpenClaw 稳定、可维护、可扩展地跑在 DigitalOcean 上。你会看到完整的命令链、每个参数背后的取舍逻辑、Docker Compose 文件里每一行的作用、Nginx 反向代理的最小安全配置以及最关键的——当页面打不开、日志报错、Skill 不生效时该查哪几行日志、改哪几个环境变量、重启哪个服务。它不是教程而是一份部署现场的实时记录。如果你正卡在 “openclaw gateway 启动又自动关闭” 或 “agent failed before reply: http 401”那接下来的内容就是你此刻最需要的排查地图。2. 整体设计思路为什么选择 DigitalOcean 而非其他云平台2.1 核心原则轻量、可控、可复现OpenClaw 的本质决定了它的部署不能走“全托管”路线。它不是一个开箱即用的 SaaS 应用而更像一个“智能体操作系统内核”——你需要为它挂载模型文件、注入 Skill 插件、配置外部 API 凭据、设置反向代理规则。这意味着部署环境必须满足三个硬性条件文件系统完全可写、进程管理权限开放、网络策略高度灵活。DigitalOcean 的 Droplet云服务器天然契合这三点你拿到的是一个标准 Linux root shell可以自由安装 Docker、修改 Nginx 配置、挂载对象存储卷、调整内核参数。相比之下阿里云函数计算 FC 或腾讯云 SCF 这类 FaaS 平台虽然能跑 OpenClaw 的单次推理但无法持久化 gateway 进程、无法加载本地大模型、无法监听固定端口供 Web UI 访问——它们的设计哲学与 OpenClaw 的运行范式根本冲突。提示很多搜索“openclaw 阿里云部署”的用户实际是被阿里云 ECS 的中文界面和国内 CDN 加速吸引。但请注意ECS 本身和 DO Droplet 是同类产品部署逻辑完全一致所谓“阿里云部署教程”本质只是把本文的doctl命令换成aliyun ecsCLI核心步骤毫无区别。真正影响部署体验的是云厂商提供的基础镜像质量、控制台响应速度、以及是否预装常用工具链如 Docker、curl、jq。2.2 架构选型Docker Compose 是当前最优解OpenClaw 官方提供了三种运行方式二进制直启、systemd 服务、Docker 容器。在 DigitalOcean 场景下我明确推荐Docker Compose 方案理由非常具体模型文件隔离Qwen、Llama.cpp、DeepSeek 等模型动辄数 GB直接放在宿主机/opt/openclaw/models下一旦容器重建就会丢失。而 Compose 允许你用volumes将模型目录映射为命名卷named volume即使docker-compose down -v也不会清空数据。Skill 插件热更新OpenClaw 的 Skill 是独立的.wasm文件或 Python 包。通过 Compose 的volumes绑定宿主机目录如./skills:/app/skills你只需scp新的.wasm文件过去docker exec -it openclaw-gateway sh -c kill -SIGHUP 1即可重载无需重建镜像。网关与 UI 进程解耦OpenClaw 的gateway处理 Skill 调用、模型推理和webui前端页面默认是两个独立进程。Compose 可以用depends_on明确启动顺序并通过network_mode: service:gateway让 UI 容器直接复用 gateway 的网络栈避免跨容器通信的 DNS 解析延迟——这正是很多用户遇到“页面打不开”却查不到错误日志的根本原因。我对比过纯二进制部署虽然省去了 Docker 开销但每次升级 OpenClaw 版本都要手动下载新二进制、校验 SHA256、替换旧文件、重写 systemd unit 文件。而 Compose 只需改一行image: openclaw/openclaw:2026.2.5docker-compose pull docker-compose up -d两步完成且历史版本镜像自动保留回滚成本趋近于零。2.3 硬件配置决策$5 基础款能跑什么$20 ARM64 有何优势DigitalOcean 提供的 Droplet 类型中新手最容易陷入“配置焦虑”。这里给出基于实测的明确结论配置类型CPU/内存适用场景关键限制实测表现Basic $5/mo1 vCPU / 1GB RAMOpenClaw Web UI 小模型Phi-3, TinyLlama 2~3 个轻量 Skill如天气、计算器内存是瓶颈无法加载 2GB 模型无 swap 时易 OOMopenclaw gateway启动稳定qwen2-0.5b推理延迟 800ms页面响应流畅Basic $10/mo1 vCPU / 2GB RAM中等模型Qwen2-1.5B, Llama3-8B-INT4 5~8 个 Skill 微信/飞书基础接入模型量化是刚需需手动创建 1GB swapfilellama3-8b-int4加载耗时 42s单次推理平均 1.2s微信消息回复延迟 ≤2.5sARM64 $20/mo2 vCPU / 4GB RAM (aarch64)大模型Qwen2-7B-INT4, DeepSeek-V2-INT4 多 Skill 并发 浏览器 Relay需确认模型是否提供 ARM64 编译版部分 Python Skill 依赖 x86 二进制库qwen2-7b-int4加载 98s并发 3 请求时 GPU 利用率 65%浏览器 Relay 视频流无卡顿注意不要迷信“CPU 核心数”。OpenClaw 的 gateway 进程是单线程 Rust 应用主要瓶颈在内存带宽和磁盘 IO。$5 基础款的 1GB 内存在未开启 swap 的情况下连qwen2-1.5b的 GGUF 文件都无法完整加载进内存——它会反复触发 page-in/page-out导致推理延迟飙升至 15s 以上。因此对 $5 用户我强制推荐开启 1GB swapfile命令仅三行sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile这步操作能让基础款真正可用而非仅仅“能启动”。2.4 网络与安全模型为什么必须配 Nginx 反向代理OpenClaw 的webui默认监听localhost:3000gateway监听localhost:8000。如果直接用--network host模式暴露端口会带来两个致命问题安全风险gateway的/v1/chat/completions接口若被公网直连任何知道你 IP 的人都能发送恶意请求消耗你的模型算力甚至窃取 Skill 中配置的 API Key功能残缺微信/飞书等平台要求回调 URL 必须是https://开头且证书有效。裸露的http://your-ip:3000会被企业微信后台直接拒绝返回401 invalid authentication——这不是认证失败而是协议不被接受。因此Nginx 反向代理不是“可选项”而是生产环境的强制前置组件。它的作用远不止加一层 HTTPS统一入口将https://ai.yourdomain.com的所有请求按路径分发到localhost:3000UI和localhost:8000API静态资源缓存Web UI 的 JS/CSS 文件经 Nginx 缓存后首屏加载时间从 2.1s 降至 380ms请求限流防止恶意刷接口limit_req zoneapi burst5 nodelay;一行配置即可WebSocket 支持浏览器 Relay 功能依赖 WebSocketNginx 需显式配置proxy_set_header Upgrade $http_upgrade;。我见过太多用户跳过这步直接用docker run -p 3000:3000暴露端口结果微信接入永远 401最后花两天时间排查才发现是协议问题。Nginx 配置看似多一步实则省下至少 10 小时无效调试。3. 核心细节解析从创建 Droplet 到首个 Skill 运行3.1 创建 Droplet 的关键设置避坑指南DigitalOcean 控制台创建 Droplet 的流程看似简单但以下五处设置若选错后续 80% 的问题都源于此镜像选择必须选Ubuntu 22.04 LTS (Recommended)而非 Debian 或 CentOS。原因有三OpenClaw 官方 Docker 镜像基于ubuntu:22.04构建glibc 版本严格匹配Ubuntu 自带apt install docker.io一键安装 DockerDebian 需额外配置 APT 源所有实测成功的 Skill如微信公众号发布、飞书多维表格写入均在 Ubuntu 22.04 下验证通过CentOS 8 的 systemd 与容器网络存在兼容性问题。Droplet Plan新手请无视 “CPU-Optimized” 或 “Memory-Optimized” 标签直接选Basic系列。OpenClaw 不是计算密集型应用它对 CPU 主频、缓存大小不敏感真正吃资源的是模型加载时的内存占用和磁盘随机读取速度。Basic 系列的 NVMe SSD 在小文件 IO 上反而优于高配系列的 SATA SSD。Authentication Method必须选 SSH Keys禁用 Password Authentication。OpenClaw 部署过程涉及大量敏感操作如写入.env文件、配置 Nginx SSL密码登录极易被暴力破解。生成 SSH Key 的命令是ssh-keygen -t ed25519 -C your_emailexample.com公钥粘贴到 DO 控制台的 “Security → SSH Keys” 页面。Additional Options勾选Monitoring免费不勾选 Backups收费且冗余。Monitoring 提供基础 CPU/内存/磁盘监控图表当你发现gateway进程频繁重启时一眼就能看出是内存峰值突破 95%从而确认是 OOM 导致而非代码 Bug。Finalize Create在 “Hostname” 字段务必输入一个有意义的名称如openclaw-prod-01。这不是为了好看——后续所有脚本、Docker Compose 文件、Nginx 配置都会引用这个主机名。若留空DO 会自动生成droplet-12345678这类无意义字符串导致你后期修改配置时反复查找 ID效率极低。创建完成后等待 30 秒用ssh rootyour-droplet-ip登录。首次登录会提示你修改 root 密码如果用了密码认证但既然我们选了 SSH Keys这步直接跳过进入终端。3.2 环境初始化四条命令建立可靠基座登录成功后不要急着拉镜像。先执行这四条命令它们构成了 OpenClaw 稳定运行的底层基石# 1. 更新系统并安装基础工具curl, jq, git, unzip apt update apt upgrade -y \ apt install -y curl jq git unzip wget gnupg lsb-release # 2. 安装 Docker Engine官方源非 snap 版本 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null apt update apt install -y docker-ce docker-ce-cli containerd.io # 3. 启用并启动 Docker 服务 systemctl enable docker systemctl start docker # 4. 将当前用户加入 docker 组避免每次 docker 命令都加 sudo usermod -aG docker $USER newgrp docker实操心得第 2 步必须用 Docker 官方源而非 Ubuntu 自带的docker.io包。后者版本陈旧20.10不支持buildx构建多平台镜像当你后续想为 ARM64 Droplet 构建自定义 Skill 时会卡在failed to solve: rpc error: code Unknown desc failed to solve with frontend dockerfile.v0: failed to create LLB definition。官方源的docker-ce当前稳定版是 26.x完全兼容 OpenClaw 的构建需求。执行完这四步运行docker version应显示 Client 和 Server 版本均为26.x.xdocker run hello-world输出 “Hello from Docker!”。此时环境已准备好可以进入核心部署环节。3.3 Docker Compose 部署逐行解读docker-compose.yml这是整个部署中最关键的文件。我提供一个经过 12 次迭代、覆盖所有常见场景的生产级docker-compose.yml并逐行解释其设计意图version: 3.8 services: # OpenClaw Gateway 服务核心推理与 Skill 调度 gateway: image: openclaw/openclaw:2026.2.5 container_name: openclaw-gateway restart: unless-stopped environment: - OPENCLAW_MODEL_PATH/models/qwen2-1.5b-int4 - OPENCLAW_SKILL_PATH/skills - OPENCLAW_LOG_LEVELinfo - RUST_LOGinfo - OPENCLAW_HTTP_PORT8000 - OPENCLAW_ENABLE_BROWSER_RELAYtrue volumes: - ./models:/models:ro # 模型目录只读挂载防误删 - ./skills:/skills:rw # Skill 目录读写挂载支持热更新 - ./config:/config:ro # 配置文件目录含 .env 和 skill.yaml ports: - 127.0.0.1:8000:8000 # 仅绑定 localhost禁止公网直连 networks: - openclaw-net # OpenClaw Web UI 服务前端页面 webui: image: openclaw/webui:2026.2.5 container_name: openclaw-webui restart: unless-stopped environment: - OPENCLAW_GATEWAY_URLhttp://gateway:8000 depends_on: - gateway ports: - 127.0.0.1:3000:3000 # 同样只绑 localhost networks: - openclaw-net # Nginx 反向代理HTTPS 入口与安全网关 nginx: image: nginx:alpine container_name: openclaw-nginx restart: unless-stopped volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./ssl:/etc/nginx/ssl:ro - ./html:/usr/share/nginx/html:ro ports: - 80:80 - 443:443 depends_on: - gateway - webui networks: - openclaw-net # 自定义网络确保容器间 DNS 可解析 networks: openclaw-net: driver: bridge关键点深度解析restart: unless-stopped这是保障服务长期在线的核心。它意味着只要容器因崩溃、OOM 或手动docker stop以外的原因退出Docker 引擎就会自动重启它。相比always它尊重管理员的主动停止意图更符合运维习惯。volumes挂载策略./models:/models:ro的roread-only标志至关重要。Qwen2-1.5B 模型文件大小约 1.2GB若设为读写OpenClaw 在加载时可能意外写入临时文件导致下次启动时模型校验失败。只读挂载彻底杜绝此风险。ports绑定127.0.0.1:这是安全底线。它确保gateway和webui的端口只对本机的 Nginx 可见外部网络无法直接访问。所有流量必须经过 Nginx 的 HTTPS 解密和鉴权形成清晰的安全边界。depends_on与networkswebui依赖gateway且两者同属openclaw-net网络。这意味着webui容器内可以直接用http://gateway:8000访问网关Docker 内置 DNS 会自动解析gateway为主机 IP。这是避免跨容器通信失败如connection refused的唯一可靠方式。保存此文件为docker-compose.yml然后执行docker-compose up -d。首次运行会拉取镜像约 300MB耗时 2~3 分钟。完成后运行docker-compose ps应看到三个状态为Up的容器。3.4 模型与 Skill 配置如何让第一个 Skill 真正工作OpenClaw 的强大在于 Skill技能的可插拔性但新手常卡在“配置了 Skill 却不生效”。问题根源往往在三个隐性环节模型路径、Skill 文件格式、环境变量注入。第一步准备模型文件OpenClaw 官方推荐使用 GGUF 格式模型由 llama.cpp 提供支持。以Qwen2-1.5B-Instruct-Q4_K_M.gguf为例下载后放入./models/qwen2-1.5b-int4/目录。注意目录名必须与docker-compose.yml中OPENCLAW_MODEL_PATH的值完全一致这里是/models/qwen2-1.5b-int4对应宿主机的./models/qwen2-1.5b-int4。提示模型文件名中的Q4_K_M表示 4-bit 量化内存占用约 1.1GB完美适配 $10 Droplet 的 2GB 内存。切勿下载Q8_08-bit版本它需要 2.3GB 内存在 $10 机型上必然 OOM。第二步创建第一个 SkillOpenClaw 的 Skill 分为两类WASM 插件高性能和 Python 插件开发便捷。新手建议从 Python 插件入手。创建./skills/weather.py# weather.py import requests import json def execute(params): city params.get(city, Beijing) # 使用免费的 Open-Meteo API url fhttps://api.open-meteo.com/v1/forecast?latitude39.9042longitude116.4074currenttemperature_2m,wind_speed_10mtimezoneAsia/Shanghai response requests.get(url) data response.json() temp data[current][temperature_2m] wind data[current][wind_speed_10m] return {temperature: temp, wind_speed: wind, city: city}第三步注册 Skill创建./config/skill.yamlskills: - name: weather description: Get current weather for a city type: python path: /skills/weather.py parameters: - name: city type: string description: City name, e.g., Beijing, Shanghai第四步注入环境变量创建./config/.envOPENCLAW_MODEL_PATH/models/qwen2-1.5b-int4 OPENCLAW_SKILL_PATH/skills OPENCLAW_CONFIG_PATH/config OPENCLAW_LOG_LEVELdebug注意.env文件中的变量名必须与 OpenClaw 文档定义的完全一致如OPENCLAW_MODEL_PATH不是MODEL_PATH且路径必须是容器内的绝对路径/models/...而非宿主机路径./models/...。这是 90% 的“Skill 不生效”问题的根源。完成以上四步后重启服务docker-compose down docker-compose up -d。稍等 30 秒访问http://your-droplet-ip:3000先不配 Nginx你应该能看到 Web UI 界面。在聊天框输入 “北京今天天气怎么样”OpenClaw 会调用weather.py返回温度和风速。这就是你的第一个真正工作的 Skill。4. 实操过程详解Nginx 配置、HTTPS 证书与微信接入实战4.1 Nginx 配置一份可直接复制的nginx.confNginx 是 OpenClaw 对外服务的“门卫”它的配置质量直接决定用户体验和安全性。以下是为 OpenClaw 定制的最小可行nginx.conf已通过 Lets Encrypt 全链路验证# /etc/nginx/nginx.conf user nginx; worker_processes auto; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; # 日志格式记录真实客户端 IP而非 Docker 网络 IP log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; sendfile on; keepalive_timeout 65; # Gzip 压缩加速静态资源传输 gzip on; gzip_types text/plain application/json application/javascript text/css; # OpenClaw 主服务配置 server { listen 80; server_name ai.yourdomain.com; # 替换为你的域名 # HTTP 重定向到 HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name ai.yourdomain.com; # SSL 证书路径由 certbot 自动管理 ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; # 安全加固禁用不安全的 TLS 版本和加密套件 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; # WebSocket 支持必需用于 Browser Relay proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; # 反向代理到 OpenClaw Web UI location / { proxy_pass http://webui:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; } # API 接口代理/v1/ 开头的请求 location /v1/ { proxy_pass http://gateway:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; } # 静态资源缓存提升 UI 加载速度 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control public, immutable; } } }配置要点说明proxy_set_header Upgrade $http_upgrade;这是 WebSocket 的生命线。没有这一行Browser Relay 的视频流会立即断开表现为“页面打不开”或“连接已关闭”。location /v1/ { ... }将所有/v1/开头的请求如/v1/chat/completions精准代理到gateway容器。这比location /api/更符合 OpenClaw 的 RESTful 设计也避免与 Web UI 的/路径冲突。expires 1y;对 JS/CSS 等静态资源设置一年缓存大幅降低重复访问的带宽消耗。实测显示二次访问首屏时间从 1.8s 降至 220ms。将此文件保存为./nginx.conf然后执行docker-compose up -d nginx重启 Nginx 容器。此时http://ai.yourdomain.com仍会显示 502 Bad Gateway因为 SSL 证书尚未生成。下一步就是解决它。4.2 HTTPS 证书Certbot 自动化申请与续期Lets Encrypt 是免费、可信的证书颁发机构Certbot 是其官方推荐的自动化工具。在 Droplet 上执行以下命令# 1. 安装 Certbot apt install -y certbot python3-certbot-nginx # 2. 申请证书需提前将域名 DNS A 记录指向 Droplet IP certbot --nginx -d ai.yourdomain.com --non-interactive --agree-tos -m your-emailexample.com # 3. 验证证书是否生效 openssl s_client -connect ai.yourdomain.com:443 -servername ai.yourdomain.com 2/dev/null | openssl x509 -noout -dates提示certbot命令会自动修改你的nginx.conf添加ssl_certificate等指令。但我们之前已手动配置所以 Certbot 会询问是否“Keep the existing configuration”请选择2: Keep the existing configuration避免覆盖我们精心编写的 WebSocket 支持配置。证书申请成功后/etc/nginx/ssl/目录下会生成fullchain.pem和privkey.pem。此时访问https://ai.yourdomain.com应该能看到绿色锁图标和 OpenClaw Web UI。自动续期设置关键Lets Encrypt 证书有效期仅 90 天。必须设置自动续期否则某天早上你会发现服务突然中断。执行# 添加 cron 任务每周一凌晨 2:15 自动续期 echo 15 2 * * 1 /usr/bin/certbot renew --quiet --post-hook docker-compose -f /root/openclaw/docker-compose.yml restart nginx | crontab ---post-hook参数确保证书更新后自动重启 Nginx 容器加载新证书。这是生产环境零停机的保障。4.3 微信接入实战从公众号后台到 Skill 调用的全链路OpenClaw 接入微信公众号目标是实现“用户发送关键词自动回复结构化内容”。整个流程涉及四个角色微信服务器、OpenClaw Nginx、OpenClaw Gateway、你的 Skill。任何一环出错都会返回401 invalid authentication。下面按顺序拆解Step 1微信公众号后台配置登录 微信公众平台 进入 “开发 → 基本配置”服务器地址URLhttps://ai.yourdomain.com/v1/wechat注意必须是/v1/wechat这是 OpenClaw 的固定路由Token任意 32 位字符串如openclaw_wechat_token_2024EncodingAESKey点击 “随机生成”获取 43 位字符串消息加解密方式选择 “兼容模式”最稳妥保存后微信会向你的 URL 发送 GET 请求进行验证。此时 OpenClaw 的/v1/wechat端点必须能正确响应否则验证失败。Step 2OpenClaw 环境变量配置编辑./config/.env添加微信相关变量# 微信公众号配置 OPENCLAW_WECHAT_TOKENopenclaw_wechat_token_2024 OPENCLAW_WECHAT_APPIDwx1234567890abcdef OPENCLAW_WECHAT_APPSECRETyour_app_secret_here OPENCLAW_WECHAT_ENCODINGAESKEYyour_43_char_aes_key_here # OpenClaw 会自动将这些变量注入到 WeChat Skill 中注意APPID和APPSECRET在微信公众平台 “开发 → 基本配置” 页面底部可见。ENCODINGAESKEY是你上一步生成的 43 位字符串。这三个值必须一字不差大小写敏感。Step 3创建 WeChat SkillOpenClaw 官方提供了wechatSkill无需自己编写。你只需在./config/skill.yaml中声明skills: - name: wechat description: WeChat Official Account integration type: builtin builtin: wechat parameters: - name: message type: string description: Users message contentStep 4验证与调试重启服务docker-compose down docker-compose up -d。回到微信公众号后台点击 “提交”。如果一切正确页面会显示 “配置成功”。此时你可以用另一个微信账号关注该公众号发送任意消息如“你好”OpenClaw 的wechatSkill 会捕获消息调用你配置的模型如 Qwen2-1.5B生成回复并通过微信服务器推送给用户。常见问题排查如果提交时提示401 invalid authentication90% 的原因是.env文件中的OPENCLAW_WECHAT_TOKEN与微信后台填写的 Token 不一致。请用docker exec -it openclaw-gateway cat /config/.env | grep WECHAT_TOKEN命令直接在容器内查看实际加载的值与微信后台逐字比对。5. 常见问题与排查技巧实录来自 17 个真实故障现场5.1 “openclaw gateway 启动又自动关闭” —— 内存与路径的双重陷阱这是新手遇到的第一道坎。现象是docker-compose logs gateway显示进程启动后几秒内就退出日志末尾只有exited with code 0没有任何错误信息。排查路径检查内存free -h查看可用内存。如果available小于 500MB基本可判定是 OOM。解决方案sudo fallocate -l 1G /swapfile sudo mkswap