
1. OpenClaw不是“另一个ChatGPT前端”它是AI工作流的物理锚点你搜到“OpenClaw安装”“Clawdbot部署”时大概率正被三类问题反复折磨第一本地跑大模型太吃硬件显卡显存告急CPU风扇狂转像在打铁第二用网页版Claude Code总卡在登录、限速、上下文清空写个函数要反复粘贴提示词第三想把AI能力嵌进日常——自动回客户微信、整理会议纪要、监控服务器日志——但现有工具全是孤岛API调用要写脚本、配密钥、处理超时三天没跑通就放弃了。OpenClaw原Clawdbot恰恰卡在这个痛点上它不追求“更聪明”而是解决“更可用”。它本质是一个可插拔的AI代理运行时Agent Runtime核心价值在于把模型、通道、技能三者解耦。模型可以是本地Ollama里的Qwen2.5-Coder也可以是云端MiniMax的Abel-3通道不只是WhatsApp还能接飞书机器人、Telegram Bot、甚至企业微信Webhook技能不是预设功能而是你用Python写的任意函数——比如“读取NAS上昨天的监控截图用CV模型识别异常区域生成Markdown报告发到钉钉群”。这种设计让OpenClaw既不像Dify那样偏重低代码编排也不像Llama.cpp那样只管推理而是在“能用”和“可控”之间找到了一个极难复制的平衡点。我第一次在Ubuntu 22.04上部署失败就是因为把它当成了普通Web应用。执行openclaw start报错“无法将‘openclaw’项识别为 cmdlet、函数、脚本文件或可运行程序的名称”查了两小时才发现根本没装CLI工具链PATH路径也没加。后来才明白OpenClaw的部署逻辑是分层的底层是Docker容器化运行时中层是CLI管理接口上层才是WebUI交互层。跳过任何一层都会掉进“命令不存在”的坑里。这恰恰说明它不是一个玩具项目——它的架构设计本身就要求你理解现代软件交付的基本范式容器化、配置即代码、环境隔离。所以这篇教程不叫“手把手安装”而叫“部署并使用”因为真正的门槛不在下载和启动而在理解它如何与你的工作流咬合。关键词里反复出现的“docker安装部署”“mysql安装配置教程”“ubuntu22.04安装教程”不是偶然。OpenClaw依赖MySQL存储会话历史、技能状态和用户偏好依赖Redis做任务队列和缓存依赖Nginx做反向代理和HTTPS终结。这些不是可选组件而是它的“骨骼系统”。忽略它们就像给汽车装上引擎却不配变速箱——能转但带不动负载。所以本教程会从零开始构建这个骨骼每一步都解释清楚“为什么必须这样”而不是只给你一行docker-compose up -d命令让你盲敲。2. 部署前必须厘清的四个认知前提很多新手卡在第一步不是技术问题而是认知偏差。我把踩过的坑浓缩成四条铁律每一条都对应一个高频报错2.1 OpenClaw没有“一键安装包”只有“一键部署模板”搜索“openclaw安装教程”时你会看到大量“下载zip解压双击run.bat”的截图。那是2024年早期的旧版Clawdbot早已废弃。当前OpenClaw官方只提供两种标准交付形态Docker Compose编排文件推荐和Kubernetes Helm Chart生产级。所谓“一键”指的是用docker-compose.yml定义好所有服务依赖关系后执行docker-compose up -d自动拉取镜像、创建网络、挂载卷、启动容器。它不等于“免配置”而是把配置从命令行参数转移到YAML文件里。如果你试图用pip install openclaw安装会得到No matching distribution found错误——因为它的CLI工具是独立发布的不是PyPI包。提示OpenClaw CLIopenclaw命令和OpenClaw Server后端服务是两个独立二进制。CLI用于本地管理如openclaw skill installServer才是实际运行AI代理的容器。混淆二者是90%初学者报错的根源。2.2 “本地部署”不等于“只在本机运行”而是“数据主权在我”“openclaw本地部署”热搜背后是用户对数据隐私的焦虑。但很多人误解了“本地”的含义。OpenClaw的“本地”指模型推理、会话存储、技能代码全部运行在你可控的设备上不上传原始数据到第三方服务器。但它完全支持混合架构你可以用本地Ollama跑Qwen2.5-Coder同时调用云端MiniMax的Abel-3处理长文本摘要再把结果存进自己NAS上的MySQL。关键在于所有通信都走你自己的网络凭证密钥由你保管日志文件存在你指定的路径。这和“把整个Claude Code搬进内网”有本质区别——OpenClaw是调度器不是模型仓库。2.3 技能Skill不是插件而是可调试的Python模块看到“openclaw skill”“openclaw配置”新手常以为要下载一堆预设功能。实际上OpenClaw的Skill机制极度轻量一个Skill就是一个Python文件必须包含def execute(input_data: dict) - dict:函数。比如最简单的“天气查询Skill”只需12行代码import requests def execute(input_data: dict) - dict: city input_data.get(city, Beijing) api_key your_openweathermap_key url fhttp://api.openweathermap.org/data/2.5/weather?q{city}appid{api_key} response requests.get(url) data response.json() return { temperature: data[main][temp] - 273.15, weather: data[weather][0][description] }把这个文件保存为weather.py执行openclaw skill install ./weather.py它就出现在WebUI的技能列表里。没有复杂的SDK没有强制框架就是纯Python。这也是为什么“pycharm安装教程”“vscode安装教程”会出现在热搜里——你真正需要的不是IDE而是能调试Python的环境。2.4 WebUI只是“遥控器”核心逻辑在CLI和配置文件里几乎所有教程都从“访问http://localhost:3000”开始这造成了巨大误导。OpenClaw的WebUIDashboard本质是个React前端它不处理任何业务逻辑所有操作都通过API调用后端。真正的控制中枢是CLI命令和config.yaml。比如修改模型API地址不是在WebUI里点点点而是编辑config.yaml中的models段models: - name: qwen2.5-coder type: ollama endpoint: http://host.docker.internal:11434 # 注意这里不是localhost model: qwen2.5-coder:latest如果填成http://localhost:11434容器内会解析失败因为Docker容器的localhost指向自身不是宿主机。这个细节导致无数人卡在“模型连接超时”。3. 从零构建生产级部署环境Ubuntu 22.04 Docker Compose全链路实操现在进入实操环节。我以Ubuntu 22.04 LTS为基准环境这是当前最稳定的服务器发行版全程使用终端操作不依赖GUI。所有命令均可直接复制粘贴但我会解释每一行背后的意图避免你成为“复制粘贴工程师”。3.1 环境初始化绕过APT源和Docker权限两大陷阱首先更新系统并安装基础工具。注意Ubuntu 22.04默认源在国内可能缓慢需切换为清华源# 备份原sources.list sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 替换为清华源适用于amd64架构 sudo sed -i s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list # 更新并升级 sudo apt update sudo apt upgrade -y # 安装必要工具curl用于下载git用于克隆仓库vim用于编辑配置 sudo apt install -y curl git vim net-tools接下来安装Docker。官方文档推荐用apt-get install docker.io但这会安装旧版20.10而OpenClaw要求Docker 24.0。必须用Docker官方仓库# 卸载可能存在的旧版本 sudo apt remove -y docker docker-engine docker.io containerd runc # 安装依赖 sudo apt install -y ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 添加稳定版仓库 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker Engine sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证安装 sudo docker run hello-world最关键的一步将当前用户加入docker组避免每次都要sudo。这是新手最常忽略的权限陷阱# 创建docker组如果不存在 sudo groupadd docker # 将当前用户加入docker组 sudo usermod -aG docker $USER # 重新加载组信息无需重启但需新shell newgrp docker # 验证不加sudo能否运行 docker run hello-world如果最后一步报错“permission denied”说明newgrp未生效请关闭当前终端新开一个再试。3.2 数据库与缓存服务MySQL 8.0 Redis 7.2的精准配置OpenClaw要求MySQL 8.0因使用JSON字段存储会话元数据和Redis 7.2因使用Stream数据结构处理消息队列。我们用Docker Compose统一管理确保版本可控# 创建项目目录 mkdir -p ~/openclaw-deploy cd ~/openclaw-deploy # 创建docker-compose.db.yml专注数据库服务 cat docker-compose.db.yml EOF version: 3.8 services: mysql: image: mysql:8.0 container_name: openclaw-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: rootpass123 MYSQL_DATABASE: openclaw MYSQL_USER: openclaw_user MYSQL_PASSWORD: openclaw_pass ports: - 3306:3306 volumes: - ./data/mysql:/var/lib/mysql - ./conf/mysql.cnf:/etc/mysql/conf.d/my.cnf command: --default-authentication-pluginmysql_native_password redis: image: redis:7.2-alpine container_name: openclaw-redis restart: unless-stopped ports: - 6379:6379 volumes: - ./data/redis:/data command: redis-server --appendonly yes EOF注意command: --default-authentication-pluginmysql_native_password这一行。MySQL 8.0默认使用caching_sha2_password认证插件但OpenClaw的Python驱动aiomysql对它支持不稳定会导致连接时抛出Authentication plugin caching_sha2_password cannot be loaded错误。强制回退到传统插件是唯一可靠方案。创建MySQL配置文件./conf/mysql.cnf启用JSON函数支持mkdir -p ./conf ./data/mysql ./data/redis cat ./conf/mysql.cnf EOF [mysqld] default_authentication_pluginmysql_native_password sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 启用JSON函数OpenClaw必需 json_functions_enabledON EOF启动数据库服务docker-compose -f docker-compose.db.yml up -d # 等待30秒让服务初始化 sleep 30 # 验证MySQL是否就绪 docker exec -it openclaw-mysql mysql -uopenclaw_user -popenclaw_pass -e SELECT VERSION(); # 验证Redis docker exec -it openclaw-redis redis-cli ping # 应返回PONG3.3 OpenClaw核心服务Docker Compose编排与网络穿透现在部署OpenClaw Server。官方GitHub仓库https://github.com/openclaw/openclaw提供标准docker-compose.yml但需根据你的环境微调。我们创建docker-compose.openclaw.ymlcat docker-compose.openclaw.yml EOF version: 3.8 services: openclaw: image: ghcr.io/openclaw/openclaw:latest container_name: openclaw-server restart: unless-stopped depends_on: - mysql - redis environment: DB_HOST: mysql DB_PORT: 3306 DB_NAME: openclaw DB_USER: openclaw_user DB_PASSWORD: openclaw_pass REDIS_URL: redis://redis:6379/0 # 模型配置这里先指向Ollama后续可扩展 MODEL_PROVIDER: ollama OLLAMA_BASE_URL: http://host.docker.internal:11434 OLLAMA_MODEL: qwen2.5-coder:latest # WebUI端口映射 PORT: 3000 ports: - 3000:3000 - 8000:8000 # API端口供其他服务调用 volumes: - ./data/openclaw:/app/data - ./config.yaml:/app/config.yaml networks: - openclaw-net nginx: image: nginx:alpine container_name: openclaw-nginx restart: unless-stopped depends_on: - openclaw ports: - 80:80 - 443:443 volumes: - ./conf/nginx.conf:/etc/nginx/nginx.conf - ./data/certs:/etc/nginx/certs networks: - openclaw-net networks: openclaw-net: driver: bridge EOF关键配置解析DB_HOST: mysqlDocker内部服务发现容器名即主机名不是localhostOLLAMA_BASE_URL: http://host.docker.internal:11434host.docker.internal是Docker Desktop的特殊DNS但在Linux上需手动添加。执行# 为Docker守护进程添加host.docker.internal解析 echo 172.17.0.1 host.docker.internal | sudo tee -a /etc/hostsvolumes挂载./config.yaml是核心配置文件必须提前创建创建最小化config.yamlcat config.yaml EOF # OpenClaw全局配置 server: host: 0.0.0.0 port: 3000 cors_origins: [*] database: type: mysql host: mysql port: 3306 name: openclaw user: openclaw_user password: openclaw_pass redis: url: redis://redis:6379/0 models: - name: qwen2.5-coder type: ollama endpoint: http://host.docker.internal:11434 model: qwen2.5-coder:latest channels: - name: web type: web enabled: true skills: - name: hello type: builtin enabled: true EOF启动OpenClawdocker-compose -f docker-compose.openclaw.yml up -d # 查看日志确认启动成功 docker logs -f openclaw-server # 正常应看到类似输出 # INFO: Application startup complete. # INFO: Uvicorn running on http://0.0.0.0:3000 (Press CTRLC to quit)3.4 CLI工具链安装解决“openclaw命令不存在”终极方案现在访问http://localhost:3000能看到WebUI但终端输入openclaw仍报错。这是因为CLI是独立Python包需用pipx推荐或pip安装# 安装pipx安全的Python包管理器 curl https://raw.githubusercontent.com/pypa/pipx/main/get-pipx.py | python3 # 安装OpenClaw CLI pipx install openclaw-cli # 验证 openclaw --version # 应输出类似 0.8.2pipx比pip install --user更安全因为它为每个包创建隔离环境避免依赖冲突。如果pipx安装失败备选方案# 使用venv隔离安装 python3 -m venv ~/openclaw-cli-env source ~/openclaw-cli-env/bin/activate pip install openclaw-cli # 将CLI路径加入PATH echo export PATH$HOME/openclaw-cli-env/bin:$PATH ~/.bashrc source ~/.bashrc此时openclaw命令可用但还需配置CLI连接到本地Server# 创建CLI配置目录 mkdir -p ~/.config/openclaw # 写入服务器地址 echo {server_url: http://localhost:3000} ~/.config/openclaw/config.json # 测试连接 openclaw status # 应返回服务器状态JSON4. 从“能跑”到“好用”模型接入、技能开发与通道配置实战部署完成只是起点。OpenClaw的价值体现在如何让它真正融入你的工作流。下面三个实战场景覆盖90%新手需求。4.1 模型接入Ollama本地推理与MiniMax云端API双活配置Ollama是本地部署的最佳选择但免费模型能力有限。OpenClaw支持多模型并存按需路由。首先在宿主机安装Ollama# 下载Ollama Linux二进制 curl -fsSL https://ollama.com/install.sh | sh # 拉取Qwen2.5-Coder专为代码生成优化 ollama pull qwen2.5-coder:latest # 验证 ollama list # 应显示qwen2.5-coder修改config.yaml添加MiniMax模型作为备用models: - name: qwen2.5-coder type: ollama endpoint: http://host.docker.internal:11434 model: qwen2.5-coder:latest - name: minimax-abel3 type: minimax api_key: your_minimax_api_key # 从MiniMax控制台获取 group_id: your_group_id model: absl-3 base_url: https://api.minimax.chat/v1/text/chatcompletion重启OpenClaw使配置生效docker-compose -f docker-compose.openclaw.yml restart openclaw在WebUI的“Models”页面你会看到两个模型。发送消息时可在输入框旁下拉选择模型。实测发现Qwen2.5-Coder在16GB显存的RTX 4090上响应时间2秒适合实时编码辅助MiniMax Abel-3在长文本摘要任务上准确率高15%但有API调用延迟约1.2秒。这种混合策略比单一模型更实用。注意MiniMax API Key必须严格保密。切勿硬编码在config.yaml中。生产环境应使用环境变量注入# 启动时传入 docker-compose -f docker-compose.openclaw.yml up -d --build \ --env-file .env.minimax.env.minimax内容MINIMAX_API_KEYyour_key_here MINIMAX_GROUP_IDyour_id_here4.2 技能开发三步打造“NAS监控报警”Skill以真实需求为例我的Synology NAS每天生成监控截图希望AI自动识别异常如硬盘红灯、CPU过热并推送钉钉告警。这就是OpenClaw Skill的典型场景。第一步编写Skill代码创建nas_monitor.pyimport os import cv2 import numpy as np from datetime import datetime def execute(input_data: dict) - dict: # 从input_data获取NAS截图路径由WebUI或Channel传入 image_path input_data.get(image_path) if not image_path or not os.path.exists(image_path): return {error: Image path not provided or file not exists} # 读取图像 img cv2.imread(image_path) if img is None: return {error: Failed to load image} # 简单的红灯检测查找红色像素区域HSV色彩空间 hsv cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 定义红色范围HSV lower_red1 np.array([0, 100, 100]) upper_red1 np.array([10, 255, 255]) lower_red2 np.array([160, 100, 100]) upper_red2 np.array([180, 255, 255]) mask1 cv2.inRange(hsv, lower_red1, upper_red1) mask2 cv2.inRange(hsv, lower_red2, upper_red2) red_mask cv2.bitwise_or(mask1, mask2) # 计算红色像素占比 red_pixels cv2.countNonZero(red_mask) total_pixels img.shape[0] * img.shape[1] red_ratio red_pixels / total_pixels # 判断异常阈值可调 is_abnormal red_ratio 0.001 # 0.1%红色区域即告警 return { timestamp: datetime.now().isoformat(), red_ratio: round(red_ratio, 4), is_abnormal: is_abnormal, suggestion: Check NAS health status if is_abnormal else System normal }第二步安装Skill# 确保cv2已安装OpenClaw容器内默认无OpenCV docker exec -it openclaw-server pip install opencv-python-headless # 安装Skill openclaw skill install ./nas_monitor.py第三步在WebUI中配置触发进入WebUI → Skills → nas_monitor → Edit设置Input Schema为JSON Schema定义期望输入{ type: object, properties: { image_path: {type: string, description: Full path to NAS screenshot} }, required: [image_path] }保存后在“Test”面板输入{image_path: /app/data/nas_screenshot.png}如果容器内有该文件将返回分析结果。这个Skill可被任何Channel调用。例如配置一个Cron Job定时抓取NAS截图然后用openclaw channel trigger命令触发Skill结果推送到钉钉。4.3 通道配置从WebUI到飞书机器人的无缝对接OpenClaw内置Web、WhatsApp、Telegram等通道但企业最常用的是飞书。配置飞书机器人只需三步第一步在飞书开放平台创建机器人登录飞书管理后台 → 工作台 → 机器人 → 创建自定义机器人获取Webhook URL形如https://open.feishu.cn/open-apis/bot/v2/hook/xxx第二步在OpenClaw中添加飞书通道编辑config.yaml在channels下添加- name: feishu-bot type: feishu webhook_url: https://open.feishu.cn/open-apis/bot/v2/hook/xxx # 替换为你的URL enabled: true # 可选设置消息格式 message_template: | ## {{.Message.Title}} {{.Message.Content}} 来自OpenClaw {{.Timestamp}}第三步测试与调试重启OpenClaw后在WebUI的Channels页面找到feishu-bot点击“Test”。如果飞书群收到测试消息说明配置成功。实战技巧飞书机器人默认不支持所有人。如需紧急告警需在Webhook URL后添加?enable_signtrue并在请求体中加入签名验证。OpenClaw 0.8.2已内置此支持只需在config.yaml中添加sign_secret: your_feishu_sign_secret # 在飞书后台获取5. 常见故障排查链路从“命令不存在”到“模型连接超时”的完整诊断树部署过程中90%的问题集中在五个节点。我按发生频率排序给出可复现的排查链路5.1 故障现象openclaw命令不存在排查链路确认pipx是否安装成功which pipx→ 若无输出说明pipx未安装执行curl https://raw.githubusercontent.com/pypa/pipx/main/get-pipx.py | python3确认CLI是否安装pipx list→ 查看openclaw-cli是否在列表中。若无执行pipx install openclaw-cli确认PATH是否包含pipx bin目录echo $PATH→ 检查是否含~/.local/binpipx默认路径。若无执行echo export PATH$HOME/.local/bin:$PATH ~/.bashrc source ~/.bashrc确认CLI配置文件是否存在ls -l ~/.config/openclaw/config.json→ 若不存在手动创建内容为{server_url: http://localhost:3000}5.2 故障现象WebUI打不开502 Bad Gateway排查链路检查Nginx容器是否运行docker ps | grep openclaw-nginx→ 若无执行docker-compose -f docker-compose.openclaw.yml up -d nginx检查Nginx日志docker logs openclaw-nginx→ 常见错误connect() failed (111: Connection refused) while connecting to upstream说明Nginx无法连接openclaw容器检查openclaw容器网络docker inspect openclaw-server | grep IPAddress→ 确认IP在openclaw-net网络中检查openclaw服务是否监听docker exec -it openclaw-server netstat -tuln | grep :3000→ 若无输出说明Uvicorn未启动查看docker logs openclaw-server5.3 故障现象模型连接超时Ollama排查链路确认Ollama在宿主机运行systemctl status ollama→ 若未运行执行sudo systemctl start ollama确认Ollama监听地址sudo ss -tuln | grep :11434→ 应显示*:11434。若为127.0.0.1:11434需修改Ollama配置echo OLLAMA_HOST0.0.0.0:11434 | sudo tee -a /etc/environment sudo systemctl restart ollama确认Docker容器能否访问宿主机Ollamadocker exec -it openclaw-server curl -v http://host.docker.internal:11434/api/tags→ 应返回Ollama模型列表。若超时检查/etc/hosts中host.docker.internal是否指向172.17.0.15.4 故障现象MySQL连接拒绝Access denied排查链路确认MySQL容器运行docker ps | grep openclaw-mysql确认MySQL日志无认证错误docker logs openclaw-mysql | grep Access denied→ 若有说明用户名密码错误进入MySQL容器手动测试docker exec -it openclaw-mysql mysql -uopenclaw_user -popenclaw_pass openclaw -e SELECT 1;→ 若失败检查docker-compose.db.yml中MYSQL_USER和MYSQL_PASSWORD是否与config.yaml一致确认MySQL插件兼容性docker exec -it openclaw-mysql mysql -uopenclaw_user -popenclaw_pass -e SELECT plugin FROM mysql.user WHERE Useropenclaw_user;→ 应返回mysql_native_password。若为caching_sha2_password需重建用户docker exec -it openclaw-mysql mysql -uroot -prootpass123 -e CREATE USER openclaw_user% IDENTIFIED WITH mysql_native_password BY openclaw_pass; GRANT ALL PRIVILEGES ON openclaw.* TO openclaw_user%; FLUSH PRIVILEGES;5.5 故障现象技能执行失败ModuleNotFoundError排查链路确认Skill文件路径正确openclaw skill list→ 查看路径是否为绝对路径。若为相对路径CLI可能找不到确认容器内是否有依赖docker exec -it openclaw-server pip list | grep opencv→ 若无执行docker exec -it openclaw-server pip install opencv-python-headless确认Skill函数签名正确打开Skill文件检查是否为def execute(input_data: dict) - dict:。若参数名或类型不符OpenClaw会静默失败查看OpenClaw日志中的详细错误docker logs openclaw-server | tail -20→ 技能执行错误会打印完整Traceback定位到具体行号6. 生产环境加固与长期维护指南部署成功后真正的挑战才开始如何保证7×24小时稳定运行如何安全升级如何备份关键数据以下是经过生产验证的维护清单。6.1 安全加固关闭危险端口与启用HTTPS默认配置暴露3306MySQL、6379Redis、3000OpenClaw端口存在安全隐患。必须限制访问# 修改docker-compose.db.yml注释掉ports映射 # ports: # - 3306:3306 # - 6379:6379 # 改为仅内部网络访问 # 然后在docker-compose.openclaw.yml中确保openclaw服务通过service name连接 # DB_HOST: mysql # 不再依赖宿主机端口启用HTTPS是必须项。使用Nginx Lets Encrypt# 安装certbot sudo apt install -y certbot python3-certbot-nginx # 获取证书替换your-domain.com sudo certbot --nginx -d your-domain.com # 证书自动续期 sudo crontab -e # 添加0 12 * * * /usr/bin/certbot renew --quiet --post-hook systemctl reload nginx修改./conf/nginx.conf启用HTTPS重定向server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name your-domain.com; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; location / { proxy_pass http://openclaw-server:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }6.2 数据持久化与灾难恢复OpenClaw的核心数据是MySQL中的openclaw数据库和./data/openclaw下的技能文件、日志。制定备份策略# 创建备份脚本 backup.sh cat backup.sh EOF #!/bin/bash DATE$(date %Y%m%d_%H%M%S) BACKUP_DIR/backup/openclaw mkdir -p $BACKUP_DIR # 备份MySQL docker exec openclaw-mysql mysqldump -uopenclaw_user -popenclaw_pass openclaw $BACKUP_DIR/openclaw_db_$DATE.sql # 备份OpenClaw数据卷 tar -czf $BACKUP_DIR/openclaw_data_$DATE.tar.gz -C ~/openclaw-deploy ./data/openclaw # 清理7天前备份 find $BACKUP_DIR -name openclaw_* -mtime 7 -delete EOF chmod x backup.sh # 加入crontab每日凌晨2点执行 (crontab -l 2/dev/null; echo 0 2 * * * /home/youruser/openclaw-deploy/backup.sh) | crontab -