Hermes Agent VPS 部署教程:隔离、Docker 与备份升级
Hermes Agent 能调用模型、文件、命令、Skills、MCP 和消息网关。部署前先划清两条边界:谁可以向它发送内容,整个进程可以访问哪些主机资源。
可信输入可以先在宿主机试跑;接入消息平台时,应把整个 Hermes 进程放进容器。个人微信、飞书和企业微信的设置在 Hermes 消息平台接入教程。
先选隔离方式
Hermes 官方把它定位为单租户个人 Agent。互不信任的用户或业务域需要独立实例和 allowlist,不同会话无法提供足够的隔离。
面对恶意模型输出或不可信输入时,只有操作系统隔离才是安全边界。审批提示、输出脱敏和工具 allowlist 只能作为纵深防护。
| 场景 | 最低建议 |
|---|---|
| 仅本人通过 CLI 做可信测试 | 专用普通用户,可先在宿主机验证 |
| 只隔离 Shell 与文件工具 | 使用受支持的 terminal backend |
| 接入消息、网页、邮件或不可信 MCP | 把整个 Hermes 进程放入容器或 OpenShell |
| 生产或多人共享 | 整进程隔离,并拆分不同信任域 |
把 terminal.backend 设为 Docker,只会隔离经过该 backend 的 Shell 和文件工具。代码执行、插件、Hooks、Skills 与 MCP 子进程仍可能留在宿主 Agent 进程中。要隔离整个进程,需要把 Hermes 本身放进容器。
生产消息入口应使用整进程隔离。每个启用的消息或网络适配器都要有明确 allowlist,不能因为容器已经存在就放宽发送者权限。
准备 VPS 和备份
先完成 Linux VPS 初始安全配置,确认普通用户、SSH 恢复入口、主机防火墙和 Docker 来源。模型密钥、App Secret、用户标识和备份不能进入公开仓库。
已有实例先创建备份:
mkdir -p "$HOME/Backups/hermes"
BACKUP_ARCHIVE="$HOME/Backups/hermes/pre-change-$(date -u +%Y%m%dT%H%M%SZ).zip"
hermes backup --output "$BACKUP_ARCHIVE"
test -s "$BACKUP_ARCHIVE"
chmod 600 "$BACKUP_ARCHIVE"
归档可能包含配置、认证、会话和 Skills。把它加密复制到 VPS 外部,并记录恢复所需账户;同一台主机上的单份 zip 不能应对主机故障。
下载并检查安装器
不要把会变化的网络响应直接管道给 Shell。先下载、记录摘要并查看:
HERMES_INSTALLER=$(mktemp)
trap 'rm -f "$HERMES_INSTALLER"' EXIT
curl --proto '=https' --tlsv1.2 --fail --show-error --location \
https://hermes-agent.nousresearch.com/install.sh \
--output "$HERMES_INSTALLER"
sha256sum "$HERMES_INSTALLER"
less "$HERMES_INSTALLER"
bash "$HERMES_INSTALLER"
本地摘要用于记录本次安装,不能替代上游签名。域名、权限或持久化操作不符合预期时,先停止安装。
重新打开 Shell 后验证:
hermes version
hermes doctor
hermes setup
hermes doctor
先完成一轮最小对话和会话恢复。模型调用未通过时,不要继续叠加消息网关、Cron、第三方 Skills 或插件。
宿主机常驻只用于可信试运行
当前只有可信操作者输入时,可以先使用官方服务命令:
hermes gateway setup
hermes gateway
# 前台验证后按 Ctrl+C
hermes gateway install
hermes gateway start
hermes gateway status
这条路径仍让 Hermes 处在宿主用户的信任范围内。不要把服务用户加入 Docker 组;Docker socket 通常意味着可获得宿主机高权限。
准备切到容器时,先停止宿主 Gateway,避免同一个消息 token 被两个 poller 同时使用:
hermes gateway stop
hermes gateway status
生产消息面使用整进程容器
先拉取官方镜像并记录 RepoDigest,不直接依赖会移动的 latest 标签:
sudo docker pull nousresearch/hermes-agent:latest
HERMES_IMAGE=$(sudo docker image inspect nousresearch/hermes-agent:latest \
--format '{{index .RepoDigests 0}}')
case "$HERMES_IMAGE" in
*@sha256:*) printf '%s\n' "$HERMES_IMAGE" ;;
*) echo '没有取得 Hermes 镜像摘要' >&2; exit 1 ;;
esac
HERMES_UID=$(id -u)
HERMES_GID=$(id -g)
mkdir -p "$HOME/.hermes"
chmod 700 "$HOME/.hermes"
首次设置使用同一个数据路径和固定摘要:
sudo docker run --rm -it \
-e PUID="$HERMES_UID" -e PGID="$HERMES_GID" \
-v "$HOME/.hermes:/opt/data" \
"$HERMES_IMAGE" setup
正式启动时,不挂载 Docker socket、宿主机根路径或 SSH 私钥,也不发布不需要的 Dashboard 端口:
sudo docker run -d \
--name hermes \
--restart unless-stopped \
-e PUID="$HERMES_UID" -e PGID="$HERMES_GID" \
-v "$HOME/.hermes:/opt/data" \
"$HERMES_IMAGE" gateway run
sudo docker exec hermes hermes doctor
sudo docker logs --tail 100 hermes
消息渠道使用出站长连接或轮询时,无需发布容器端口。管理界面应保持 loopback,不要暴露到公网或绑定 0.0.0.0;通过 SSH 隧道或私有网络访问。
接入消息平台
容器稳定后,再在运行中的容器里启动向导:
sudo docker exec -it hermes hermes gateway setup
微信、飞书、企业微信各自的连接方式和 allowlist 见 Hermes 消息平台接入教程。每添加一个平台,都要保存凭据、限制发送者、重启 Gateway,并分别用允许与拒绝账号测试。
做行为级验收
sudo docker inspect hermes --format '{{.Config.Image}}'
sudo docker exec hermes hermes gateway status
sudo docker exec hermes hermes doctor
sudo docker logs --since 10m hermes
sudo ss -lntp
日志不应出现循环重启、重复 poller、持续认证失败或未授权消息触发任务。公开排障信息前,删除 token、App Secret、用户 ID、消息正文、路径和模型凭据。
备份后再升级
宿主机试运行路径可以先预览,再创建更新备份:
hermes update --check
hermes update --backup
hermes gateway status
hermes doctor
容器不要在内部执行 git pull。先把官方全量备份写到容器临时路径,再复制到宿主机:
UPGRADE_NAME="pre-image-upgrade-$(date -u +%Y%m%dT%H%M%SZ).zip"
HOST_UPGRADE_BACKUP="$HOME/Backups/hermes/$UPGRADE_NAME"
mkdir -p "$HOME/Backups/hermes"
chmod 700 "$HOME/Backups/hermes"
sudo docker exec hermes hermes backup --output "/tmp/$UPGRADE_NAME"
sudo docker cp "hermes:/tmp/$UPGRADE_NAME" "$HOST_UPGRADE_BACKUP"
test -s "$HOST_UPGRADE_BACKUP"
chmod 600 "$HOST_UPGRADE_BACKUP"
sudo docker exec hermes rm -f -- "/tmp/$UPGRADE_NAME"
OLD_IMAGE=$(sudo docker inspect hermes --format '{{.Image}}')
printf '%s\n' "$OLD_IMAGE"
sudo docker pull nousresearch/hermes-agent:latest
记录新旧 RepoDigest,重建容器并重复行为验收。
保留旧镜像,直到新版本通过真实测试。恢复归档前,先在隔离位置检查来源和权限,再使用官方导入流程;不要直接解压覆盖正在运行的 ~/.hermes。
服务边界
iVPSer 提供 VPS、基础资源和控制台入口。Hermes、模型账户、Docker、消息平台、允许名单、密钥、备份与 Agent 执行结果由使用者管理。
实例价格、库存和配置以实时控制台为准。根据容器监控、会话量、工具调用和磁盘增长调整规格,不照搬固定数字。