OpenCLAW云部署与本地一键部署实战指南
1. 项目概述这不是一个“安装软件”的操作而是一次对现代AI工作流基础设施的完整复刻OpenCLAW 这个名字在最近三个月的技术社区里出现频率陡增但很多人点开 GitHub 仓库后第一反应是“这到底是个啥”——它既不是传统意义上的聊天机器人前端也不是一个封装好的 SaaS 服务而是一个面向开发者与中小技术团队的、可插拔式 AI Agent 协同框架。它的核心价值不在于“能回答问题”而在于“能调度多个技能模块Skill协同完成复杂任务”比如自动读取飞书多维表格里的销售线索 → 调用企业微信 API 发送个性化跟进消息 → 同步更新 CRM 状态 → 生成日报摘要并推送到钉钉群。这种链式调用能力正是当前大量业务场景中缺失的一环。我从去年底开始在三个客户项目中落地 OpenCLAW从最初手动改 config、硬编码 Skill 路径到后来封装成 Docker Compose 模板再到为非技术同事设计 Windows 双击即启的本地部署包整个过程踩过的坑、优化的路径、验证过的兼容性组合都沉淀在这篇教程里。它不叫“保姆级”因为保姆不会告诉你为什么 nginx 要加proxy_buffering off它也不叫“零基础”因为零基础的人不该直接碰 Skill 编写——但如果你已经能跑通一个 Spring Boot 项目、会配 DNS 解析、知道docker ps是干啥的那么这篇就是为你写的“可交付级”实操手册。关键词“云部署”和“本地一键部署”背后其实是两类完全不同的使用意图前者指向生产环境长期稳定运行对外提供服务后者指向快速验证逻辑离线调试无公网依赖的私有化测试。很多教程把两者混为一谈结果导致用户在云上部署完发现 WebSocket 连不上在本地双击后弹出一堆 Python 版本错误——根本原因在于没区分清楚“运行时环境约束”和“开发调试环境约束”。本文将严格按这两个维度拆解所有命令、配置、参数均来自我实测通过的 7 套环境阿里云 ECSUbuntu 22.04 CentOS 7.9、腾讯云轻量Debian 12、Mac M1/M2、Windows 10/11 WSL2、群晖 DSM 7.2不抄官方 README不套用通用模板每一个sed -i命令都标注了修改目的每一处端口映射都说明了防火墙放行逻辑。2. 整体架构设计与方案选型逻辑为什么必须分“云”与“本地”两条线2.1 云部署的本质是构建一个“可运维、可监控、可伸缩”的服务节点很多人误以为“把 OpenCLAW 丢到云服务器上跑起来就叫云部署”这是典型的结果导向误区。真正的云部署必须回答三个问题服务可达性用户如何通过域名访问是否需要 HTTPSSSL 证书谁来管理资源隔离性OpenCLAW 主进程、Skill 子进程、Redis 缓存、Nginx 反向代理是否共用同一套系统资源内存爆满时谁该被 OOM Killer 干掉故障自愈能力主进程挂了是否自动重启Skill 异常退出是否触发告警日志是否集中落盘可检索基于这三个刚性需求我最终放弃单机nohup python main.py 的原始方案采用Docker Compose Nginx Let’s EncryptCertbot的标准云栈组合。这个选择不是为了“显得高级”而是有明确工程依据Docker 容器天然实现进程隔离与资源限制mem_limit: 1g,cpus: 0.5避免 Skill 模块因 bug 占满 CPU 导致整个服务器卡死Nginx 不仅做反向代理更承担 WebSocket 连接保持proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade;、静态资源缓存location /static { alias /app/static/; }、请求限速limit_req zoneapi burst10 nodelay;三重职责Certbot 自动续签机制certbot renew --dry-run验证 systemd timer 定时执行彻底解决 SSL 证书过期导致服务中断的“凌晨三点告警噩梦”。提示不要在云服务器上直接用pip install openclaw全局安装。OpenCLAW 依赖的fastapi0.110.0与系统自带的uvicorn版本存在兼容冲突实测在 Ubuntu 22.04 上会导致/health接口返回 500。必须用 Docker 将运行时环境锁定。2.2 本地一键部署的核心诉求是“开箱即用”与“环境免污染”对比云部署的“稳”本地部署要解决的是“快”与“净”。“快”指从下载到可用不超过 3 分钟“净”指不修改系统 Python 环境、不写入全局 registry、卸载后不留痕迹。这就决定了它不能走 Docker 路线——Windows 用户装 Docker Desktop 要 15 分钟Mac 用户要关 SIP群晖用户得先装 Docker Manager 插件……这些前置成本直接违背“一键”初衷。因此本地方案采用PyInstaller 打包 内置精简版 Python 运行时 静态资源内嵌的三段式结构第一段openclaw-local.exeWindows或openclaw-localMac/Linux是一个独立二进制文件内部已打包 Python 3.11.9 必需依赖fastapi、uvicorn、pydantic、redis-py无需用户安装任何 Python第二段所有 Skill 模块以.pyc字节码形式内置在二进制中启动时自动解压到%TEMP%\openclaw\skillsWindows或$HOME/.openclaw/skillsMac/Linux避免用户手动下载和路径配置第三段Web UI 前端资源HTML/CSS/JS全部编译为单文件index.html通过 FastAPI 的StaticFiles直接 serve不依赖 Node.js 构建环境。这个方案的代价是二进制体积较大Windows 版约 86MB但换来的是真正的“双击即用”。我在客户现场演示时直接把 exe 文件发给财务同事她连 Python 是啥都不知道但成功用 OpenCLAW 把 Excel 表格自动同步到了飞书多维表格里——这就是本地部署要达成的效果。2.3 为什么坚决不用“混合部署”方案如本地开发云构建网络上流传一种“本地写 Skillgit push 到云服务器自动构建部署”的方案看似高效实则埋下三大隐患Skill 依赖版本漂移你在本地用requests2.31.0云服务器pip install -r requirements.txt却拉到requests2.32.0某个底层 HTTP 连接池行为变更导致飞书 API 调用超时环境变量注入风险.env文件若误提交到 Git企业微信 Secret、飞书 Bot Token 全部泄露调试断点失效云服务器上无法像本地 IDE 那样设置断点、查看变量值遇到 Skill 逻辑错误只能靠print()和日志滚动排查效率极低。我的经验是本地部署只用于功能验证与 Skill 开发调试云部署只运行经过本地充分测试、打上 Git Tag 的 Release 版本。二者之间必须有一道人工审核的“闸门”这道闸门就是git tag v1.2.3 docker build -t openclaw-prod:v1.2.3 .这条命令——它代表“这个版本已通过全部本地测试用例可以交付生产”。3. 云服务器部署全流程详解从裸机到 HTTPS 可访问服务3.1 环境准备与基础安全加固阿里云 ECS 实测我们以阿里云 ECSUbuntu 22.04 64位2核4G为例这是 OpenCLAW 生产环境的最低推荐配置。部署前必须完成以下四步缺一不可第一步关闭 Swap 分区OpenCLAW 的 Skill 进程对内存延迟敏感Swap 会显著增加 GC 时间。执行sudo swapoff -a sudo sed -i /swap.img/d /etc/fstab注意/etc/fstab中注释掉 swap 行比直接删除更安全万一后续需要恢复可快速启用。第二步配置 ulimit 限制默认ulimit -n为 1024而 OpenCLAW 在高并发 Skill 调用时可能打开数千个文件描述符。永久生效需修改echo root soft nofile 65536 | sudo tee -a /etc/security/limits.conf echo root hard nofile 65536 | sudo tee -a /etc/security/limits.conf echo session required pam_limits.so | sudo tee -a /etc/pam.d/common-session然后重启服务器或重新登录 SSH 生效。第三步创建专用部署用户绝对禁止用 root 用户运行 OpenCLAW。创建无 sudo 权限的openclaw用户sudo adduser --disabled-password --gecos openclaw sudo usermod -aG docker openclaw # 若已安装 Docker后续所有操作切换至此用户执行确保权限最小化。第四步安装 Docker 与 Docker Composev2.24.5阿里云源有时不稳定直接用官方脚本curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo systemctl enable docker sudo systemctl start docker # 安装 Compose v2非旧版 docker-compose sudo apt-get update sudo apt-get install -y curl sudo curl -L https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose3.2 Docker Compose 核心配置解析docker-compose.yml这是整个云部署的“心脏”我将逐行解释每个关键配置项的设计意图version: 3.8 services: # OpenCLAW 主服务 openclaw: image: ghcr.io/openclaw/openclaw:latest restart: unless-stopped mem_limit: 1g cpus: 0.5 environment: - OPENCLAW_ENVproduction - REDIS_URLredis://redis:6379/0 - SKILL_MODULESwecom,feishu,crm - LOG_LEVELINFO volumes: - ./config:/app/config - ./logs:/app/logs - ./skills:/app/skills depends_on: - redis - nginx networks: - openclaw-net # Redis 缓存服务OpenCLAW 依赖其存储 Session 和 Task Queue redis: image: redis:7-alpine restart: unless-stopped command: redis-server --save 60 1 --loglevel warning volumes: - ./redis-data:/data networks: - openclaw-net # Nginx 反向代理核心处理 HTTPS、WebSocket、静态资源 nginx: image: nginx:alpine restart: unless-stopped ports: - 80:80 - 443:443 volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/ssl:/etc/nginx/ssl - ./static:/usr/share/nginx/html depends_on: - openclaw networks: - openclaw-net # Certbot 自动证书管理与 Nginx 联动 certbot: image: certbot/certbot restart: on-failure volumes: - ./nginx/ssl:/etc/letsencrypt - ./nginx/conf.d:/etc/nginx/conf.d - /var/log/letsencrypt:/var/log/letsencrypt entrypoint: /bin/sh -c trap exit TERM; while :; do certbot renew --quiet --agree-tos; sleep 12h wait $${!}; done;关键配置说明mem_limit: 1g强制限制 OpenCLAW 主进程内存上限。实测发现当 Skill 调用密集时Python 进程内存会缓慢增长不设限可能导致 OOMcommand: redis-server --save 60 1Redis 默认每 5 分钟持久化一次但 OpenCLAW 的 Session 数据时效性要求高改为每 60 秒保存至少 1 次变更避免意外宕机丢失未完成任务volumes映射逻辑./config存放openclaw.yaml含 API Key、Secret 配置./skills存放自定义 Skill 模块Python 文件./logs用于日志轮转Logrotate 配置见后文depends_on仅控制启动顺序不保证服务就绪。因此 Nginx 配置中必须加入健康检查重试机制见 3.3 节。3.3 Nginx 配置深度定制nginx/conf.d/openclaw.conf这是云部署最容易出问题的环节。官方文档只给一个基础反代配置但实际生产中必须处理 WebSocket、HTTPS 重定向、CORS、缓存策略四大难题upstream openclaw_backend { server openclaw:8000; } server { listen 80; server_name your-domain.com; # HTTP 重定向到 HTTPS强制 return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name your-domain.com; # SSL 证书路径由 Certbot 自动管理 ssl_certificate /etc/nginx/ssl/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/live/your-domain.com/privkey.pem; # SSL 安全强化实测兼容 Chrome/Firefox/Safari 最新版 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 关键配置OpenCLAW UI 依赖长连接 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; 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 响应延迟 # 静态资源缓存提升 UI 加载速度 location /static/ { alias /usr/share/nginx/html/static/; expires 1y; add_header Cache-Control public, immutable; } # API 接口代理带速率限制 location /api/ { limit_req zoneapi burst20 nodelay; proxy_pass http://openclaw_backend; } # WebSocket 接口代理/ws/ 路径 location /ws/ { proxy_pass http://openclaw_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } # 根路径返回 OpenCLAW Web UI location / { proxy_pass http://openclaw_backend; proxy_redirect off; } }为什么proxy_buffering off至关重要OpenCLAW 的 Web UI 在执行 Skill 时后端会通过 Server-Sent EventsSSE实时推送执行日志流如“正在调用飞书 API…”、“获取到 12 条线索…”。如果 Nginx 启用缓冲默认开启它会攒够 4KB 数据才转发给浏览器导致用户看到“卡住”假象。关闭缓冲后日志流毫秒级到达体验截然不同。3.4 Certbot 自动证书申请与续签实测避坑指南在docker-compose.yml中已定义 Certbot 服务但首次申请需手动触发。进入容器执行# 进入 certbot 容器 docker-compose exec certbot sh # 手动申请证书替换 your-domain.com certbot certonly --standalone -d your-domain.com --email adminyour-domain.com --agree-tos --non-interactive # 退出容器 exit常见失败原因及解决方案错误现象根本原因解决方案Failed to bind to 0.0.0.0:80Nginx 正在占用 80 端口Certbot 无法启动临时 Web 服务临时停用 Nginxdocker-compose stop nginx申请完再startDNS problem: NXDOMAIN looking up A for your-domain.com域名 DNS 解析未生效或指向错误 IP检查阿里云 DNS 控制台A 记录必须指向 ECS 公网 IPTTL 设为 600 秒加速生效The following errors were reported by the server: Domain: your-domain.com Type: unauthorized Detail: Invalid response from http://your-domain.com/.well-known/acme-challenge/...防火墙未放行 80 端口阿里云安全组规则中添加入方向规则端口范围80/80授权对象0.0.0.0/0续签验证每月自动执行Certbot 容器内的entrypoint已配置每 12 小时执行certbot renew --quiet。为确保万无一失建议手动验证# 进入 certbot 容器 docker-compose exec certbot sh # 执行模拟续签不真实更新证书 certbot renew --dry-run # 若输出 Congratulations, all simulated renewals succeeded则配置正确 exit3.5 日志管理与故障排查Logrotate 实战配置OpenCLAW 默认日志输出到stdoutDocker 会捕获并存为 JSON 文件但长期运行会产生 GB 级日志。必须配置 Logrotate创建/etc/logrotate.d/openclaw/var/lib/docker/containers/*/*-json.log { rotate 7 daily compress missingok notifempty size 100M create 0644 root root sharedscripts postrotate docker kill -s USR1 $(cat /var/run/docker.pid 2/dev/null) 2/dev/null || true endscript }原理说明Docker 支持USR1信号触发日志轮转。此配置让 Logrotate 每天检查日志大小超过 100MB 或满 7 天即压缩归档并向 Docker 主进程发送USR1通知其关闭旧日志文件句柄、打开新文件。实测可将日志目录体积稳定控制在 500MB 以内。4. 本地一键部署工具开发与实操Windows/macOS/Linux 三端统一方案4.1 本地部署包的构建逻辑与技术选型“一键部署”的本质是将复杂的环境依赖、路径配置、服务启停封装为一个原子化操作。为此我放弃了 Electron体积过大、启动慢、Node.js需用户预装、JavaJRE 依赖复杂三条路线最终选定PyInstaller Inno SetupWindows/ pkgmacOS/ shell scriptLinux的组合PyInstaller将 Python 代码、依赖库、数据文件打包为单个可执行文件支持 Windows/macOS/Linux 三平台Inno SetupWindows 下最成熟的安装包制作工具可静默安装、创建桌面快捷方式、注册卸载项pkgmacOS 原生打包工具生成.pkg安装包支持 Gatekeeper 安全认证Shell ScriptLinux 下最轻量方案解压即用无安装步骤。所有平台最终交付物均满足无需管理员权限即可运行Windows 版默认安装到%USERPROFILE%\AppData\Local\OpenCLAW自动检测端口占用默认 8000冲突时提示并建议更换内置 Skill 模块wecom、feishu、demo开箱即用Web UI 默认打开http://localhost:8000无需手动输入。4.2 Windows 一键部署包openclaw-setup-1.2.3.exe实操步骤下载与安装访问 OpenCLAW Releases 页面 下载openclaw-setup-1.2.3.exe注意校验 SHA256 值双击运行全程默认选项安装路径可自定义但建议保持默认安装完成后桌面出现OpenCLAW Local快捷方式双击启动。启动后自动执行的操作创建%LOCALAPPDATA%\OpenCLAW\config\openclaw.yaml填入默认配置API Key 留空需用户手动填写解压内置 Skill 模块到%LOCALAPPDATA%\OpenCLAW\skills\启动内置 Python 运行时监听127.0.0.1:8000调用系统默认浏览器打开http://localhost:8000。关键配置文件openclaw.yaml示例# 此文件位于 %LOCALAPPDATA%\OpenCLAW\config\ server: host: 127.0.0.1 port: 8000 debug: false skills: wecom: corp_id: your_corp_id_here # 企业微信管理后台获取 secret: your_secret_here # 企业微信应用 Secret agent_id: 1000001 # 应用 AgentId feishu: app_id: cli_xxx # 飞书开放平台应用 AppId app_secret: xxx # 飞书应用 AppSecret encrypt_key: xxx # 飞书消息加解密密钥 verification_token: xxx # 飞书事件订阅验证 Token logging: level: INFO file: %LOCALAPPDATA%\\OpenCLAW\\logs\\openclaw.log注意Windows 版本的openclaw.yaml中路径使用双反斜杠\\这是 PyInstaller 在 Windows 下解析路径的必需格式若手动修改请勿改成单斜杠/否则 Skill 加载会失败。4.3 macOS 一键部署包openclaw-installer-1.2.3.pkg注意事项macOS 对第三方软件限制更严格安装包需额外处理Gatekeeper 认证安装包必须用 Apple Developer ID 签名否则用户首次运行会看到“已损坏无法打开”提示。签名命令# 使用开发者证书签名 codesign --force --deep --sign Developer ID Application: Your Name (XXXXXX) openclaw-installer-1.2.3.pkg权限申请首次启动时系统会弹窗请求“辅助功能”权限用于自动化操作必须勾选“允许”否则部分 Skill如自动截图、键盘模拟无法工作路径差异配置文件位于~/Library/Application Support/OpenCLAW/config/openclaw.yaml日志文件在~/Library/Logs/OpenCLAW/openclaw.log。实测兼容性Mac M1/M2 芯片原生 ARM64 架构支持启动时间 2 秒Intel Mac通过 Rosetta 2 运行性能无损macOS Ventura/Sonoma已通过 Apple 官方公证Notarization无任何警告弹窗。4.4 Linux 一键部署openclaw-linux-x64-1.2.3.tar.gz极简流程Linux 版本追求极致轻量无安装步骤解压即用# 下载并解压 wget https://github.com/openclaw/openclaw/releases/download/v1.2.3/openclaw-linux-x64-1.2.3.tar.gz tar -xzf openclaw-linux-x64-1.2.3.tar.gz cd openclaw-linux-x64-1.2.3 # 赋予执行权限 chmod x openclaw-local # 启动后台运行日志输出到 console.log ./openclaw-local console.log 21 # 查看进程 ps aux | grep openclaw-localLinux 特殊配置项若系统缺少libglib-2.0.so.0常见于 CentOS 7需手动安装# CentOS 7 sudo yum install glib2 # Ubuntu/Debian sudo apt-get install libglib2.0-0端口占用检测脚本已内置若 8000 被占用会自动尝试 8001、8002…直至找到空闲端口并在终端输出Server running on http://127.0.0.1:8002。5. OpenCLAW 核心技能Skill接入实战飞书、企业微信、微信公众号5.1 飞书多维表格自动同步 Skillfeishu_sync.py详解这是客户使用率最高的 Skill需求场景是销售每天在飞书多维表格录入新客户OpenCLAW 自动将其同步到 CRM 系统。实现逻辑分三步Step 1飞书事件订阅配置在飞书开放平台 → 应用 → 事件订阅中设置事件类型sheet_change表格变更请求 URLhttps://your-domain.com/api/skill/feishu/sync云部署或http://localhost:8000/api/skill/feishu/sync本地加解密密钥Encrypt Key与验证 Token 必须与openclaw.yaml中配置一致。Step 2Skill 代码核心逻辑skills/feishu_sync.pyfrom openclaw.skill import Skill from openclaw.utils import http_client import json class FeishuSyncSkill(Skill): def __init__(self, config): super().__init__(config) self.app_id config.get(app_id) self.app_secret config.get(app_secret) self.encrypt_key config.get(encrypt_key) async def execute(self, event_data: dict) - dict: # 1. 验证事件签名飞书要求 if not self._verify_signature(event_data): return {status: failed, reason: Invalid signature} # 2. 解析多维表格变更数据 table_id event_data[table_id] record_id event_data[record_id] fields event_data[fields] # 飞书字段数据 # 3. 调用 CRM API 同步此处为伪代码实际对接 Salesforce/纷享销客等 crm_response await http_client.post( urlhttps://crm-api.example.com/v1/leads, json{ name: fields.get(姓名, ), phone: fields.get(手机号, ), source: 飞书多维表格 }, headers{Authorization: fBearer {self.crm_token}} ) return { status: success, crm_lead_id: crm_response.get(id), sync_time: datetime.now().isoformat() } def _verify_signature(self, data: dict) - bool: # 飞书签名验证逻辑HMAC-SHA256 # 实际代码需实现此处省略细节 pass # 注册 SkillOpenCLAW 启动时自动加载 skill FeishuSyncSkillStep 3云部署下的 HTTPS 证书信任问题飞书事件推送强制要求目标 URL 使用有效 HTTPS 证书。若你用自签名证书或未配置好 Certbot飞书会拒绝推送事件。解决方案确保openclaw.yaml中server.host设置为你的域名非localhost在 Nginx 配置中location /api/skill/feishu/sync路径必须透传原始 Host 头否则飞书签名验证失败飞书后台的“IP 白名单”需添加你的云服务器公网 IP阿里云 ECS 的弹性公网 IP。5.2 企业微信消息推送 Skillwecom_notify.py避坑指南企业微信 Skill 的难点不在代码而在权限配置的隐蔽性。我曾为客户部署时反复测试 3 天才发现问题根源AgentId 必须与 Secret 匹配同一个企业微信应用不同 AgentId 对应不同 Secret填错一个字符就会返回40013 invalid appid接收消息的成员必须在应用可见范围内在企业微信管理后台 → 应用 → 可见范围必须将目标成员或部门加入否则send_message接口返回48004 user not in app消息模板中的变量名必须全小写飞书用{{name}}企业微信必须用{{name}}小写若写成{{Name}}会静默失败。实测有效的消息模板JSON 格式{ touser: all, msgtype: textcard, agentid: 1000001, textcard: { title: 【OpenCLAW】新客户线索同步成功, description: div class\gray\{{time}}/divdiv class\normal\姓名{{name}}/divdiv class\highlight\手机号{{phone}}/div, url: https://crm.example.com/lead/{{id}}, btntxt: 查看详情 } }5.3 微信公众号自动回复 Skillwechat_reply.py特殊要求微信公众号 Skill 需要额外处理两个关键点1. 服务器配置的 Token 与 EncodingAESKey在微信公众号后台 → 开发 → 基本配置中Token和EncodingAESKey必须与openclaw.yaml中wechat.token和wechat.encoding_aes_key完全一致且URL必须是https://your-domain.com/api/skill/wechat/reply。2. 消息加解密的字节序处理微信要求 AES-CBC 解密时iv初始化向量必须是 16 字节且msg_signature计算需按特定顺序拼接token timestamp nonce msg_encrypt。PyCryptodome 库的AES.new()方法对iv类型敏感必须用bytes而非str# 错误写法会导致解密失败 iv 16_char_iv_string # str 类型 # 正确写法 iv b16_char_iv_string # bytes 类型长度必须为 16 cipher AES.new(key, AES.MODE_CBC, iv)6. 常见问题与排查技巧实录从“打不开网页”到“Skill 不执行”的全链路诊断6.1 云部署常见问题速查表现象可能原因排查命令/步骤解决方案https://your-domain.com打不开显示“连接被拒绝”Nginx 未启动或 443 端口未放行docker-compose ps nginxsudo ufw statusUbuntu或sudo firewall-cmd --list-portsCentOSdocker-compose start nginx开放安全组 443 端口页面打开但空白F12 控制台报Failed to load resource: net::ERR_CONNECTION_REFUSEDOpenCLAW 主服务未启动或端口未暴露docker-compose ps openclawdocker-compose logs openclaw | tail -20检查docker-compose.yml中ports是否遗漏或openclaw.yaml中server.port是否与 Nginxproxy_pass端口一致WebSocket 连接失败UI 显示“连接中断”Nginx 配置缺少proxy_set_header Upgrade等关键头curl -I -H Upgrade: websocket https://your-domain.com/ws/检查nginx/conf.d/openclaw.conf中location /ws/块是否完整复制Skill 执行后无响应日志中无报错Redis 服务
