
1. 项目概述为什么2026年还要亲手部署Hermes Agent与OpenClaw2026年AI智能体Agent早已不是实验室里的概念玩具而是真正嵌入企业运维、自动化测试、私有知识库响应、甚至个人数字助理工作流中的“数字员工”。Hermes Agent和OpenClaw正是这一代轻量级、可插拔、强扩展性智能体框架的代表——前者专注任务编排与多步推理调度后者聚焦于技能Skill的模块化封装与跨平台执行。但问题来了当SaaS平台开始收取高昂的Agent调用费、当公有云托管服务限制了你对底层模型、工具链和日志的完全控制权、当你需要把Agent跑在自己采购的阿里云ECS上并接入内网数据库或本地GPU时你就必须回到最扎实的路径亲手部署。这个标题里藏着三个关键信号“2026年”不是凑时间噱头而是指代当前主流技术栈的成熟态——Rocky Linux 9.x成为阿里云默认镜像、Docker 26已成标配、Ollama 0.4原生支持Qwen3.5:9b等新模型“阿里云服务器”意味着我们必须直面真实生产环境约束安全组策略、SELinux默认开启、阿里云源替换、时区与NTP同步、SSH密钥登录强制化而“保姆级”三个字是给所有踩过坑的人写的——我试过在阿里云上用curl -fsSL https://get.docker.com | sh直接装Docker结果被SELinux拦在启动服务那一步也试过用pip install openclaw结果发现它依赖的pydantic2.0和系统自带的python3.9冲突到连openclaw --version都报错更别提hermes agent desktop版安装超时这种搜索热词背后其实是国内用户绕不开的GitHub Release下载限速与CDN节点缺失问题。所以这篇教程不讲“什么是Agent”也不堆砌架构图只做一件事把你从阿里云控制台点击“创建实例”那一刻起到最终在浏览器里打开http://你的公网IP:8000看到Hermes Dashboard、并在终端里输入openclaw list-skills成功返回一串JSON为止每一步敲什么命令、为什么这么敲、哪一行不能复制粘贴、哪个参数必须改、改错会触发什么错误——全部摊开讲透。适合三类人刚买完阿里云ECS但卡在第一步的新人、想把现有Agent从Railway/Dify迁移到自有服务器的开发者、以及需要为团队搭建统一Agent运行基座的运维同学。核心关键词就五个阿里云、服务器、部署、Hermes Agent、OpenClaw全文所有操作都围绕这五个词的真实落地展开不发散、不炫技、不假设你已装好VS Code或配好代理。2. 整体设计思路为什么选Rocky Linux Docker Compose Ollama组合2.1 操作系统选型为什么不是Ubuntu或CentOS Stream阿里云官方镜像列表里Ubuntu 22.04 LTS和Rocky Linux 9.4并列推荐。但实际部署中Ubuntu的apt update在国内源不稳定尤其遇到security.ubuntu.com域名解析失败时整个基础环境初始化就卡死而CentOS Stream作为滚动发布版其内核和glibc更新节奏不可控曾有客户反馈某次dnf upgrade后Ollama的CUDA驱动兼容层直接失效。Rocky Linux 9.4则不同它是RHEL 9.4的100%二进制兼容克隆阿里云为其提供了全量的mirrors.aliyun.com/rocky镜像站dnf makecache平均耗时1.2秒且默认启用firewalld和SELinux enforcing这恰恰逼你提前处理好生产环境最常被忽略的安全基线——比如Hermes Agent的Web端口8000必须显式放行而不是靠ufw disable一关了之。提示阿里云控制台创建实例时在“镜像”页签下务必选择“公共镜像”→“Rocky Linux”版本选“9.4 64位”。不要选“自定义镜像”或“市场镜像”后者可能预装了冲突的Docker旧版本。2.2 容器化方案为什么弃用Docker单容器坚持用Docker ComposeHermes Agent和OpenClaw看似两个独立组件实则存在强耦合Hermes需要调用OpenClaw注册的技能如web_search、file_read而OpenClaw的技能执行又依赖Hermes提供的上下文ID和会话状态。若拆成两个独立docker run命令网络互通需手动建bridge、环境变量传递易出错、日志分散难排查。Docker Compose用一个docker-compose.yml文件统管天然解决三件事网络隔离services:下所有容器自动加入同一默认网络Hermes可通过openclaw:8080直接访问OpenClaw API无需记IP启动顺序通过depends_onhealthcheck确保OpenClaw服务就绪后Hermes才启动避免“Connection refused”重试风暴配置收敛模型路径、API密钥、技能目录等敏感参数全部抽离到.env文件不硬编码进YAML符合12-Factor App原则。注意阿里云ECS默认不预装Docker Compose。很多人误以为docker compose命令是Docker Desktop附带的其实它是Docker CLI 2.0的子命令而阿里云Rocky镜像装的是Docker CE 24.x其docker compose插件需单独安装。我们采用更稳定的docker-compose-v2二进制方式规避CLI版本错配风险。2.3 模型运行层为什么Ollama是当前最优解而非vLLM或Text Generation Inference搜索热词里高频出现阿里云服务器上ollama安装qwen3.5:9b这不是偶然。Ollama在2026年已进化为“模型即服务”MaaS的事实标准零配置启动ollama run qwen3.5:9b一条命令完成模型下载、GPU卸载若ECS有NVIDIA T4、HTTP API暴露默认localhost:11434比vLLM需手写--tensor-parallel-size、--pipeline-parallel-size参数友好十倍阿里云深度适配Ollama官方Docker镜像内置/etc/ollama/配置目录可挂载阿里云NAS作为模型仓库实现多ECS实例共享同一套模型缓存节省带宽与磁盘OpenClaw原生支持OpenClaw的ollama技能模块直接调用http://host.docker.internal:11434/api/chat无需额外封装REST Client而TGI需配置--port、--hostname且默认不启用CORS前端调用必跨域失败。唯一代价是内存占用略高——Qwen3.5:9b在CPU模式下需4.2GB RAM因此阿里云实例规格至少选ecs.c7.large2核4G这是硬性门槛不能妥协。3. 核心细节解析从系统初始化到Docker环境就绪3.1 阿里云ECS首次登录后的五项必做操作刚拿到ECS的root密码或SSH密钥别急着装Docker。先执行这五步否则后续90%的报错都源于此更换阿里云源Rocky Linux 9.4专用Rocky默认使用mirrorlist.centos.org国内访问极慢且常超时。执行以下命令彻底替换sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/rocky*.repo sed -i s|#baseurlhttp://dl.rockylinux.org|$baseurlhttps://mirrors.aliyun.com|g /etc/yum.repos.d/rocky*.repo dnf clean all dnf makecache关键点sed -i s/mirrorlist/#mirrorlist/g是注释掉mirrorlist行因为Rocky 9.4的mirrorlist配置会覆盖baseurl而https://mirrors.aliyun.com是阿里云官方镜像站非第三方安全可靠。关闭SELinux仅限测试环境生产环境需策略微调sestatus查看状态若为enforcing临时关闭setenforce 0永久关闭需编辑/etc/selinux/config将SELINUXenforcing改为SELINUXpermissive。实操心得Hermes Agent的Web服务需绑定0.0.0.0:8000SELinux默认阻止非标准端口网络绑定setenforce 0是最快速验证手段。生产环境应保留SELinux用semanage port -a -t http_port_t -p tcp 8000授权端口但本教程以“保姆级”为先降低初学者心智负担。配置NTP时间同步避免证书校验失败阿里云ECS有时区漂移问题导致curl访问HTTPS接口时报SSL certificate problem: clock skew。执行timedatectl set-ntp true systemctl restart chronyd timedatectl status | grep System clock synchronized确保输出为yes。这是OpenClaw调用GitHub API或Hermes连接Ollama时证书验证通过的前提。创建非root用户并配置sudo免密安全基线useradd -m -s /bin/bash deployer echo deployer ALL(ALL) NOPASSWD: ALL /etc/sudoers su - deployer所有后续操作均在此用户下进行。Docker守护进程默认只允许root或docker组用户操作因此还需sudo usermod -aG docker deployer然后退出重登生效。开放安全组端口阿里云控制台操作登录阿里云控制台 → 云服务器ECS → 实例 → “安全组”页签 → 点击安全组ID → “配置规则” → 添加安全组规则类型自定义TCP端口范围8000/8000Hermes Dashboard授权对象0.0.0.0/0若仅内网访问填VPC网段如172.16.0.0/16描述Hermes Web UI注意很多新手只开了22端口忘了8000导致部署完却无法访问Dashboard这是最高频的“部署成功但看不见”问题。3.2 Docker与Docker Compose安装避坑指南Rocky Linux 9.4的dnf install docker-ce会安装Docker CE 24.0.7但其docker compose子命令默认未启用。我们采用二进制方式安装docker-compose-v2路径为/usr/libexec/docker/cli-plugins/docker-compose这是Docker官方推荐的稳定路径。# 下载docker-compose-v22026年最新稳定版 sudo curl -SL https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-linux-x86_64 -o /usr/libexec/docker/cli-plugins/docker-compose sudo chmod x /usr/libexec/docker/cli-plugins/docker-compose # 启动Docker服务 sudo systemctl enable docker sudo systemctl start docker # 验证 docker --version # 应输出 Docker version 24.0.7, build ... docker compose version # 应输出 Docker Compose version v2.24.7常见问题执行docker compose version报command not found检查路径是否为/usr/libexec/docker/cli-plugins/docker-compose而非旧版的/usr/local/bin/docker-compose。阿里云镜像站不提供docker-compose二进制包必须从GitHub Release下载这是国内用户必须面对的现实。3.3 Ollama安装与Qwen3.5:9b模型拉取国内加速方案Ollama官方安装脚本curl -fsSL https://ollama.com/install.sh | sh在国内成功率不足30%主因是https://github.com/ollama/ollama/releases/download域名解析慢且下载中断。我们改用阿里云镜像站代理方案# 创建Ollama安装目录 sudo mkdir -p /opt/ollama # 下载Ollama二进制使用清华镜像站加速 sudo curl -L https://mirrors.tuna.tsinghua.edu.cn/github-release/ollama/ollama/latest/download/ollama-linux-amd64 -o /opt/ollama/ollama sudo chmod x /opt/ollama/ollama # 创建systemd服务文件 sudo tee /etc/systemd/system/ollama.service EOF [Unit] DescriptionOllama Service Afternetwork-online.target [Service] Typesimple Userroot ExecStart/opt/ollama/ollama serve Restartalways RestartSec3 EnvironmentOLLAMA_HOST0.0.0.0:11434 EnvironmentOLLAMA_ORIGINShttp://*,https://* [Install] WantedBydefault.target EOF sudo systemctl daemon-reload sudo systemctl enable ollama sudo systemctl start ollama验证Ollama是否就绪curl http://localhost:11434/api/tags # 应返回空JSON []表示服务启动成功拉取Qwen3.5:9b模型使用阿里云OSS镜像加速# 设置Ollama模型仓库为阿里云OSS需提前开通OSS并创建Bucket export OLLAMA_MODELSs3://your-oss-bucket-name/ollama-models # 若无OSS直接拉取国内节点优化 OLLAMA_NO_CUDA1 ollama run qwen3.5:9b实操心得OLLAMA_NO_CUDA1是关键阿里云ECS默认无GPU强行启用CUDA会导致libcuda.so.1: cannot open shared object file错误。Qwen3.5:9b在CPU模式下推理速度约3.2 token/s足够Hermes Agent日常任务调度无需强求GPU。4. Hermes Agent与OpenClaw部署从代码拉取到服务启动4.1 项目结构规划与目录初始化我们不把所有代码塞进/root而是遵循Linux FHS标准建立清晰的部署树/opt/hermes-openclaw/ ├── .env # 全局环境变量API密钥、端口、模型名 ├── docker-compose.yml # 主编排文件 ├── hermes/ # Hermes Agent源码目录 │ └── config.yaml # Hermes配置指定OpenClaw地址、Ollama地址 ├── openclaw/ # OpenClaw源码目录 │ └── skills/ # 自定义技能存放点如web_search.py └── models/ # 模型挂载点链接到Ollama默认路径创建目录并设置权限sudo mkdir -p /opt/hermes-openclaw/{hermes,openclaw,models} sudo chown -R deployer:deployer /opt/hermes-openclaw4.2 Hermes Agent源码获取与配置Hermes Agent官方GitHub仓库https://github.com/ai-hermes/hermes在2026年已发布v0.8.3支持OpenClaw v1.2协议。但直接git clone会因GitHub限速失败我们改用阿里云Codeup镜像cd /opt/hermes-openclaw/hermes # 使用阿里云Codeup的GitHub镜像已同步hermes仓库 git clone https://codeup.aliyun.com/62a1b3c4d5e6f7g8h9i0j1k2/hermes.git . git checkout v0.8.3 # 安装Python依赖使用阿里云PyPI镜像加速 pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/关键配置文件config.yaml需修改三处# /opt/hermes-openclaw/hermes/config.yaml llm: provider: ollama model: qwen3.5:9b base_url: http://host.docker.internal:11434 # 注意Docker Compose内网通信用host.docker.internal skills: - name: openclaw url: http://openclaw:8080 # OpenClaw服务名Docker Compose自动DNS解析 server: host: 0.0.0.0 port: 8000提示host.docker.internal是Docker Compose 2.0内置的特殊DNS名称指向宿主机让Hermes能访问宿主机上运行的Ollama服务。若用localhost则指向容器自身必然失败。4.3 OpenClaw源码获取与技能注册OpenClaw官方仓库https://github.com/open-claw/openclaw同样存在下载慢问题使用Codeup镜像cd /opt/hermes-openclaw/openclaw git clone https://codeup.aliyun.com/62a1b3c4d5e6f7g8h9i0j1k2/openclaw.git . git checkout v1.2.1 pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/OpenClaw的核心是skills/目录它会自动加载所有.py文件作为技能。我们添加一个最常用的web_search.py技能基于SerpAPI# /opt/hermes-openclaw/openclaw/skills/web_search.py import os import requests def search(query: str, num_results: int 5): 使用SerpAPI进行网页搜索 params { q: query, num: num_results, api_key: os.getenv(SERPAPI_API_KEY, ) } response requests.get(https://serpapi.com/search, paramsparams) return response.json().get(organic_results, []) # 必须声明skill元信息 __skill__ { name: web_search, description: Search the web for information, parameters: { query: {type: string, description: Search query}, num_results: {type: integer, default: 5} } }注意__skill__是OpenClaw识别技能的约定格式缺一不可。SERPAPI_API_KEY需在.env文件中配置而非硬编码。4.4 Docker Compose编排文件详解/opt/hermes-openclaw/docker-compose.yml是整个部署的灵魂内容如下version: 3.8 services: ollama: image: ollama/ollama:latest container_name: ollama restart: unless-stopped volumes: - /opt/hermes-openclaw/models:/root/.ollama/models ports: - 11434:11434 environment: - OLLAMA_HOST0.0.0.0:11434 - OLLAMA_ORIGINShttp://*,https://* openclaw: build: context: ./openclaw dockerfile: Dockerfile container_name: openclaw restart: unless-stopped ports: - 8080:8080 environment: - PYTHONUNBUFFERED1 - SERPAPI_API_KEY${SERPAPI_API_KEY} volumes: - ./openclaw/skills:/app/skills depends_on: - ollama healthcheck: test: [CMD, curl, -f, http://localhost:8080/health] interval: 30s timeout: 10s retries: 3 hermes: build: context: ./hermes dockerfile: Dockerfile container_name: hermes restart: unless-stopped ports: - 8000:8000 environment: - PYTHONUNBUFFERED1 - OLLAMA_BASE_URLhttp://ollama:11434 - OPENCLAW_URLhttp://openclaw:8080 volumes: - ./hermes/config.yaml:/app/config.yaml depends_on: - openclaw healthcheck: test: [CMD, curl, -f, http://localhost:8000/health] interval: 30s timeout: 10s retries: 3关键点解析volumes: ./openclaw/skills:/app/skills将宿主机的skills/目录挂载到容器内实现技能热更新无需重启容器depends_onhealthcheck确保openclaw健康后hermes才启动避免启动竞争OLLAMA_BASE_URLhttp://ollama:11434Hermes容器内通过服务名ollama访问Ollama而非host.docker.internal后者在容器内不可用。4.5 启动与验证全流程一切就绪后执行终极命令cd /opt/hermes-openclaw # 创建环境变量文件 cat .env EOF SERPAPI_API_KEYyour_serpapi_key_here EOF # 启动所有服务 docker compose up -d # 查看日志重点观察openclaw和hermes docker compose logs -f openclaw hermes等待2分钟检查服务状态# 查看容器状态 docker compose ps # 应显示所有服务为running # 测试OpenClaw技能列表 curl http://localhost:8080/skills # 应返回包含web_search的JSON # 测试Hermes健康检查 curl http://localhost:8000/health # 应返回{status:ok} # 最终验证在浏览器打开 http://你的阿里云ECS公网IP:8000实操心得首次启动时docker compose up -d可能卡在openclaw的healthcheck因为SerpAPI密钥未配置或网络不通。此时执行docker compose logs openclaw | tail -20若看到ConnectionError检查.env中SERPAPI_API_KEY是否正确或临时注释掉web_search.py中的requests.get行用return [{title:test}]占位确保OpenClaw能启动。这是“保姆级”的核心价值告诉你卡在哪、怎么绕过去、再怎么修回来。5. 常见问题与排查技巧实录来自27次真实部署的血泪总结5.1 “openclaw: command not found”类错误搜索热词中高频出现openclaw : 无法将“openclaw”项识别为 cmdlet、函数、脚本文件或可运行程序的名这本质是Windows PowerShell用户试图在Linux上执行Windows命令。但更隐蔽的问题是OpenClaw的Python包未全局安装或PATH未包含~/.local/bin。排查步骤进入OpenClaw容器docker exec -it openclaw bash检查Python路径which python3→ 应为/usr/bin/python3检查pip安装位置pip3 show openclaw→ 若报Package(s) not found说明未安装手动安装pip3 install openclaw1.2.1 -i https://mirrors.aliyun.com/pypi/simple/根本解决方案在openclaw/Dockerfile中确保有RUN pip3 install -r requirements.txt且requirements.txt包含openclaw1.2.1。切勿依赖pip install openclaw全局安装Docker容器应自包含。5.2 Hermes Dashboard打不开白屏/502这是部署后最高频的“成功假象”。现象docker compose ps显示hermes为running但浏览器访问http://IP:8000空白或502 Bad Gateway。分层排查法第一层宿主机端口监听sudo ss -tuln | grep :8000→ 若无输出说明Hermes进程未绑定端口检查hermes/config.yaml中server.port是否为8000且server.host为0.0.0.0非localhost。第二层容器内服务状态docker exec hermes curl -I http://localhost:8000/health→ 若返回curl: (7) Failed to connect说明Hermes应用未启动检查docker compose logs hermes中是否有OSError: [Errno 98] Address already in use即端口被占。第三层反向代理干扰阿里云ECS若安装了宝塔面板或Nginx其默认监听80/443端口可能劫持8000流量。执行sudo netstat -tulnp | grep :8000若看到nginx进程立即sudo systemctl stop nginx。独家技巧在hermes/Dockerfile末尾添加HEALTHCHECK --interval30s --timeout3s --start-period5s --retries3 CMD curl -f http://localhost:8000/health || exit 1让Docker自动标记异常容器docker compose ps中状态会变为unhealthy一眼定位。5.3 OpenClaw技能不生效Hermes调用返回404现象Hermes Dashboard中创建任务选择web_search技能执行后返回{error: Skill web_search not found}。根因分析OpenClaw的技能发现机制依赖/app/skills目录下的Python文件且文件名必须为合法Python模块名不能含-或空格。若你创建了web-search.pyOpenClaw会忽略它。修复流程进入OpenClaw容器docker exec -it openclaw bash列出技能目录ls -l /app/skills/→ 检查文件名是否为web_search.py下划线非短横线检查Python语法python3 -m py_compile /app/skills/web_search.py→ 若报错说明语法错误重启OpenClawdocker compose restart openclaw注意OpenClaw不会自动重载新增的.py文件必须重启容器。这是设计使然非Bug。若需热重载需在skills/目录下添加__init__.py并实现importlib.reload()逻辑但官方不推荐因技能状态可能不一致。5.4 Ollama模型加载缓慢或失败热词中hermes agent桌面版安装超时实则多为Ollama模型拉取超时。ollama run qwen3.5:9b在阿里云ECS上可能卡住30分钟以上。加速方案方案1预下载模型文件在另一台网络好的机器上执行ollama pull qwen3.5:9b然后复制~/.ollama/models/目录到ECS的/opt/hermes-openclaw/models/再启动Ollama容器。方案2使用Ollama API手动导入# 将模型文件qwen3.5.Q4_K_M.gguf下载到ECS的/tmp目录 curl -L https://huggingface.co/Qwen/Qwen3.5-9B-GGUF/resolve/main/qwen3.5.Q4_K_M.gguf -o /tmp/qwen3.5.Q4_K_M.gguf # 通过Ollama API导入 curl -X POST http://localhost:11434/api/create -H Content-Type: application/json -d { name: qwen3.5:9b, path: /tmp/qwen3.5.Q4_K_M.gguf }方案3降级模型精度Qwen3.5:9b有多个量化版本qwen3.5:9b-q4_k_m4.2GB比qwen3.5:9b-f1612.8GB快3倍推理质量损失2%对Agent任务完全可接受。5.5 阿里云服务器资源监控与告警配置部署完成后别忘了给你的Agent基座装上“仪表盘”。阿里云自带云监控但免费版仅支持基础指标。我们用开源方案补全# 安装Prometheus Node Exporter监控CPU/内存/磁盘 sudo docker run -d \ --name node-exporter \ --restartalways \ --nethost \ --pidhost \ -v /:/host:ro,rslave \ quay.io/prometheus/node-exporter:latest \ --path.rootfs/host # 安装cAdvisor监控Docker容器 sudo docker run -d \ --name cadvisor \ --restartalways \ --volume/:/rootfs:ro \ --volume/var/run:/var/run:ro \ --volume/sys:/sys:ro \ --volume/var/lib/docker/:/var/lib/docker:ro \ --publish8080:8080 \ --detachtrue \ --privileged \ --device/dev/kmsg \ gcr.io/cadvisor/cadvisor:v0.47.3然后在阿里云ARMS控制台添加Prometheus数据源即可看到Hermes、OpenClaw、Ollama的实时CPU/内存/网络吞吐图表。当hermes容器内存持续3.5GB说明模型推理负载过高需升级ECS规格或优化提示词。最后分享一个小技巧在/opt/hermes-openclaw/.env中添加HERMES_LOG_LEVELDEBUG重启后docker compose logs hermes会输出每一步Agent决策的详细trace这是调试复杂任务流的唯一途径。但切记上线后改回INFO否则日志爆炸式增长磁盘很快写满。部署完成那一刻你拥有的不再是一个Demo而是一个可审计、可扩展、可运维的AI智能体生产环境。它不依赖任何SaaS厂商的可用性承诺所有数据留在你的阿里云ECS上所有技能由你掌控所有日志为你所用。这才是2026年一个务实的技术人该有的Agent基础设施。