OpenClaw Podman 容器化部署完整教程:EC2 Graviton + Amazon ECR + Rootless 安全隔离,AI Agent 云上生产环境实战

发布时间:2026/5/17 3:35:59

OpenClaw Podman 容器化部署完整教程:EC2 Graviton + Amazon ECR + Rootless 安全隔离,AI Agent 云上生产环境实战 OpenClaw Podman 容器化部署完整教程EC2 Graviton Amazon ECR Rootless 安全隔离AI Agent 云上生产环境实战Docker 装不上公司不让用 Docker Desktop或者就是想要更安全的容器方案OpenClaw 2026.3.28 简化了 Podman 部署流程——rootless 用户直接跑配合 Amazon EC2 Graviton 实例和 Amazon ECR 镜像托管一套组合拳把 AI Agent 搬到云上生产环境。这篇从零开始开 EC2 实例、构建镜像推到 ECR、Podman rootless 部署、systemd 开机自启全套走一遍。为什么选 Podman EC2 Graviton先说 Podman 和 Docker 的区别对比DockerPodman守护进程需要 dockerdroot不需要守护进程权限默认 root默认 rootless兼容性OCI 标准OCI 标准兼容 Docker CLIsystemd需要额外配置原生 Quadlet 支持安全依赖 dockerd无特权进程再说为什么选 GravitonAmazon EC2 Graviton 是亚马逊云科技自研的 Arm 处理器跑容器工作负载性价比很高。根据 AWS 官方数据Graviton 实例相比同类 x86 实例最多可节省 40% 的成本同时提供更好的能效。对于 OpenClaw 这种 AI Agent 网关服务CPU 占用不高但需要长期运行Graviton 是很合适的选择。推荐实例t4g.small2 vCPU2 GiBGraviton2月费约 $12。跑 OpenClaw Gateway 绑绑有余。第一步开 EC2 Graviton 实例# 用 AWS CLI 启动 Graviton 实例aws ec2 run-instances\--image-id ami-0abcdef1234567890\--instance-type t4g.small\--key-name my-key-pair\--security-group-ids sg-0123456789abcdef0\--subnet-id subnet-0123456789abcdef0\--tag-specificationsResourceTypeinstance,Tags[{KeyName,Valueopenclaw-agent}]安全组记得开18789Gateway 端口API Web UI18790Bridge 端口Node 配对用22SSHSSH 进去后装 Podman# Ubuntu/Debiansudoaptupdatesudoaptinstall-ypodman# Amazon Linux 2023sudodnfinstall-ypodmanAmazon Linux 2023 原生支持 Podman不用折腾。第二步构建镜像并推送到 Amazon ECRAmazon ECRElastic Container Registry是亚马逊云科技的容器镜像托管服务支持私有仓库 IAM 权限控制 镜像漏洞扫描。把 OpenClaw 镜像推到 ECR方便多台实例拉取也方便做版本管理。创建 ECR 仓库aws ecr create-repository\--repository-name openclaw\--image-scanning-configurationscanOnPushtrue\--regionus-east-1scanOnPushtrue开启镜像扫描——每次推送新镜像自动检查安全漏洞这是 ECR 的内置能力。构建并推送# 登录 ECRaws ecr get-login-password--regionus-east-1|\podmanlogin--usernameAWS --password-stdin\123456789012.dkr.ecr.us-east-1.amazonaws.com# 克隆 OpenClawgitclone https://github.com/openclaw/openclaw.gitcdopenclaw# 构建镜像Graviton 上直接构建 arm64 镜像podmanbuild-topenclaw.# 打标签podmantag openclaw:latest\123456789012.dkr.ecr.us-east-1.amazonaws.com/openclaw:latest# 推送podmanpush\123456789012.dkr.ecr.us-east-1.amazonaws.com/openclaw:latest在 Graviton 实例上构建天然就是 arm64 镜像不需要交叉编译。ECR 生命周期策略镜像多了会占空间。配个生命周期策略自动清理旧版本{rules:[{rulePriority:1,description:保留最近 10 个镜像,selection:{tagStatus:any,countType:imageCountMoreThan,countNumber:10},action:{type:expire}}]}aws ecr put-lifecycle-policy\--repository-name openclaw\--lifecycle-policy-text file://lifecycle-policy.json第三步Podman Rootless 部署一键部署# 一键设置创建用户、构建镜像、安装启动脚本./setup-podman.sh这个脚本做了三件事创建专用系统用户openclawnologin不能交互登录构建 OpenClaw 容器镜像安装启动脚本到~openclaw/run-openclaw-podman.sh如果镜像在 ECR从 ECR 拉取而不是本地构建# 先登录 ECRaws ecr get-login-password--regionus-east-1|\podmanlogin--usernameAWS --password-stdin\123456789012.dkr.ecr.us-east-1.amazonaws.com# 拉取podmanpull123456789012.dkr.ecr.us-east-1.amazonaws.com/openclaw:latest# 打本地标签podmantag123456789012.dkr.ecr.us-east-1.amazonaws.com/openclaw:latest openclaw:latest启动 Gateway./scripts/run-openclaw-podman.sh launch运行配置向导./scripts/run-openclaw-podman.sh launch setup然后打开http://127.0.0.1:18789/用~openclaw/.openclaw/.env里的 Token 登录。Systemd 开机自启Quadlet生产环境必须配 systemdEC2 实例重启后 Agent 自动恢复# 带 Quadlet 的一键安装./setup-podman.sh--quadlet管理命令# 启动sudosystemctl--machineopenclaw--userstart openclaw.service# 停止sudosystemctl--machineopenclaw--userstop openclaw.service# 查看状态sudosystemctl--machineopenclaw--userstatus openclaw.service# 看日志sudojournalctl--machineopenclaw--user-uopenclaw.service-f这样 EC2 实例重启后 OpenClaw Gateway 自动拉起不需要手动干预。安全配置openclaw 专用用户setup-podman.sh创建的用户有几个安全特性nologin Shell不能交互式登录减少攻击面独立 Home/home/openclaw/只有 openclaw 和 root 能访问subuid/subgidrootless Podman 需要用户命名空间映射如果系统没自动分配 subuid/subgidechoopenclaw:100000:65536|sudotee-a/etc/subuidechoopenclaw:100000:65536|sudotee-a/etc/subgidEC2 安全组最小权限原则# 只开必要端口aws ec2 authorize-security-group-ingress\--group-id sg-0123456789abcdef0\--protocoltcp--port18789\--cidr你的IP/32# Bridge 端口只开给需要配对的 Node IPaws ec2 authorize-security-group-ingress\--group-id sg-0123456789abcdef0\--protocoltcp--port18790\--cidrNode的IP/32IAM 角色EC2 实例绑 IAM 角色让 Podman 能拉 ECR 镜像 调用 Amazon Bedrock{Version:2012-10-17,Statement:[{Effect:Allow,Action:[ecr:GetAuthorizationToken,ecr:BatchGetImage,ecr:GetDownloadUrlForLayer],Resource:*},{Effect:Allow,Action:bedrock:InvokeModel,Resource:arn:aws:bedrock:*::foundation-model/*}]}这样 OpenClaw 在容器里就能直接调 Amazon Bedrock 的模型Claude、Nova 等不需要在环境变量里配 AK/SK。网络默认只绑定 loopback127.0.0.1。要暴露到局域网# 在 .env 里设置OPENCLAW_GATEWAY_BINDlan环境变量在~openclaw/.openclaw/.env里设置OPENCLAW_GATEWAY_TOKENyour-token-here# 如果用 IAM 角色调 Bedrock不需要配 API Key# 如果用第三方模型配对应 KeyGROQ_API_KEYyour-key自定义镜像构建时可以加额外依赖# 加 apt 包OPENCLAW_DOCKER_APT_PACKAGESffmpeg imagemagick./setup-podman.sh# 预装扩展OPENCLAW_EXTENSIONSdiagnostics-otel matrix./setup-podman.sh常见问题EACCES 权限错误检查 bind-mount 的目录所有者是否是运行 Podman 的用户。ECR 登录过期ECR 的 token 12 小时过期。配个 cron 定期刷新# /etc/cron.d/ecr-login0*/6 * * * openclaw aws ecr get-login-password--regionus-east-1|podmanlogin--usernameAWS --password-stdin123456789012.dkr.ecr.us-east-1.amazonaws.comGraviton 兼容性OpenClaw 的 npm 依赖都支持 arm64。如果自定义插件用了 native module确认有 arm64 预编译。Quadlet 服务找不到运行daemon-reload。Quadlet 需要 cgroups v2用podman info --format {{.Host.CgroupsVersion}}检查。Amazon EC2 Gravitonhttps://aws.amazon.com/cn/ec2/graviton/Amazon ECR 文档https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.htmlOpenClaw Podman 文档https://docs.openclaw.ai/install/podmanGitHubhttps://github.com/openclaw/openclaw

相关新闻