Docker Compose 部署 Hermes Agent 步骤

1 预先拉取镜像

要先把 Hermes 的 Docker 镜像拉取到本地,可以使用以下命令:

docker pull nousresearch/hermes-agent:latest

1.1 使用 Docker Compose 拉取(推荐)

在后文创建好 docker-compose.yaml 文件后,也可以使用 Compose 命令一次性拉取其中定义的所有服务镜像:

# 在 docker-compose.yaml 所在目录执行
docker compose pull

这个命令会读取你的 Compose 文件,并拉取 image 字段指定的镜像,效果与 docker pull 相同。

1.2 补充说明

  • latest 标签会指向最新的稳定版。若工作环境需要特定版本,可以换成具体标签,如 nousresearch/hermes-agent:v1.2.3
  • 若拉取时遇到网络问题,可以考虑配置 Docker 镜像加速器(如阿里云、中科大等),或者通过 proxychains 命令拉取。

镜像拉取步骤可参考笔记Docker国内镜像源配置及走代理设置


2 预设置 Hermes 容器

2.1 预设置步骤

通过 docker run 命令启动这个设置向导。这是一个一次性操作,目的是将你的 API 密钥等信息写入到持久化的数据目录中。

在终端中执行以下命令:

docker run -it --rm \               # 以交互模式运行一个一次性容器,任务完成后会自动删除。
  -v ~/.hermes:/opt/data \          # 将你宿主机上的 ~/.hermes 目录挂载到容器内的 /opt/data,这是 Hermes 存储所有配置和用户数据的地方。
nousresearch/hermes-agent:latest setup      # 指定使用官方镜像并运行 setup 命令

执行后跟随 setup 向导设置内容即可。

2.2 预设置的优点

预先运行 setup 命令,本质上是为后续正式运行 准备一个必需且持久的“配置数据卷”。Hermes Agent 的设计遵循了 Docker 的最佳实践:镜像本身是无状态的,所有用户数据(如 API 密钥、会话记录、技能等)都存储在宿主机的一个挂载目录中

主要有两方面优点:

  • 数据写入持久化卷setup 向导会将这些配置信息(如 API 密钥)写入到挂载到容器内 /opt/data 路径的宿主机目录 ~/.hermes 中,主要是 ~/.hermes/.env 文件。
  • 后续运行直接读取,对更新版本良好年:后续对容器进行操作时,容器会直接读取 ~/.hermes 中已存在的、由 setup 准备好的完整配置,从而免去在无交互的后台环境中进行配置的麻烦;并且更新 Hermes 版本就只需重新运行一次 docker compose 即可,不会更改已有配置。

3 Docker Compose 文件编写与部署

工具 docker compose 的使用细节参考笔记:
docker compose部署nginx+php+mysql+phpmyadmin环境(LNMP环境)

部署 Hermes 时主要的区别在于最好将敏感信息,包括控制面板账户密码、API-SERVER KEY 等,不明文写在 docker-compose.yml 文件内,而是写在 docker-compose.yml 同文件夹下的 .env 文件中,通过变量的形式引用。

文件结构:
~/hermes-deploy/                     # 你的compose部署主目录
├── docker-compose.yml               # 核心 Compose 配置文件
└──  .env                             # 存放敏感环境变量(API 密钥等)

3.1 文件示例

具体语句含义可以参考 Hermes 官方 WIKI

docker-compose.yml

#Create Hermes Agent

services:
  hermes:
    image: nousresearch/hermes-agent:latest
    container_name: hermes
    restart: unless-stopped
    command:
      - gateway
      - run

    ports:
      # ----- API Server 端口(OpenAI 兼容)-----
      # 启用 API Server 后必须映射此端口,供外部程序调用
      - "8642:8642"

      # ----- Dashboard 端口(Web 管理界面)-----
      - "9119:9119"

    volumes:
      - ${HERMES_DATA_PATH}:/opt/data

    environment:
      # 让容器内 Hermes 用户映射为宿主机 USER 的 UID/GID
      HERMES_UID: "1000"
      HERMES_GID: "1000"
      # ======================================================
      # 1. Dashboard 配置(Web 界面)
      # ======================================================
      HERMES_DASHBOARD: "1"
      HERMES_DASHBOARD_HOST: "0.0.0.0"
      HERMES_DASHBOARD_PORT: "9119"

      # ----- Dashboard 认证(必须,因绑定 0.0.0.0)-----
      # 生成密码:openssl rand -hex 20
      # 生成会话密钥:openssl rand -hex 32
      HERMES_DASHBOARD_BASIC_AUTH_USERNAME: ${DASHBOARD_USERNAME}
      HERMES_DASHBOARD_BASIC_AUTH_PASSWORD: ${DASHBOARD_PASSWORD}
      HERMES_DASHBOARD_BASIC_AUTH_SECRET: ${DASHBOARD_SECRET}

      # ======================================================
      # 2. API Server 配置(程序化调用)
      # ======================================================
      # ----- 启用 API Server(必须设置为 true)-----
      API_SERVER_ENABLED: "true"

      # ----- API Server 监听地址(容器内)-----
      # 0.0.0.0 允许外部访问;若仅限本地可改为 127.0.0.1
      API_SERVER_HOST: "0.0.0.0"

      # ----- API Server 端口(容器内)-----
      # 默认 8642,与宿主机映射保持一致
      API_SERVER_PORT: "8642"

      # ----- API 密钥(必须设置,至少 8 字符)-----
      # 强烈建议使用强随机串,例如:openssl rand -hex 32
      API_SERVER_KEY: ${API_SERVER_KEY}

      # ----- CORS 跨域设置(可选)-----
      # 如果你的前端应用在另一个域名下调用 API,可设置允许的来源
      # 开发环境可设为 "*"(允许所有),生产环境建议指定具体域名
      API_SERVER_CORS_ORIGINS: "*"

      # ======================================================
      # 3. 其他可选高级配置
      # ======================================================
      # 如果你需要 API Server 返回详细错误信息(调试用),可启用
      API_SERVER_DEBUG: "false"

    deploy:
      resources:
        limits:
          memory: 4G
          cpus: "2.0"

    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"


.env

# Settings of Hermes Agent

HERMES_DATA_PATH=/home/user/.hermes  # 改为你的实际路径

DASHBOARD_USERNAME=user
DASHBOARD_PASSWORD=your_password
DASHBOARD_SECRET=your_authcode

API_SERVER_KEY=your_hermes_apikey

3.2 docker compose 部署操作

# 启动服务
docker compose up -d

# 查看日志确认启动成功
docker compose logs -f

# 关闭服务
docker compose down