09-Docker部署指南
09-Docker部署指南
09 Docker部署指南 09 Docker部署指南 Modified June 10 核心区别: Podman 以当前用户身份运行容器( userns=keep id),不需要 Docker 守护进程,也不需要 root 权限。 ⠀ 快速开始: ⠀ Code block Plain Text 一键初始化(构建镜像 + 创建配置 + 启动 Gateway) ./scripts/podman/setup.sh 使用 CLI 管理容器化的 Gateway openclaw container <容器名 gateway status ⠀ SELinux 环境: Podman 启动脚本会自动检测 SELinux 状态,在 enforcing/permissive 模式下自动为挂载目录追加 :Z 选项,无需手动配置。 ⠀ Systemd 集成(Quadlet): 使用 quadlet 标志可生成 systemd 用户服务,支持开机自启和 systemctl user 管理。需要 loginctl enable linger 以支持 SSH/无头环境下的持久运行。 ⠀ 端口绑定: 默认只绑定 127.0.0.1(Gateway 18789,Bridge 18790),可通过 OPENCLAW PODMAN GATEWAY HOST PORT 等环境变量覆盖。 ⠀ 详细的 Podman 部署文档见 docs.openclaw.ai/install/podman。 自动更新和 CI/CD ⠀ Watchtower 自动更新 ⠀ Watchtower 会自动检测镜像更新并重启容器: ⠀ Code block Plain Text 添加到 docker compose.yml services: watchtower: image: containrrr/watchtower container name: watchtower volumes: /var/run/docker.sock:/var/run/docker.sock environment: WATCHTOWER CLEANUP=true WATCHTOWER POLL INTERVAL=86400 每 24 小时检查一次 WATCHTOWER INCLUDE STOPPED=false restart: unless stopped ⠀ GitHub Actions CI/CD ⠀ Code block Plain Text .github/workflows/deploy.yml name: Deploy OpenClaw on: push: branches: [main] jobs: deploy: runs on: ubuntu latest steps: uses: actions/checkout@v4 name: Deploy to server uses: appleboy/ssh action@v1 with: host: ${{ secrets.SERVER HOST }} username: ${{ secrets.SERVER USER }} key: ${{ secrets.SSH PRIVATE KEY }} script: | cd /opt/openclaw docker compose pull && docker compose up d docker image prune f ⠀ 手动更新流程 ⠀ Code block Plain Text docker compose pull 拉取最新镜像 docker compose up d 重启服务 docker image prune f 清理旧镜像 性能调优和资源限制 ⠀ ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⠀ 容器资源限制 ⠀ 防止单个容器吃光服务器资源: ⠀ Code block Plain Text services: openclaw gateway: deploy: resources: limits: cpus: "2.0" memory: 4G reservations: cpus: "0.5" memory: 512M postgres: deploy: resources: limits: cpus: "1.0" memory: 2G redis: deploy: resources: limits: cpus: "0.5" memory: 512M ⠀ Docker 守护进程优化 ⠀ 编辑 /etc/docker/daemon.json,配置日志轮转、overlay2 存储驱动、文件描述符限制: ⠀ Code block Plain Text { "log driver": "json file", "log opts": { "max size": "10m", "max file": "3" }, "storage driver": "overlay2", "default ulimits": { "nofile": { "Name": "nofile", "Hard": 65536, "Soft": 65536 } } } ⠀ 监控资源使用 ⠀ ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⠀ Code block Plain Text docker stats 实时查看所有容器资源 docker stats openclaw gateway 查看特定容器 docker stats format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" 格式化输出 备份和恢复 ⠀ 全量备份脚本 ⠀ Code block Plain Text !/bin/bash backup.sh — OpenClaw 全量备份 BACKUP DIR="/opt/backups/openclaw" DATE=$(date +%Y%m%d %H%M%S) mkdir p "<equation {BACKUP DIR}/</equation {DATE}" 备份配置文件 cp docker compose.yml .env "<equation {BACKUP DIR}/</equation {DATE}/" 备份 OpenClaw 数据卷 docker run rm \ v openclaw data:/source:ro \ v "<equation {BACKUP DIR}/</equation {DATE}":/backup \ alpine tar czf /backup/openclaw data.tar.gz C /source . 备份 PostgreSQL docker compose exec T postgres \ pg dump U openclaw openclaw | gzip "<equation {BACKUP DIR}/</equation {DATE}/db backup.sql.gz" 备份 Redis docker run rm \ v redis data:/source:ro \ v "<equation {BACKUP DIR}/</equation {DATE}":/backup \ alpine tar czf /backup/redis data.tar.gz C /source . 清理 30 天前的备份 find "${BACKUP DIR}" maxdepth 1 type d mtime +30 exec rm rf {} \; echo "Backup completed: <equation {BACKUP DIR}/</equation {DATE}" ⠀ v2026.5.22 备份命名:新版更倾向使用 local time backup archive names。生产脚本里建议保留时区信息或在备份目录旁写入 date Is 输出,方便跨服务器恢复时判断备份先后。 ⠀ 恢复流程 ⠀ Code block Plain Text !/bin/bash restore.sh — 从备份恢复 BACKUP PATH=$1 [ z "$BACKUP PATH" ] && echo "Usage: ./restore.sh /opt/backups/openclaw/20240101 120000" && exit 1 停止服务 docker compose down 恢复配置 cp "<equation {BACKUP PATH}/docker compose.yml" "</equation {BACKUP PATH}/.env" . 恢复数据卷 docker volume create openclaw data docker run rm v openclaw data:/target v "${BACKUP PATH}":/backup \ alpine tar xzf /backup/openclaw data.tar.gz C /target 恢复数据库 docker compose up d postgres && sleep 5 gunzip c "${BACKUP PATH}/db backup.sql.gz" | \ docker compose exec T postgres psql U openclaw openclaw 恢复 Redis docker volume create redis data docker run rm v redis data:/target v "${BACKUP PATH}":/backup \ alpine tar xzf /backup/redis data.tar.gz C /target 启动所有服务 docker compose up d echo "Restore completed from: ${BACKUP PATH}" docs.openclaw.ai/install/podman 核心区别: Podman 以当前用户身份运行容器( userns=keep id),不需要 Docker 守护进程,也不需要 root 权限。 ⠀ 快速开始: ⠀ ⠀ SELinux 环境: Podman 启动脚本会自动检测 SELinux 状态,在 enforcing/permissive 模式下自动为挂载目录追加 :Z 选项,无需手动配置。 ⠀ Systemd 集成(Quadlet): 使用 quadlet 标志可生成 systemd 用户服务,支持开机自启和 systemctl user 管理。需要 loginctl enable linger 以支持 SSH/无头环境下的持久运行。 ⠀ 端口绑定: 默认只绑定 127.0.0.1(Gateway 18789,Bridge 18790),可通过 OPENCLAW PODMAN GATEWAY HOST PORT 等环境变量覆盖。 ⠀ 详细的 Podman 部署文档见 docs.openclaw.ai/install/podman。 docs.openclaw.ai/install/podman 详细的 Podman 部署文档见 docs.openclaw.ai/install/podman。 docs.openclaw.ai/install/podman 自动更新和 CI/CD ⠀ Watchtower 自动更新 ⠀ Watchtower 会自动检测镜像更新并重启容器: ⠀ ⠀ GitHub Actions CI/CD ⠀ ⠀ 手动更新流程 ⠀ 性能调优和资源限制 ⠀ ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⠀ 容器资源限制 ⠀ 防止单个容器吃光服务器资源: ⠀ ⠀ Docker 守护进程优化 ⠀ 编辑 /etc/docker/daemon.json,配置日志轮转、overlay2 存储驱动、文件描述符限制: ⠀ ⠀ 监控资源使用 ⠀ ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⠀ 备份和恢复 ⠀ 全量备份脚本 ⠀ ⠀ v2026.5.22 备份命名:新版更倾向使用 local time backup archive names。生产脚本里建议保留时区信息或在备份目录旁写入 date Is 输出,方便跨服务器恢复时判断备份先后。 v2026.5.22 备份命名:新版更倾向使用 local time backup archive names。生产脚本里建议保留时区信息或在备份目录旁写入 date Is 输出,方便跨服务器恢复时判断备份先后。 ⠀ 恢复流程 ⠀ ⠀ 定时备份(Cron) ⠀ 常见 Docker 问题排查 ⠀ 镜像构建失败 ⠀ ⠀ 容器无法启动 ⠀ ⠀ 端口冲突 ⠀ ⠀ 权限问题 ⠀ ⠀ 内存不足(OOM Killed) ⠀ ⠀ 网络连接问题 ⠀ ⠀ 数据卷挂载问题 ⠀ ⠀ Docker Compose 版本问题 ⠀ 确认使用 v2 语法(docker compose,不带横杠)。v1 的 docker compose 已弃用,v2 内置在 Docker Engine 中。 快速参考卡片 ⠀ 常用命令速查 ⠀ 操作 命令 启动服务 docker compose up d 停止服务 docker compose down 查看状态 docker compose ps 查看日志 docker compose logs f 重启服务 docker compose restart 更新镜像 docker compose pull && docker compose up d 进入容器 docker compose exec openclaw gateway /bin/bash 资源监控 docker stats 清理空间 docker system prune a 操作 操作 命令 命令 启动服务 启动服务 docker compose up d docker compose up d 停止服务 停止服务 docker compose down docker compose down 查看状态 查看状态 docker compose ps docker compose ps 查看日志 查看日志 docker compose logs f docker compose logs f 重启服务 重启服务 docker compose restart docker compose restart 更新镜像 更新镜像 docker compose pull && docker compose up d docker compose pull && docker compose up d 进入容器 进入容器 docker compose exec openclaw gateway /bin/bash docker compose exec openclaw gateway /bin/bash 资源监控 资源监控 docker stats docker stats 清理空间 清理空间 docker system prune a docker system prune a ⠀ 部署方案对比 ⠀ 方案 成本 难度 适用场景 VPS + Docker Compose $5 10/月 低 个人/小团队 AWS EC2 $15 50/月 中 中小团队 AWS ECS $20 100/月 高 需要自动扩缩容 GCP Cloud Run 按用量计费 中 Serverless 场景 阿里云 ECS ¥50 200/月 低 国内用户 方案 方案 成本 成本 难度 难度 适用场景 适用场景 VPS + Docker Compose VPS + Docker Compose $5 10/月 $5 10/月 低 低 个人/小团队 个人/小团队 AWS EC2 AWS EC2 $15 50/月 $15 50/月 中 中 中小团队 中小团队 AWS ECS AWS ECS $20 100/月 $20 100/月 高 高 需要自动扩缩容 需要自动扩缩容 GCP Cloud Run GCP Cloud Run 按用量计费 按用量计费 中 中 Serverless 场景 Serverless 场景 阿里云 ECS 阿里云 ECS ¥50 200/月 ¥50 200/月 低 低 国内用户 国内用户 下一步 ⠀ Docker 部署搞定了!去 10. 安全配置指南 加固你的 AI 助手。 课程信息 ⠀ • 作者:老金 • GitHub:https://github.com/KimYx0207 • 公众号:老金带你玩AI • X(Twitter):老金带你玩AI • 个人博客:https://aiking.dev • 难度等级:🔴 高级 • 阅读时间:30 分钟 • 前置知识:了解 Docker 基础概念、已完成快速开始(03 快速开始指南) ⠀ 本篇你将学会: 用 Docker 部署 OpenClaw 到服务器、配置 docker compose、管理数据持久化、设置自动更新 ⠀ 谁需要看这篇? 如果你只是在自己电脑上用,不需要看这篇。这篇是给想把 OpenClaw 部署到远程服务器(比如云服务器)的人准备的 ⠀ 为什么用 Docker 部署 OpenClaw? 官方文档:docs.openclaw.ai/install/docker docs.openclaw.ai/install/docker 官方文档:docs.openclaw.ai/install/docker docs.openclaw.ai/install/docker ⠀ 在聊具体操作之前,先搞清楚一个问题:我直接装不行吗,为什么要折腾 Docker(容器化平台,把应用和环境打包在一起运行)? ⠀ Docker 部署的优势 ⠀ 环境一致性 — 本地能跑的,服务器上一定能跑。不会出现"我这里没问题啊"的经典场景。Docker 把 Node.js 版本、系统依赖、配置文件全部打包在一起,消除了环境差异。 ⠀ 一键部署 — 不需要在服务器上手动装 Node.js、配置 npm、处理依赖冲突。一条 docker compose up 搞定一切。 ⠀ 隔离性 — OpenClaw 跑在自己的容器里,不会污染宿主机环境。你可以在同一台机器上跑多个版本的 OpenClaw,互不干扰。 ⠀ 易于迁移 — 想换服务器?把 docker compose.yml(Docker 的编排工具,用一个配置文件管理多个容器)和数据卷拷过去,几分钟就能恢复。 ⠀ Agent 沙箱 — Docker 天然适合做 Agent 工具执行的沙箱。通过 agents.defaults.sandbox.mode 配置(默认 "non main"),非主会话的 Agent 自动在独立 Docker 容器中隔离执行,不会搞坏宿主机。 ⠀ 回滚方便 — 升级出问题?切回上一个镜像(容器的模板,包含了运行所需的一切)版本就行,数据都在 volume(数据卷,让容器重启后数据不丢失)里,不受影响。 ⠀ 什么时候不需要 Docker ⠀ • 在自己电脑上开发调试,直接本地安装更快 • 只是临时试用,不需要持久化部署 • 机器资源极其有限(Docker 本身有一定开销) ⠀ 经验法则:本地开发用原生安装,远程部署用 Docker。 经验法则:本地开发用原生安装,远程部署用 Docker。 Docker 基础环境准备 ⠀ 安装 Docker ⠀ Linux(推荐 Ubuntu 22.04+) ⠀ ⠀ macOS ⠀ ⠀ Windows ⠀ ⠀ 系统要求 ⠀ 项目 最低要求 推荐配置 CPU 1 核 2 核+ 内存 2 GB 4 GB+ 磁盘 10 GB 20 GB+ Docker 24.0+ 最新稳定版 Docker Compose v2.20+ 最新稳定版 项目 项目 最低要求 最低要求 推荐配置 推荐配置 CPU CPU 1 核 1 核 2 核+ 2 核+ 内存 内存 2 GB 2 GB 4 GB+ 4 GB+ 磁盘 磁盘 10 GB 10 GB 20 GB+ 20 GB+ Docker Docker 24.0+ 24.0+ 最新稳定版 最新稳定版 Docker Compose Docker Compose v2.20+ v2.20+ 最新稳定版 最新稳定版 ⠀ 验证 Docker 环境 ⠀ ⠀ 注意:本文全部使用 docker compose(v2 语法),不是 docker compose(v1 已弃用)。 注意:本文全部使用 docker compose(v2 语法),不是 docker compose(v1 已弃用)。 官方 Docker 镜像使用 ⠀ 拉取官方镜像 ⠀ ⠀ v2026.5.27 发布校验:OpenClaw 根 npm 包和 OpenClaw owned npm plugins 已引入 generated shrinkwrap,并支持适合插件 tarball 的 bundled runtime dependencies。Docker / npm 生产部署时,优先用官方发布包和固定 tag;自建镜像要保留 package integrity check,不要为了减小镜像随手删 lockfile / shrinkwrap。v2026.5.27 release notes 同时给出了 npm tarball integrity、Docker runtime workspace template smoke、postpublish checks 和完整 release CI evidence,生产升级时要把这些证据当成验收入口。 v2026.5.27 发布校验:OpenClaw 根 npm 包和 OpenClaw owned npm plugins 已引入 generated shrinkwrap,并支持适合插件 tarball 的 bundled runtime dependencies。Docker / npm 生产部署时,优先用官方发布包和固定 tag;自建镜像要保留 package integrity check,不要为了减小镜像随手删 lockfile / shrinkwrap。v2026.5.27 release notes 同时给出了 npm tarball integrity、Docker runtime workspace template smoke、postpublish checks 和完整 release CI evidence,生产升级时要把这些证据当成验收入口。 ⠀ 安全补丁提示:这一轮还包含 protobufjs 8.4.0 安全更新。生产镜像不要长期停在旧 tag;升级镜像后用 openclaw doctor 和容器健康检查确认 Gateway、插件和 channels 都仍能启动。 安全补丁提示:这一轮还包含 protobufjs 8.4.0 安全更新。生产镜像不要长期停在旧 tag;升级镜像后用 openclaw doctor 和容器健康检查确认 Gateway、插件和 channels 都仍能启动。 ⠀ 从仓库 Dockerfile 构建镜像 ⠀ ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⠀ 如果需要自定义镜像(比如加额外系统包): ⠀ ⠀ 镜像标签说明 ⠀ 标签 说明 适用场景 latest 最新稳定版 生产环境 vYYYY.M.D 指定版本号(如 v2026.5.27) 需要版本锁定 nightly 每日构建 尝鲜新功能 local 本地构建 自定义需求 标签 标签 说明 说明 适用场景 适用场景 latest latest 最新稳定版 最新稳定版 生产环境 生产环境 vYYYY.M.D vYYYY.M.D 指定版本号(如 v2026.5.27) 指定版本号(如 v2026.5.27) 需要版本锁定 需要版本锁定 nightly nightly 每日构建 每日构建 尝鲜新功能 尝鲜新功能 local local 本地构建 本地构建 自定义需求 自定义需求 ⠀ Gateway ready 与 restart trace ⠀ v2026.5.22 对 Gateway 启动路径做了多处性能和诊断优化:插件元数据、channel catalog、startup idle plugin work、ACPX runtime 会尽量延迟或缓存,Gateway ready 信号不再被未用到的 handler tree 阻塞。 ⠀ 生产部署的健康检查建议区分三件事: ⠀ 1. 容器进程是否存活。 2. Gateway /readyz 或状态命令是否 ready。 3. channel sidecar、插件服务、meeting notes 等可选能力是否已启动。 ⠀ 如果 restart 变慢或 ready 抖动,先看 restart trace 和 Gateway 日志,不要直接扩大超时时间掩盖问题。 ⠀ 快速启动单容器 ⠀ 不想写 docker compose.yml?一条命令也能跑: ⠀ ⠀ 但对于生产环境,强烈建议用 Docker Compose。 docker compose 完整配置详解 ⠀ 基础版:只跑 Gateway ⠀ 最简单的配置,适合个人使用: ⠀ ⠀ 进阶版:Gateway + 数据库 + Redis ⠀ 适合团队使用,需要持久化存储和缓存: ⠀ ⠀ 启动和管理 ⠀ 环境变量配置大全 ⠀ .env 文件模板 ⠀ 在 docker compose.yml 同目录下创建 .env 文件: ⠀ ⠀ 环境变量优先级 ⠀ Docker Compose 中环境变量优先级(从高到低):命令行 e environment: 直接设置 env file: .env 文件 镜像默认值。 ⠀ 敏感信息处理 ⠀ 生产环境不要把密钥直接写在 docker compose.yml 里。用 ${VARIABLE} 引用 .env 文件中的值,或使用 Docker Secrets(Swarm 模式)。记得把 .env 加入 .gitignore。 数据持久化(Volumes 配置) ⠀ 为什么需要 Volumes ⠀ Docker 容器是临时的 — 容器删了,里面的数据就没了。Volumes 把数据存在宿主机上,容器重建后数据还在。 ⠀ 关键数据目录 ⠀ 容器内路径 说明 是否需要持久化 /home/node/.openclaw OpenClaw 配置和数据 必须 /home/node/.openclaw/workspace 工作空间文件 必须 /var/lib/postgresql/data PostgreSQL 数据 必须 /data Redis 持久化数据 推荐 容器内路径 容器内路径 说明 说明 是否需要持久化 是否需要持久化 /home/node/.openclaw /home/node/.openclaw OpenClaw 配置和数据 OpenClaw 配置和数据 必须 必须 /home/node/.openclaw/workspace /home/node/.openclaw/workspace 工作空间文件 工作空间文件 必须 必须 /var/lib/postgresql/data /var/lib/postgresql/data PostgreSQL 数据 PostgreSQL 数据 必须 必须 /data /data Redis 持久化数据 Redis 持久化数据 推荐 推荐 ⠀ Named Volumes vs Bind Mounts ⠀ ⠀ Named Volume 性能更好(尤其 macOS/Windows),可移植性高,Docker 自动处理权限。Bind Mount 方便直接查看和编辑文件,但依赖宿主机路径。 ⠀ 查看和管理 Volumes ⠀ 网络配置 ⠀ 端口映射 ⠀ OpenClaw 使用多个端口提供不同服务: ⠀ 端口 服务 说明 18789 Gateway 主服务入口 18790 Bridge 内部桥接通信 18791 Browser Control 浏览器控制接口 18793 Canvas Host 画布渲染服务 18800 18899 Browser CDP Chrome DevTools Protocol 端口池 端口 端口 服务 服务 说明 说明 18789 18789 Gateway Gateway 主服务入口 主服务入口 18790 18790 Bridge Bridge 内部桥接通信 内部桥接通信 18791 18791 Browser Control Browser Control 浏览器控制接口 浏览器控制接口 18793 18793 Canvas Host Canvas Host 画布渲染服务 画布渲染服务 18800 18899 18800 18899 Browser CDP Browser CDP Chrome DevTools Protocol 端口池 Chrome DevTools Protocol 端口池 ⠀ ⠀ 安全提示:生产环境建议绑定 127.0.0.1,通过反向代理暴露服务,不要直接把端口开放到公网。只有 Gateway(18789)需要对外暴露,其他端口仅在需要时映射。 安全提示:生产环境建议绑定 127.0.0.1,通过反向代理暴露服务,不要直接把端口开放到公网。只有 Gateway(18789)需要对外暴露,其他端口仅在需要时映射。 ⠀ 反向代理 Forwarded Headers 安全提示(v2026.4.x+):OpenClaw 现在会检查转发头(X Forwarded For / X Forwarded Host / X Forwarded Proto)的一致性。即使请求通过 loopback 到达,如果携带了指向非本地来源的转发头,Gateway 会将该请求视为远程请求,不再享有 loopback 本地信任。反向代理必须覆盖(而非追加)来自客户端的转发头。如果使用 trusted proxy 认证模式,需要在 gateway.trustedProxies 中配置代理 IP,且不能使用 loopback 地址。详见 10 安全配置指南。 反向代理 Forwarded Headers 安全提示(v2026.4.x+):OpenClaw 现在会检查转发头(X Forwarded For / X Forwarded Host / X Forwarded Proto)的一致性。即使请求通过 loopback 到达,如果携带了指向非本地来源的转发头,Gateway 会将该请求视为远程请求,不再享有 loopback 本地信任。反向代理必须覆盖(而非追加)来自客户端的转发头。如果使用 trusted proxy 认证模式,需要在 gateway.trustedProxies 中配置代理 IP,且不能使用 loopback 地址。详见 10 安全配置指南。 ⠀ Docker 网络模式 ⠀ ⠀ 容器间通信 ⠀ 在同一个 Docker 网络中,容器可以通过服务名互相访问: ⠀ ⠀ 连接宿主机服务 ⠀ 如果 Ollama 跑在宿主机上,容器里用 host.docker.internal 访问: ⠀ 生产环境部署最佳实践 ⠀ Nginx 反向代理配置 ⠀ 生产环境不要直接暴露 OpenClaw 端口,用 Nginx 做反向代理: ⠀ ⠀ 启用配置: ⠀ ⠀ SSL/TLS 证书配置 ⠀ Let's Encrypt(免费): ⠀ ⠀ Caddy(更简单,自动 HTTPS): ⠀ ⠀ Caddy 自动申请和续期证书,比 Nginx + certbot 省事得多。 ⠀ 日志管理 ⠀ Docker 日志驱动配置 ⠀ ⠀ 查看和分析日志 ⠀ ⠀ 集中式日志(生产推荐) ⠀ ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⏭️ 小白可跳过 — 这部分面向运维专家,单机部署不需要 ⠀ 多节点部署建议用 Loki + Grafana 或 ELK 收集日志,通过 fluentd 日志驱动转发。 ⠀ 健康检查 ⠀ ⠀ 配合监控告警,可以写一个简单的 cron 脚本检查 docker inspect format='{{.State.Health.Status}}' openclaw gateway 的输出,unhealthy 时发邮件并自动重启。 云平台部署 ⠀ AWS 部署 ⠀ EC2 + Docker Compose ⠀ ⠀ AWS ECS(容器服务) ⠀ 适合需要自动扩缩容的场景。在 AWS 控制台创建 ECS 任务定义,指定镜像 openclaw/openclaw:latest,端口映射 18789:18789,分配 2048MB 内存和 1024 CPU 单位。详细配置参考 AWS ECS 文档。 AWS ECS 文档 ⠀ GCP 部署 ⠀ Cloud Run(Serverless) ⠀ ⠀ GCE(虚拟机) ⠀ 创建 e2 medium 实例,SSH 连接后安装 Docker 并部署(流程同 EC2)。 ⠀ Azure 部署 ⠀ Azure Container Instances ⠀ ⠀ 阿里云部署 ⠀ ECS + Docker ⠀ ⠀ VPS 部署(Hetzner / Vultr / DigitalOcean) ⠀ 性价比最高的方案,适合个人和小团队(约 $5 10/月): ⠀ ⠀ 远程访问方案 ⠀ Gateway 默认绑定 127.0.0.1,外部无法直接访问。三种方案: ⠀ 方案一:SSH 隧道(最简单) ⠀ ⠀ 方案二:Tailscale(推荐长期使用) ⠀ ⠀ 方案三:反向代理 + HTTPS(对外服务) ⠀ 参考上面的 Nginx 或 Caddy 配置。 Agent 沙箱(Docker 隔离) ⠀ Docker 在 OpenClaw 中扮演双重角色:一是容器化部署 Gateway 本身,二是为 Agent 工具执行提供沙箱隔离。这两者是独立的概念: ⠀ • Gateway 容器化 — 整个 OpenClaw 跑在 Docker 里 • Agent 沙箱 — Gateway 跑在主机上(或容器里),但 Agent 的工具执行在独立的 Docker 容器中 ⠀ 沙箱的核心价值:Agent 执行的代码(shell 命令、脚本等)被限制在隔离容器中,即使代码有破坏性操作也不会影响宿主机。 ⠀ 沙箱模式 ⠀ OpenClaw 的沙箱通过 agents.defaults.sandbox.mode 控制。配置文件位于 /.openclaw/openclaw.json(JSON5 格式): ⠀ ⠀ "non main" 是推荐的默认值:主会话直接在宿主环境执行以保证交互性能,而 Agent 派生的子会话自动在 Docker 容器中隔离运行,防止工具执行影响宿主机。 ⠀ 沙箱镜像类型 ⠀ 镜像 说明 大小 Dockerfile.sandbox 基础沙箱,最小化 200MB Dockerfile.sandbox browser 带浏览器(Playwright) 800MB Dockerfile.sandbox common 通用沙箱,常用工具齐全 500MB 镜像 镜像 说明 说明 大小 大小 Dockerfile.sandbox Dockerfile.sandbox 基础沙箱,最小化 基础沙箱,最小化 200MB 200MB Dockerfile.sandbox b