§23部署:从发命令到发安装包
Deploy: From Sending Commands to Sending Installers
今年春天装 Hermes,你得会敲命令、会改 yaml。现在你可以下载一个桌面 App,双击安装,像微信一样打开就用。§04带你在命令行里装过一遍,这一节把所有安装方式、agent跑命令的七种「工地」、以及长期挂着跑的几种形态放在一起讲清楚。
先把一个混淆点说清楚
很多人第一次读 Hermes 文档会卡在同一个地方:「部署」这个词在这里有两层意思,混了就全乱了。
第一层是Hermes 这个程序本身装在哪。你的笔记本?一台 $5 的云服务器?一个 Docker 容器?还是用 Nix 声明式地拉起来?
第二层是agent 在哪台机器上跑 shell 命令。它要执行pip install 、要跑你的脚本、要碰文件系统,这些命令落在哪里?本地?SSH 进的远程机?一个临时容器?
这两层是独立的。你完全可以把 Hermes 装在自己的笔记本上,但让它的命令都跑在一个隔离的 Docker 容器里。程序在本地,手脚在容器。配置里那个terminal.backend字段管的是第二层,不是第一层。
记住这句话:「部署在哪」是 Hermes 进程的家,「agent 在哪跑命令」是 agent 干活的工地。家可以只有一个,工地可以换七种。下面先讲怎么把家安好,再讲七种工地。
三种主要安装入口,从易到难
装 Hermes 主要有三条路,对应三类人。我按门槛从低到高排。(另外还有Docker和安卓Termux,后面单独讲。)
桌面 App一键脚本源码手动路径一:桌面 App(这版全新,门槛最低)
Hermes 现在有一个 Electron 桌面应用。安装包目前是macOS(只有Apple Silicon)的DMG和Windows 11的签名MSIX,Windows也能直接在Microsoft Store里装;Linux没有安装包,要先装命令行版再跑hermes desktop (§19有张表)。
它就是一个普通桌面软件。装好打开是个聊天窗口,能流式回复,能拖文件进对话,能粘贴剪贴板里的图,有会话列表,有 Cmd+K 命令面板,状态栏还能直接切模型。应用内自动更新,你不用操心版本。
v0.22给它加了一段引导式的首次启动:第一次打开不用填API key,它用一个免费试用模型(nous/welcome ,每个系统用户能用一次)陪你走一段设置对话,问你怎么称呼、要接哪些app、装哪些插件。我没有装桌面版实测,这段是按官方发布说明写的。
为什么这件事重要?因为它把 Hermes 从「一个命令行 agent」变成了「一个你能直接发安装包给朋友的App」。以前你想安利别人用 Hermes,得先教他装环境、敲命令;现在你发个安装包过去,他双击就能聊。这是降低门槛幅度最大的一步。
路径二:一键安装脚本(首选,给大多数人)
如果你不排斥终端,一键脚本是最快的正路。一行命令,依赖全自动。
# Linux / macOS / WSL2 / Termux curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash# Windows 原生(PowerShell,不再必须 WSL2)iex (irm https://hermes-agent.nousresearch.com/install.ps1)
这里有个对老用户很关键的变化:Windows 终于原生支持了。旧版要装 Hermes,Windows 用户得先折腾WSL2。现在一行 PowerShell 就搞定;如果你电脑上没有Git,安装器会放一份校验过的Git for Windows到Hermes自己的工具目录里,不替换你系统里的Git,数据放在%LOCALAPPDATA%\hermes 。
依赖这件事,v0.22换了一个管家,叫hermes pm 。Python(现在是3.14)、Node、ripgrep、FFmpeg,还有默认会装的浏览器自动化(agent-browser加Chromium)和操控电脑用的cua-driver,都归它管:下载时校验哈希,每次变动记成一个可以回滚的「世代」。出问题了先跑hermes pm doctor ,修复用hermes pm repair 。
注意
pip install 和 brew install 这两条路7月已经被官方砍掉了。PyPI上能搜到的hermes-agent停在老版本,网上
的老教程照抄会装到旧版。§04讲过,这里再提醒一遍。
核心建议
做 CI 或受控部署时,安装器有几个开关可用:--non-interactive
--skip-setup--skip-browser skip-computer-use
--include-desktop,还能用--dir、--hermes-home指定代码和数据目录。老教
程里的--no-venv、--no-skills已经没了。另外,以root身份装并不会自动换成/usr/local那套布局,想要就自己给路径。
路径三:从源码手动装(给开发者)
想读源码、想改 Hermes 本身,就走这条。
git clone https://github.com/NousResearch/hermes-agent.git cd hermes-agent./setup-hermes.sh # 装 uv、建 venv、装全量依赖、软链 hermes 命令./hermes # 自动识别 venv,不用先 source
我这次测试就是走的这条路的变体:克隆v0.22.2这个标签,在一个独立的虚拟环境里装好,再用HERMES_HOME把数据目录指到测试文件夹,这样不碰我自己机器上的任何配置。想同时保留一个「干净的试验场」,这个办法很好用。
七种终端后端:agent 的工地
回到刚才说的第二层。terminal.backend决定 agent 在哪跑命令。6月是六种,8月的v0.20里Vercel Sandbox这个后端重新落地,现在七种。
| 后端 | 用途 | 什么时候选它 |
|---|---|---|
| local | 本地直接跑(默认) | 本地开发,最省事,但 agent 命令直接落在你机器上 |
| docker | 隔离容器 | 想给 agent 一个沙箱,命令搞砸了也不伤主机 |
| ssh | 远程服务器 | 命令跑在远端大机器,Hermes 本身在本地 |
| singularity | HPC 集群 | 跑在高性能计算集群里 |
| modal | Serverless | 闲时成本趋近于零,按需拉起 |
| daytona | Serverless | 另一个无服务器选项 |
| vercel_sandbox | 云端沙箱 | v0.20新增,已经在用Vercel的可以顺手接 |
后面四种容器类后端(docker / singularity / modal / daytona)共用一套资源限制,默认给 1 核 CPU、5GB 内存、50GB 磁盘,还能跨会话保留文件系统。这里有个安全默认挺重要:docker 后端默认不把你当前目录挂进容器(docker_mount_cwd_to_workspace: false ),免得 agent 一不小心就能动你工作区的文件。
Docker 部署:推荐的 24/7 形态
如果你想让 Hermes 长期挂着跑,Docker 是我最推荐的方式。官方镜像是nousresearch/hermes-agent:latest ,compose 文件结构很清爽。
Linux/mac 的docker-compose.yml起两个 service:一个gateway (跑消息网关,接 Telegram、Discord 那些),一个dashboard (浏览器管理面板)。用 host 网络,所有状态只挂一个卷,就是你的~/.hermes目录。
搬家、备份,拷这一个目录就行。
HERMES_UID=$(id -u) HERMES_GID=$(id -g) docker compose up -d
前面那串 UID/GID 是把容器里的 hermes 用户映射成你宿主机的身份,保证挂出来的文件你能正常读写。
Windows 上 Docker Desktop 不支持 host 网络,官方另有一份docker-compose.windows.yml ,改成显式端口映射。
有一点和别的安装方式不一样:Docker装的Hermes不能用hermes update升级,要换新镜像。镜像的stable和latest标签只在正式发布后才挪。
注意
这版 compose 注释里把安全默认写得很直白,请照做:① dashboard 默认只绑127.0.0.1,因为它存着你的 API key,裸暴露到局域网或公网且无认证是危险的,远程访问请走 SSH 隧道或带认证的反代;② OpenAI兼容 API server 默认关闭,要开必须同时设 host 和 key,key 是强制的;③别自己绕过镜像的ENTRYPOINT,跳过它会漏掉权限设置和监督树搭建,gateway 会坏。
容器里换了个「大管家」:s6-overlay这是相比旧版底层的一个实打实的改动,值得展开一句。
旧版容器里用 tini 当 1 号进程,它的活很单纯:收割僵尸进程,别让容器里堆一堆死掉的进程。这版换成了 s6-overlay,/init当 1 号进程。它不光收僵尸,还监督 Hermes 主进程、dashboard、以及每个 profile 的gateway,哪个挂了它管着重新拉起。这让容器里那套多进程的东西稳得多。
为了不坑老用户,它还留了个软链/usr/bin/tini → /init ,那些还指向老路径的第三方编排模板(比如某些主机商的一键 WebUI 目录)不会崩。这种「换底座但留兼容垫片」的做法,是个成熟项目该有的样子。
$5 VPS:旧卖点没过时,被写进 README 第一句
橙皮书旧版主打过一个观念:你不需要一台贵机器,一个月 5 美金的 VPS 就能养一个 24/7 在线的 agent。我当时还担心这版会不会淡化它。
结果官方直接把它写进了 README 的第一段:「在一个 $5 VPS、一个 GPU 集群、或者闲时几乎零成本的serverless 上跑它。它不绑在你的笔记本上,它在云上干活时,你可以从 Telegram 跟它聊。」
逻辑没变:不跑本地大模型时 Hermes 占用很低,VPS 上起一个gateway run ,接上 Telegram 或 Discord,模型走云端 API,本地只是个瘦中转。这版还多了一个更划算的组合:VPS 跑 gateway,本地装桌面 App 远程连过去。笔记本只负责好看的界面,重活和 API key 都在远端那台便宜机器上。
手机端:Termux 能跑,但降级了
6月版我把这块写成「一等公民」,现在得往回收一收。
安卓Termux上的安装方式换成了签名的APT仓库:先按文档装好curl、gnupg,导入签名密钥、写好软件源,再pkg install hermes-agent ,分stable和canary两个通道。但官方的平台支持文档把它列在Tier 2,标的是预发布状态,默认的发布流程也不构建Termux版。能装,有人在维护,但官方不保证每个版本都好使。
想法还是那个想法:手机上跑 Termux,起一个 gateway 接 Telegram,把吃灰的旧安卓机变成一个24小时在线的agent服务器。只是现在我会建议你把它当玩具,真要长期挂着,还是$5 VPS稳。
Nix / NixOS:从补强到降级
6月版说Nix这条路补强了:完整的flake,还有一个NixOS module(services.hermes-agent ),能跑成systemd服务或者容器。这些东西现在还在仓库里,但官方文档已经改口,把Nix列为Tier 2,原话是best-effort,只尽力维护。NixOS用户还能用,别指望它跟得上每个版本。
更新:默认只跟稳定版
v0.21.7之前,hermes update会把你拉到main分支的最新一次提交,每天几十个提交,哪个都可能带bug。
现在默认只跟打了稳定标签的正式版本。想回到「每个提交都追」的状态,用hermes update --set-channel main ;桌面版在 Settings ▸ About 里切。
给已经在服务器上跑着好几个profile的人,我测试时发现一个挺好的参数:hermes update --plan 。它只打印计划,不动任何东西,列出这台机器上每个在跑的Hermes服务、各自是什么版本、更新时会怎么重启。升级之前先看一眼,心里有底。
从「改 yaml」到「点面板」
最后说一个不算安装、但深刻影响运维体验的变化。
旧版你想给 Hermes 接一个新的消息渠道、加一个 MCP server、换个凭证,得 SSH 进机器,手改那个 62KB 的cli-config.yaml 。改错一个缩进,整个起不来。
现在有了浏览器管理面板(§08)。消息渠道、MCP 目录、凭证、webhook、记忆、gateway,这些都能在网页上点选配置。你不用再 SSH 进去编辑 yaml 来接一个新渠道了。对不爱折腾配置文件的人,这是从「能用」
到「好用」的一道坎。
命令行这边也补了两个防手滑的东西:hermes config get和hermes config set ,键名拼错会直接报错,不会悄悄写进一个没人读的字段;hermes setup里的Blank Slate模式只开模型、文件、终端三样,适合想从最小配置一点点加的人。
这一节的主线:Hermes 的部署后端其实没怎么变,六种工地加了一种。真正翻新的是「怎么用上它」这层:
长出了桌面 App、浏览器面板、远程瘦客户端三条新路,安装和更新也收到了hermes pm和稳定版通道底下。从前你要会发命令,现在你能直接发安装包。门槛降到这个程度,受众自然就从开发者,往「所有 AI 重度用户」放宽了一截。