在生产环境中使用 Docker\n部署 OpenClaw
\n\n\n本文面向已经熟悉 Linux 基础、Docker\n与容器化部署的运维/开发人员,演示如何在生产环境中以安全、可扩展的方式部署\nOpenClaw(最新稳定版\nv2026.3.8)。完整步骤涵盖准备、镜像拉取、目录结构、Docker‑Compose\n配置、Nginx 反向代理、TLS/防火墙、持久化备份以及后续升级方案。
\n
1️⃣ 前置准备
\n| 项目 | \n说明 | \n参考命令 | \n
|---|---|---|
| 操作系统 | \n64 位 Linux(Debian/Ubuntu/CentOS 均可) | \nuname -a | \n
| Docker | \nDocker Engine ≥ 20.10,Docker‑Compose ≥ 2.0 | \ndocker version && docker compose version | \n
| 域名 | \n用于外网访问(如 openclaw.example.com) | \n– | \n
| TLS 证书 | \n推荐使用 Let’s Encrypt(或自签) | \ncertbot --nginx -d openclaw.example.com | \n
| 防火墙 | \n只放行 80/443,关闭容器内部 18789 端口对公网的直接访问 | \nufw allow 80/tcp && ufw allow 443/tcp && ufw deny 18789/tcp | \n
| 系统用户 | \n建议创建专用系统用户 openclaw(UID/GID\n1000)运行容器,避免 root 运行 | \nsudo useradd -r -s /usr/sbin/nologin openclaw | \n
\n\n⚠️ 安全提示:生产环境务必使用非 root\n用户运行容器,且仅在本机
\n127.0.0.1绑定 OpenClaw gateway\n端口,外部通过 Nginx 逆向代理访问。
2️⃣ 拉取官方镜像
\n# 国内网络可使用官方加速源\ndocker pull docker.1ms.run/alpine/openclaw:v2026.3.8\n\n# 为后续维护打上语义化标签\ndocker tag docker.1ms.run/alpine/openclaw:v2026.3.8 openclaw:prod-v2026.3.8\n\n如需使用其他镜像源(轩辕镜像、1Panel 镜像等),自行替换\n
\n<repo>/openclaw:<tag>即可。
3️⃣ 创建部署目录与安全配置
\n# 创建根目录\nsudo mkdir -p /opt/openclaw/{config,logs,data,backups}\nsudo chown -R $(whoami):$(whoami) /opt/openclaw\ncd /opt/openclaw\n\n# .gitignore(防止敏感信息被误提交)\ncat > .gitignore <<'EOF'\n.env\n*.log\nconfig/*\ndata/*\nbackups/*\nEOF\n\n# 生成高强度网关令牌\nOPENCLAW_TOKEN=$(openssl rand -hex 32)\n\n# 写入 .env\ncat > .env <<EOF\nOPENCLAW_TOKEN=$OPENCLAW_TOKEN\nOPENCLAW_IMAGE=openclaw:prod-v2026.3.8\nEOF\n\nchmod 600 .env # 仅 owner 可读写4️⃣\nDocker‑Compose(生产版)docker-compose.prod.yml
\nversion: '3.8'\n\nvolumes:\n openclaw_home: {}\n\nservices:\n openclaw-gateway:\n image: ${OPENCLAW_IMAGE}\n container_name: openclaw-gateway-prod\n restart: unless-stopped\n environment:\n NODE_ENV: production\n OPENCLAW_GATEWAY_TOKEN: $OPENCLAW_TOKEN\n volumes:\n - openclaw_home:/home/node # 持久化全部数据\n - ./config:/home/node/config:ro\n - ./logs:/home/node/logs:rw\n ports:\n - "127.0.0.1:18789:18789" # 仅本机可访问,外部通过 Nginx 代理\n mem_limit: 2g\n cpus: 2\n healthcheck:\n test: ["CMD", "wget", "-qO-", "http://127.0.0.1:18789/healthz", "||", "exit", "1"]\n interval: 30s\n timeout: 5s\n retries: 5\n start_period: 60s\n logging:\n driver: json-file\n options:\n max-size: "100m"\n max-file: "5"\n compress: "true"\n user: "1000:1000"\n\n关键点说明 *
\nopenclaw_home\n卷负责持久化配置、技能、记忆、工作区等核心数据。 *ports\n只绑定到127.0.0.1,防止公网直接访问。 *\nuser: \"1000:1000\"强制容器以内非 root 用户运行。 *\nhealthcheck用于 Docker 自动监测网关健康状态。
5️⃣ Nginx 反向代理(HTTPS)
\n在 /etc/nginx/sites-available/openclaw.conf 中创建:
server {\n listen 443 ssl http2;\n server_name openclaw.example.com; # ← 替换为真实域名\n\n ssl_certificate /etc/letsencrypt/live/openclaw.example.com/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/openclaw.example.com/privkey.pem;\n ssl_protocols TLSv1.2 TLSv1.3;\n ssl_ciphers HIGH:!aNULL:!MD5;\n ssl_prefer_server_ciphers on;\n add_header Strict-Transport-Security "max-age=31536000" always;\n\n location / {\n proxy_pass http://127.0.0.1:18789;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n proxy_connect_timeout 60s;\n proxy_send_timeout 300s;\n proxy_read_timeout 300s;\n }\n\n location /health {\n proxy_pass http://127.0.0.1:18789/healthz;\n access_log off;\n }\n}\n\n# HTTP → HTTPS 重定向\nserver {\n listen 80;\n server_name openclaw.example.com;\n return 301 https://$host$request_uri;\n}\n启用并重载:
\nsudo ln -s /etc/nginx/sites-available/openclaw.conf /etc/nginx/sites-enabled/\nsudo nginx -t && sudo systemctl reload nginx\n\nTLS:若尚未拥有证书,可使用\n
\ncertbot --nginx -d openclaw.example.com自动申请 &\n配置。
6️⃣ 启动容器 & 初始化
\n# 拉起容器(后台运行)\n docker compose -f docker-compose.prod.yml up -d\n\n# 检查容器状态\n docker compose -f docker-compose.prod.yml ps\n\n# 实时查看日志,确认无错误\n docker compose -f docker-compose.prod.yml logs -f openclaw-gateway首次运行需要完成 onboard\n向导(配置模型提供商、渠道等):“`
\ndocker compose -f docker-compose.prod.yml run –rm openclaw-gateway\nonboard `
\n\n\n向导会在终端交互式询问模型 API Key、渠道 Token 等信息,完成后会写入\n
\n~/.openclaw/openclaw.json(已挂载至\n./config),后续可直接通过 UI 或 CLI 管理。
7️⃣ 重要日常运维
\n| 任务 | \n命令 | \n备注 | \n
|---|---|---|
| 创建备份(首次部署) | \ndocker exec openclaw-gateway-prod openclaw backup create --name init-$(date +%F) | \n备份会保存至容器内部\n~/.openclaw/backups,建议同步到宿主机\n./backups | \n
| 验证备份 | \ndocker exec openclaw-gateway-prod openclaw backup verify --name init-$(date +%F) | \n确认备份完整性 | \n
| 导出本地备份 | \ndocker cp openclaw-gateway-prod:/home/node/.openclaw/backups/<file> ./backups/ | \n长期保存到离线介质 | \n
| 升级前备份 | \ndocker exec openclaw-gateway-prod openclaw backup create --name pre-upgrade-$(date +%F) | \n防止升级失误 | \n
| 拉取新镜像 & 重启 | \ndocker pull docker.1ms.run/alpine/openclaw:v2026.3.9 && sed -i 's/prod-v2026.3.8/prod-v2026.3.9/' .env && docker compose -f docker-compose.prod.yml pull && docker compose -f docker-compose.prod.yml up -d | \n自动完成滚动升级 | \n
| 查看健康 | \ncurl -s http://127.0.0.1:18789/healthz | \n返回 200 OK 表示网关正常 | \n
| 日志轮转 | \n已在 docker-compose 中配置 max-size 100m\n与 max-file 5 | \n防止日志磁盘爆满 | \n
8️⃣ 常见问题排查
\n| 症状 | \n可能原因 | \n解决方案 | \n
|---|---|---|
容器启动失败,日志中出现 EACCES | \n主机目录权限不足 | \n确保 openclaw 用户拥有\n./config、./logs、./backups\n的读写权限(chown -R 1000:1000 ./config) | \n
| Nginx 404 | \n代理目标端口未映射或网关未运行 | \n验证 docker ps 中 openclaw-gateway-prod\n已监听 18789;检查 Nginx proxy_pass 地址是否为\n127.0.0.1:18789 | \n
| API 调用返回 401 | \nOPENCLAW_GATEWAY_TOKEN 不匹配 | \n在 .env 中重新生成 token 并重新启动容器;使用相同 token\n登录 UI | \n
| 模型提供商认证失败 | \nAPI Key 输入错误或配额耗尽 | \n重新在 onboard 向导或\nopenclaw models auth login 中更新正确的密钥 | \n
| 容器 OOM | \n内存限制过低 | \n增大 mem_limit(如\n4g)或检查容器内部进程占用 | \n
9️⃣ 生产环境最佳实践小结
\n- \n
- 最小权限:容器仅在
127.0.0.1\n绑定端口,外部只能通过 Nginx HTTPS 访问。
\n \n - 持久化卷:
openclaw_home\n卷保证所有配置、记忆、技能、工作区在容器重建后不丢失。
\n \n - 定期备份:建议使用
cron每日自动执行\nopenclaw backup create,并把备份同步到异地存储(如对象存储)。
\n \n - 滚动升级:升级前务必创建\npre‑upgrade 备份,使用\n
docker compose pull && up -d完成无停机切换。
\n \n - 监控报警:结合
Prometheus/\nGrafana监控容器cpu/memory/health,通过\nalertmanager推送到企业微信/飞书告警。 \n
🔟 结束语
\n完成以上步骤后,您将拥有一个 安全、可扩展、易维护 的\nOpenClaw 生产实例。后续可通过 OpenClaw\nDashboard(http://openclaw.example.com)管理渠道、插件、模型,亦可在容器内部直接执行\nopenclaw 子命令完成高级配置。
\n\n若有任何部署细节或后续功能需求(如多租户、插件定制、远程调试等),欢迎随时向我提问,我会第一时间给出对应方案。
\n
祝部署顺利,AI 助手跑通! 🐉🚀
\n”












暂无评论内容