书接上篇,咱们已经准备好了内网部署所需要的全部依赖和docker镜像,接下来我们开始完全离网部署!

部署要求

必须:

  1. Windows: 10 22H2版本及以上,或windows11
  2. 或使用版本较新的Linux,安装好docker和docker compose

为什么使用沙箱?

为了数据的绝对安全!使用沙箱docker后,有如下好处:

  • hermes只能读取你挂载在沙箱的目录,而且你可以设置只读权限
  • 可以控制hermes执行代码时的CPU、内存占用等
  • 可以控制是否让沙箱访问网络

1 Windows 10系统安装docker destop

1.1 安装 WSL2(离线)

  1. 启用 WSL(离线,使用 dism,无需联网)
    1. 注意必须使用系统自带PowerShell(否则无法成功),运行如下命令:

      dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
      dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
      

      或在控制面板添加系统组件

  2. 安装WSL完整应用wsl.2.7.11.0.x64.msi
  3. 安装WSL内核更新wsl_update_x64.msi
  4. 完成后重启电脑

1.2 安装docker destop

运行【Docker Desktop Installer.exe】并安装,注意有一个WSL的选项,一定要选这个
安装完成后关闭自动更新(避免弹窗报错):
docker destop上方齿轮按钮(Settings)→ Software updates → 取消勾选所有选项

1.3 WSL2 离线环境进阶配置(可选)

配置 WSL2 使用固定内存(避免 Windows 内存暴涨)
在 Windows 用户目录创建 C:\Users<用户名>.wslconfig:

[wsl2]
memory=8GB          # 根据你的机器调整
processors=4
swap=2GB
localhostForwarding=true

1.4 安装Windows Terminal(可选,解决界面不好看的问题)

解决win10自带powershell界面难看, 无法正常显示hermes界面和交互的问题
解压缩Microsoft.WindowsTerminal_1.24.11911.0_8wekyb3d8bbwe.msixbundle_Windows10_PreinstallKit.zip运行系统自带的Powershell

Add-AppPackage ./Microsoft.UI.Xaml.2.8_8.2501.31001.0_x64__8wekyb3d8bbwe.appx #根据硬件选择x86 x64 arm arm64
Add-AppPackage ./311980e3610042a2bcbd9da24ad6680a.msixbundle

2 导入docker镜像

资源管理器进入部署包的docker-images目录,空白处右键->【在终端打开】

#导入新版镜像
docker load -i hermes-agent-v0.20-20260810.tar
#删除旧版镜像(如果有)
docker rmi -f nousresearch/hermes-agent:latest
#将0.20版的镜像标记为最新
docker tag nousresearch/hermes-agent:v0.20 nousresearch/hermes-agent:latest 
#导入沙箱镜像
docker load -i hermes-sandbox-python312-20260810v2.tar

3首次配置向导

准备数据文件夹

创建hermes数据目录,比如D:\AI_Agent\hermes\hermes-data

进入首次配置

返回上级目录【D:\AI_Agent\hermes】,空白处右键->【在终端打开】运行如下命令hermes并进行初次配置,
Windows Powershell

docker run -it --rm `
 -v ./hermes-data:/opt/data `
 -v /var/run/docker.sock:/var/run/docker.sock ` 
 nousresearch/hermes-agent:latest setup

Linux

docker run -it --rm \
 -v ./hermes-data:/opt/data \
 -v /var/run/docker.sock:/var/run/docker.sock\
 nousresearch/hermes-agent:latest setup

模型配置

  1. 启动后hermes询问如何进行配置,使用上下方向键选择第2项 (○) Full setup — configure every provider, tool & option yourself (bring your own keys),回车
  2. hermes询问模型提供商,选择自定义(○) custom (direct API),位置比较靠下,多按↓,选中后回车
  3. 输入你模型的API URL,回车,注意要有最后的v1,比如我的是http://172.16.6.224:8001/v1
  4. 输入你的API KEY(如果启动模型的时候配置有,或者模型平台给出了APIKEY,没有则保持为空)
  5. 选择模型兼容模式,我们选第一个自动,输入1并回车
  6. 模型多的话,hermes会列出模型清单,输入你要使用的模型序号并回车
  7. hermes询问是否确认配置,输入y回车
  API mode: auto-detect
  Detected model: Qwen3.6-27B-TS
  Use this model? [Y/n]: y
  1. hermes询问你的模型token长度,直接回车,自动检测
  2. 输入一个模型名称,hermes将在前端显示这个模型名称,我这里是Qwen3.6-27B-TS

沙箱配置

上一步完成后进入沙箱配置环节,为了确保hermes运行命令和代码时不会损坏系统和我们自己的文件,需要给hermes配置一个沙箱

1. hermes询问终端后端采用哪种模式,我们选择第2个Docker

Select terminal backend:
  ↑↓ navigate  ENTER/SPACE select  ESC cancel

   (○) Local - run directly on this machine (default)
 → (○) Docker - isolated container with configurable resources
   (○) Modal - serverless cloud sandbox
   (○) SSH - run on a remote machine
   (○) Daytona - persistent cloud development environment
   (○) Singularity/Apptainer - HPC-friendly container
   (●) Keep current (local)

2. 是否允许沙箱访问外网,我这里选择是,输入y回车

配置消息推送

内网环境不需要,我们按esc退出

Select platforms to configure:
  ↑↓ navigate  SPACE toggle  ENTER confirm  ESC cancel

 → [ ] 💬 Mattermost  (not configured)
   [ ] 📡 Signal  (not configured)
   [ ] 💬 Weixin / WeChat  (not configured)
   [ ] 💬 BlueBubbles (iMessage)  (not configured)
   [ ] 🐧 QQ Bot  (not configured)
   [ ] 💎 Yuanbao  (not configured)
   [ ] 🐝 Buzz  (not configured)
   [ ] 🐳 DingTalk  (not configured)
   [ ] 🎮 Discord  (not configured)
   [ ] 📧 Email  (not configured)
   [ ] 🪽 Feishu / Lark  (not configured)

配置Tools

保持默认,后面有需要了再来改,直接esc

Tools for 🖥️  CLI
  ↑↓ navigate  SPACE toggle  ENTER confirm  ESC cancel

 → [✓] 🔍 Web Search & Scraping  (web_search, web_extract)
   [✓] 🌐 Browser Automation  (navigate, click, type, scroll)
   [✓] 💻 Terminal & Processes  (terminal, process)
   [✓] 📁 File Operations  (read, write, patch, search)
   [✓] ⚡ Code Execution  (execute_code)
   [✓] 👁️  Vision / Image Analysis  (vision_analyze)
   [ ] 🎬 Video Analysis  (video_analyze (requires video-capable model))
   [✓] 🎨 Image Generation  (image_generate)
   [ ] 🎬 Video Generation  (video_generate (text/image/reference))
   [ ] 🐦 X (Twitter) Search  (x_search (requires xAI OAuth or XAI_API_KEY))
   [✓] 🔊 Text-to-Speech  (text_to_speech)
   [✓] 📚 Skills  (list, view, manage)
   [✓] 📋 Task Planning  (todo)
   [✓] 💾 Memory  (persistent memory across sessions)
   [ ] 🧩 Context Engine  (runtime tools from the active context engine)
   [✓] 🔎 Session Search  (search past conversations)
   [✓] ❓ Clarifying Questions  (clarify)
   [✓] 👥 Task Delegation  (delegate_task)
   [✓] ⏰ Cron Jobs  (create/list/update/pause/resume/run, with optional attached skills)
   [ ] 🏠 Home Assistant  (smart home device control)  [no API key]
   [ ] 🎵 Spotify  (playback, search, playlists, library)
   [ ] 🤖 Yuanbao  (group info, member queries, DM)
   [✓] 🖱️  Computer Use (macOS/Windows/Linux)  (background desktop control via cua-driver)

配置浏览器

让hermes能够访问网页,默认第一个,直接回车

  Choose a provider:
  ↑↓ navigate  ENTER/SPACE select  ESC cancel

 → (●) Local Browser [★ recommended · free] — Headless Chromium, no API key needed
   (○) Nous Subscription (Browser Use cloud) [subscription] — Managed Browser Use billed to your subscription  ★ via No (○) Camofox [free · local] — Anti-detection browser (Firefox/Camoufox)
   (○) Browser Use [paid] — Cloud browser with remote execution
   (○) Browserbase [paid] — Cloud browser with stealth and proxies
   (○) Firecrawl [paid] — Cloud browser with remote execution
   (○) Skip — keep defaults / configure later

配置图像生成服务提供商

  Choose a provider:
  ↑↓ navigate  ENTER/SPACE select  ESC cancel

   (●) Nous Subscription [subscription] — Managed FAL image generation billed to your subscription  ★ via Nous Portal ( (○) DeepInfra [paid] — FLUX, Qwen-Image, … — live catalog from api.deepinfra.com
   (○) FAL.ai [paid] — Pick from flux-2-klein, flux-2-pro, gpt-image, nano-banana, etc. — text-to-image & image editing (○) Krea [paid] — Krea 2 foundation model — Medium ($0.03), Large ($0.06), Medium Turbo ($0.015). Style transfer, mo (○) Nous Portal (image) [subscription] — Reference-grounded image generation via Nous Portal (OpenRouter-backed)
   (○) OpenAI [paid] — gpt-image-2 at low/medium/high quality tiers — text-to-image & image editing
   (○) OpenAI (Codex auth) [free] — gpt-image-2 via ChatGPT/Codex OAuth — no API key required; supports text and image  (○) OpenRouter (image) [paid] — Gemini Flash Image & more via OpenRouter; uses OPENROUTER_API_KEY
   (○) xAI Grok Imagine (image) [paid] — grok-imagine-image - text-to-image & image editing; uses xAI Grok OAuth or XA → (○) Skip — keep defaults / configure later

配置tts提供商(文字转语音)

跳过,同上

  Choose a provider:
  ↑↓ navigate  ENTER/SPACE select  ESC cancel

   (●) Microsoft Edge TTS [★ recommended · free] — Good quality, no API key needed [active]
   (○) Nous Subscription [subscription] — Managed OpenAI TTS billed to your subscription  ★ via Nous Portal (login on s (○) OpenAI TTS [paid] — High quality voices
   (○) xAI TTS — Grok voices — uses xAI Grok OAuth or XAI_API_KEY
   (○) ElevenLabs [paid] — Most natural voices
   (○) Mistral (Voxtral TTS) [paid] — Multilingual, native Opus
   (○) Google Gemini TTS [preview] — 30 prebuilt voices, controllable via prompts
   (○) KittenTTS [local · free] — Lightweight local ONNX TTS (~25MB), no API key
   (○) Piper [local · free] — Local neural TTS, 44 languages (voices ~20-90MB)
   (○) DeepInfra TTS [paid] — Chatterbox, Qwen3-TTS, … — live catalog from api.deepinfra.com
 → (○) Skip — keep defaults / configure later

配置搜索提供商

跳过,同上

  Select Search Provider:
  ↑↓ navigate  ENTER/SPACE select  ESC cancel

   (●) Nous Subscription [subscription] — Managed Firecrawl billed to your subscription  ★ via Nous Portal (login on se (○) Firecrawl Self-Hosted [free · self-hosted] — Run your own Firecrawl instance (Docker)
   (○) Brave Search (Free) [free] — Free-tier API key — 2k queries/mo, search only.
   (○) DuckDuckGo (ddgs) [free · no key · search only] — Search via the ddgs Python package — no API key (pair with an(○) Exa [paid] — Semantic + neural web search with content extraction.
   (○) Firecrawl [paid · optional gateway] — Full search + extract; supports direct API and Nous tool-gateway routing.  (○) Parallel [paid] — Objective-tuned search + parallel page extraction.
   (○) SearXNG [free · self-hosted] — Free, privacy-respecting metasearch. Point SEARXNG_URL at your instance.
   (○) Tavily [paid] — Search + extract in one provider.
   (○) xAI Web Search (Grok) [paid] — Agentic web search via Grok's web_search tool — uses xAI Grok OAuth or XAI_API_ → (○) Skip — keep defaults / configure later

配置向导结束

完成上述配置后,配置向导结束,docker自动关闭,命令行返回工作目录

配置hemers使用沙箱(重点!!!敲黑板!!!)

1. 修改hemers-data\config.yaml,找到terminal部分,增加如下内容:

terminal:
  backend: docker
  modal_mode: auto
  cwd: .
  timeout: 180
  docker_image: hermes-sandbox-python312:20260731v1 #关键1指定沙箱镜像
  network: "none"  # 禁止网络访问
  docker_mount_cwd_to_workspace: false  # 将启动目录挂载到 /workspace
  docker_forward_env:              # 透传进容器的环境变量
    - "GITHUB_TOKEN"
  docker_volumes:                  # 关键2挂载主机目录
   - D:\AI_Agent\hermes\hermes-data\home:/opt/data/home #允许hermes往这个目录写入,生成的word、PPT等都保存到这里
   - D:\AI_Agent\hermes\hermes-data:/opt/data:ro  # :ro 表示只读
  # 资源限制
  container_cpu: 0                 # CPU 核数(0 = 不限)
  container_memory: 5120           # 内存 / 磁盘大小,单位 MB(0 = 不限)
  container_disk: 51200            # 磁盘大小,单位 MB(需要 overlay2 + XFS+pquota)
  container_persistent: false       # 关键3禁用在会话间持久化 /workspace 和 /root,windows下存在问题

注意(敲黑板!):

如果container_persistent设置为true,Hermes agent会自动把一个可写入的目录挂载到/workspace,但是用的是Linux路径,Windows 下使用Docker desktop会导致这个目录挂载有问题,你永远无法找到hermes创建的文件!因此需要按上述方法进行挂载,后面你可以告诉hermes——“请你记住,你创建的文件都保存到/opt/data/home,只有这个目录是可写入的!”。这样hermes产生的文件就会都保存在D:\AI_Agent\hermes\hermes-data\home

参考:配置 | Hermes Agent 中文社区
2. 禁用代理,否则hermes尝试联网运行沙箱,修改上述hemers-data\config.yaml,找到proxy部分,修改如下

proxy:
  enabled: false

修复【Auxiliary title generation failed: Request timed out.】报错

这个报错不影响使用,是hermes默认配置下使用外网模型生成对话标题,然而我们无法访问外网导致的,解决办法:修改上述hemers-data\config.yaml,找到`auxiliary'部分并按照如下进行修改,如果没有直接增加如下内容:

auxiliary:
  title_generation:
    provider: custom #对应我们使用自定义模型
    model: custom/Qwen3.6-27B-TS #【/】后面是模型名称,对应前面配置的模型名称

4运行使用(命令行模式)

  1. 运行hermes
docker run -it --rm \
  -v ./hermes-data:/opt/data \
  -v /var/run/docker.sock:/var/run/docker.sock \
  nousresearch/hermes-agent:latest --tui # 【--tui】可加可不加,不加是CLI界面,加上是TUI界面,更好看,有菜单功能,交互性更好
docker run -it --rm `
  -v ${PWD}/hermes-data:/opt/data `
  -v /var/run/docker.sock:/var/run/docker.sock `
  nousresearch/hermes-agent:latest --tui # 【--tui】可加可不加,不加是CLI界面,加上是TUI界面,更好看,有菜单功能,交互性更好
  1. 测试:
    1. 先在docker destop中删除已经运行的沙箱docker,注意不是删除镜像
    2. 等hermes启动完成后,输入【请检查沙箱中安装了哪些python包】,hermes将开始启动沙箱并运行命令,可以观察到docker desktop中启动了hermes-sandbox容器;命令执行完后,hermes会回复沙箱中的python包清单,检查是否有pandas python-docx python-pptx等,有的话说明正确
  2. 让hermes记住文件存放在哪里,输入【请你记住,所有使用沙箱生成的文件要保存到沙箱的/workspace目录下,这个目录对应你的/opt/data/home】并回车,hermes自动记住这个要求(进化)
  3. 可以开始愉快的与hermes对话了,可以让他生成word、docx,运行python进行数据处理,生成数据图表等~
  4. 退出:在hermes界面按下ctrl+c即可

5桌面端使用

启动Hermes gateway和dashboard服务

先ctrl+c退出前面打开的hermes终端,然后如下操作:

1. 创建docker-compose.yaml到hermes目录【我的是D:\AI_Agent\hermes\docker-compose.yaml】,内容如下:

version: "3.8"

services:
  hermes-agent:
    image: nousresearch/hermes-agent:latest
    container_name: hermes
    
    # 服务端常驻运行,除非手动停止否则自动重启
    restart: unless-stopped
    
    # 启动命令:运行 gateway 服务
    command: ["gateway", "run"]
    
    # 端口映射
    ports:
      - "8642:8642"   # Gateway API 端口
      - "9119:9119"   # Dashboard 面板端口(仅在 HERMES_DASHBOARD=1 时生效)
    
    # 数据卷挂载
    volumes:
      # Hermes 数据持久化目录(相对路径,会映射到 compose 文件所在目录)
      - ./hermes-data:/opt/data
      
      # Docker Socket 挂载:允许容器内调用宿主机的 Docker 服务
      # 这是 Hermes Agent 管理其他容器所必需的
      - /var/run/docker.sock:/var/run/docker.sock
    
    # 环境变量配置
    environment:
      # ===== 仪表板配置 =====
      # 启用 Web 仪表板
      - HERMES_DASHBOARD=1
      # 仪表板基础认证用户名
      - HERMES_DASHBOARD_BASIC_AUTH_USERNAME=你的用户名
      # 仪表板基础认证密码(生产环境建议改用 secrets 或外部配置)
      - HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=你的密码
      # 仪表板基础认证密钥(用于加密会话等)
      - HERMES_DASHBOARD_BASIC_AUTH_SECRET=32位随机字符串
      
      # ===== 语音配置 =====
      # 禁用语音功能
      - HERMES_VOICE_ENABLED=false
      # 本地语音转文字命令(留空表示不使用)
      - HERMES_LOCAL_STT_COMMAND=
      
      # ===== 可选:API 密钥(取消注释以直接注入,或改用 .env 文件)=====
      # - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      # - OPENAI_API_KEY=${OPENAI_API_KEY}
      # - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
      
      # 时区设置(可选,保持与宿主机一致)
      - TZ=Asia/Shanghai
    
    # 资源限制
    deploy:
      resources:
        limits:
          memory: 4G
          cpus: "8.0"
        # 保留资源(可选,确保容器有足够资源运行)
        reservations:
          memory: 1G
          cpus: "1.0"
    
    # 日志配置:防止日志文件无限增长
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"
    
    # 网络配置(可选:使用独立网络隔离)
    # networks:
    #   - hermes-network

# 如需自定义网络,取消下方注释
# networks:
#   hermes-network:
#     driver: bridge

注意修改用户名、密码、密钥的配置, 密钥可以使用docker run --rm --entrypoint=openssl nousresearch/hermes-agent:latest rand -hex 32命令生成

2. 如果你的数据目录不是hermes-data,还要修改volumes部分,与实际目录名称对应,比如我的数据目录是【D:\AI_Agent\hermes\hermes-data】,这部分的配置就是:

    volumes:
      # Hermes 数据持久化目录(相对路径,会映射到 compose 文件所在目录)
      - ./hermes-data:/opt/data
      
      # Docker Socket 挂载:允许容器内调用宿主机的 Docker 服务
      # 这是 Hermes Agent 管理其他容器所必需的
      - /var/run/docker.sock:/var/run/docker.sock

3. 资源管理器进入hermes目录【D:\AI_Agent\hermes】,空白处右键->【在终端打开】运行如下命令,运行后hermes将在后台以服务的方式运行,注意如果弹出防火墙提示,需要允许;后续服务端将常驻运行,开机随docker desktop的启动自动运行,除非手动停止

docker compose up -d

hermes服务手动停止(部署无问题的话不需要)

资源管理器进入hermes目录【D:\AI_Agent\hermes】,空白处右键->【在终端打开】运行如下命令

docker compose down

启动并配置中文社区版桌面端

  1. 解压缩Hermes.Agent.CN.Desktop_0.7.0_x64-windows-portable.zip,我是解压缩到了D:\AI_Agent\hermes
  2. 运行里面的Hermes Agent CN Desktop.exe
  3. 稍等片刻,进入首次使用页面,选择【已经有自己的Hermes内核】右侧的【连接自己的内核】
  4. 进入下一个界面,选择外部Hermes->远端服务器Hermes,输入服务器地址http://localhost:9119,下方出现登陆用户密码输入框,输入前面配置的用户名和密码,点击登录
  5. 下方出现登录成功提示,点击保存并连接远程即可
  6. 点击左上方工作台,出现外部Hermes Agent连接正常字样,说明配置成功,可以开始使用了!

补充

为了让hermes更好地使用离线沙箱,需要新建一个对话,告诉她请你记住,沙箱无外网,所有可用软件工具在/opt/hermes/dependencies.md中列出。这个文件我预置到了我的沙箱中,和她说一次即可,她会记住这个要求。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐