在VPS上自建Hermes Agent

3 分钟阅读·Matthieu·hermes-agentai-agentself-hostingdockertelegramsystemd|

在你自己的VPS上部署Nous Research的Hermes Agent,配置Docker沙箱、Telegram消息网关和systemd持久化。所有命令均在真实服务器上测试通过。

Hermes Agent可以在大多数开发机上本地运行。但本地运行意味着笔记本合盖就离线,手机无法访问,工作空间也不会持久保存。迁移到VPS可以解决这三个问题:agent全天候运行,你通过Telegram与它对话,它在不同会话之间保留记忆和技能。

本指南从零开始带你在VPS上部署Hermes Agent。你将安装它、连接LLM提供商、用Docker沙箱隔离终端命令、接入Telegram,并将整个服务配置为systemd服务以在重启后自动恢复。所有命令均在4 vCPU、8 GB RAM的Ubuntu 24.04 VPS上测试通过。

在VPS上自建AI Agent

什么是Hermes Agent,为什么要自建?

Hermes Agent是Nous Research开发的开源AI agent。它连接LLM提供商(OpenRouter、Anthropic、Ollama等),执行终端命令,浏览网页,并在不同会话之间记住所学内容。它存储持久记忆,从完成的任务中构建可复用技能,支持消息网关,让你可以通过Telegram、Discord、Slack、WhatsApp或Signal与它对话。

自建意味着你的提示词和数据留在你的服务器上。没有第三方agent平台能看到你的对话。agent持续运行,随时间积累上下文,成本只有VPS托管费加上你使用的LLM API调用费。在每月€5-10的VPS上使用OpenRouter,大多数开发者的总花费不超过每月€20。

Hermes Agent在VPS上运行需要什么?

Hermes Agent需要一台至少2 GB RAM、10 GB可用磁盘空间并安装了Git的Linux服务器。如果你需要沙箱化的终端执行(你确实需要),则必须安装Docker。安装程序会自动处理Python 3.11+和Node.js。

需求 最低配置 推荐配置
操作系统 Ubuntu 22.04 / Debian 12 Ubuntu 24.04
内存 2 GB 4 GB+
磁盘 10 GB可用 20 GB+(Docker镜像)
CPU 1 vCPU 2+ vCPU
前置条件 Git Git、Docker
网络 出站HTTPS 出站HTTPS

agent本身很轻量。大部分RAM被执行命令时的Docker容器占用。如果你计划通过消息网关运行多个并发会话,建议4 GB或更多内存。

前置条件

在安装Hermes Agent之前,设置一个非root用户和基本防火墙。如果你已经有一台加固过的VPS,直接跳到安装部分。

创建专用用户

以root身份SSH登录服务器,创建Hermes专用用户:

adduser hermes --disabled-password --gecos ""
usermod -aG sudo hermes

赋予该用户免密sudo权限(Docker和服务管理需要):

echo "hermes ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/hermes
chmod 440 /etc/sudoers.d/hermes

复制你的SSH密钥以便用该用户登录:

mkdir -p /home/hermes/.ssh
cp ~/.ssh/authorized_keys /home/hermes/.ssh/
chown -R hermes:hermes /home/hermes/.ssh
chmod 700 /home/hermes/.ssh
chmod 600 /home/hermes/.ssh/authorized_keys

从现在开始以hermes用户操作:

su - hermes

安装Docker

Hermes Agent使用Docker对终端命令进行沙箱隔离。从Docker官方仓库安装:

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin

将hermes用户添加到docker组,使其无需sudo即可运行容器:

sudo usermod -aG docker hermes
newgrp docker

验证Docker是否正常工作:

docker run --rm hello-world

你应该在输出中看到"Hello from Docker!"。这确认Docker可以拉取镜像并运行容器。

配置防火墙

安装UFW并配置为仅允许SSH,默认拒绝所有其他入站流量:

sudo apt-get install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw --force enable

验证规则:

sudo ufw status verbose

输出应显示SSH已允许,所有其他入站流量被拒绝。Hermes网关向Telegram API发起出站连接,因此无需为消息功能开放任何入站端口。

如何在Ubuntu上安装Hermes Agent?

Hermes Agent通过单条命令安装,自动处理Python、Node.js和所有依赖。以hermes用户运行,不要用root。

首先,在执行前检查安装脚本。下载、审查后再执行:

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh -o /tmp/hermes-install.sh
less /tmp/hermes-install.sh

审查脚本内容。它通过uv安装Python 3.11+、Node.js以及hermes CLI。确认没有问题后执行:

bash /tmp/hermes-install.sh

重新加载shell以识别新的hermes命令:

source ~/.bashrc

验证安装:

hermes --version

你应该看到版本和环境信息:

Hermes Agent v0.4.0 (2026.3.18)
Project: /home/hermes/.hermes/hermes-agent
Python: 3.11.15
...

运行诊断工具检查缺失的依赖:

hermes doctor

查看输出中的绿色勾号。关于未配置API密钥(OpenRouter、Browserbase等)的警告在此阶段是正常的。你将在下一步配置LLM提供商。关于Python、Git或Docker的红色项目需要在继续之前修复。

如何配置LLM提供商?

Hermes Agent需要LLM提供商才能运行。它本身不包含模型。你需要连接一个提供商API并按token付费。OpenRouter通过单个API密钥提供200+个模型的访问,是最快的入门方式。

方案1:OpenRouter(推荐入门方案)

在openrouter.ai创建账号并生成API密钥。

安装程序已创建~/.hermes/.env并附带完整模板。首先锁定其权限:

chmod 600 ~/.hermes/.env

打开文件,在OPENROUTER_API_KEY=行设置你的API密钥:

nano ~/.hermes/.env

找到OPENROUTER_API_KEY=行,在=号后添加你的密钥。保存并退出(Ctrl+X,然后Y,然后Enter)。

设置默认模型:

hermes config set model.provider openrouter
hermes config set model.default anthropic/claude-sonnet-4

验证文件对其他用户不可读:

ls -la ~/.hermes/.env

权限应显示-rw-------(600)。只有hermes用户能读取此文件。

方案2:自定义OpenAI兼容端点

如果你运行自己的推理服务器(Ollama、vLLM、llama.cpp)或使用其他提供商:

echo 'OPENAI_BASE_URL=http://localhost:11434/v1' >> ~/.hermes/.env
echo 'OPENAI_API_KEY=ollama' >> ~/.hermes/.env
echo 'LLM_MODEL=llama3.1:70b' >> ~/.hermes/.env

LLM提供商对比

提供商 环境变量 费用 备注
OpenRouter OPENROUTER_API_KEY 按token计费,因模型而异 200+模型,单个密钥
Anthropic ANTHROPIC_API_KEY 按token计费 直接访问Claude
Ollama(本地) OPENAI_BASE_URL + OPENAI_API_KEY 免费(自托管) 需要GPU VPS才能获得良好速度
vLLM OPENAI_BASE_URL + OPENAI_API_KEY 免费(自托管) 需要GPU

测试LLM连接是否正常:

hermes -m "What is 2+2? Reply with just the number."

如果收到回复,说明提供商配置正确。如果看到认证错误,检查~/.hermes/.env中的API密钥。

如何用Docker对Hermes Agent进行沙箱隔离?

默认情况下,Hermes Agent直接在宿主机上执行终端命令。在VPS上这是安全风险。如果LLM生成了破坏性命令,它会在你的实际服务器上运行。Docker沙箱将所有命令执行隔离在容器内。

设置Docker为终端后端:

hermes config set terminal.backend docker

~/.hermes/config.yaml中配置Docker镜像和资源限制:

hermes config set terminal.docker_image "nikolaik/python-nodejs:python3.11-nodejs20"
hermes config set terminal.container_cpu 1
hermes config set terminal.container_memory 2048
hermes config set terminal.container_persistent true

这些设置的作用:

  • docker_image:沙箱的基础镜像。这个镜像包含Python和Node.js,覆盖大多数开发任务。
  • container_cpu:限制容器使用1个CPU核心。防止失控进程耗尽VPS资源。
  • container_memory:容器的2048 MB RAM限制。如果处理大数据集可以调高。
  • container_persistent:在命令之间保持容器运行。跳过容器启动过程,执行更快。

验证后端设置:

hermes config

在Terminal部分,你应该看到Backend: docker

终端后端对比

后端 安全性 速度 使用场景
local 无隔离。命令在宿主机运行 最快 仅限本地开发。绝不要在VPS上使用
docker 容器隔离 有少量启动开销 VPS部署(推荐)
ssh 网络隔离 有网络延迟 在另一台服务器上执行

配置审批模式

Hermes Agent内置审批系统,在运行潜在危险命令前会征求确认。在服务器上保持启用:

hermes config set approval_mode ask

三种模式:

  • ask:在任何修改文件、安装软件包或涉及网络的命令前提示确认。使用这个。
  • smart:AI模型评估风险,仅对真正危险的命令提示。更快,但依赖AI的判断。
  • off:不检查。所有命令立即执行。不要在服务器上使用。

如何将Hermes Agent连接到Telegram?

消息网关让你可以在手机上与Hermes对话。Telegram是最常见的配置方式。网关向Telegram API发起出站连接,因此不需要在防火墙上开放任何入站端口。

第1步:创建Telegram机器人

打开Telegram,向@BotFather发送消息。执行以下命令:

  1. /newbot
  2. 输入机器人名称(例如"My Hermes Agent")
  3. 输入用户名(必须以bot结尾,例如myhermes_agent_bot

BotFather会回复一个bot token,格式类似7123456789:AAHx...。复制它。

第2步:获取你的Telegram用户ID

在Telegram上向@userinfobot发送消息。它会回复你的数字用户ID。复制这个数字。

第3步:配置网关

将bot token和你的用户ID添加到环境文件:

echo 'TELEGRAM_BOT_TOKEN=7123456789:AAHxYourTokenHere' >> ~/.hermes/.env
echo 'TELEGRAM_ALLOWED_USERS=your_numeric_user_id' >> ~/.hermes/.env

TELEGRAM_ALLOWED_USERS变量是一个安全控制。只有列出的用户ID才能与你的机器人交互。如果不设置,任何找到你机器人的人都可以向它发送命令。多个ID用逗号分隔。

第4步:测试网关

在前台启动网关以验证连接:

hermes gateway

在Telegram中向你的机器人发送消息。你应该在终端看到消息出现并收到回复。确认正常后按Ctrl+C停止网关。

如果机器人没有回复,检查:

  • ~/.hermes/.env中的bot token是否正确
  • 你的用户ID是否在TELEGRAM_ALLOWED_USERS
  • VPS是否能通过443端口访问api.telegram.org(出站HTTPS)

其他支持的平台包括Discord、Slack、WhatsApp、Signal和Email。运行hermes gateway setup进入交互式向导,配置其中任何一个。

如何将Hermes Agent配置为systemd服务?

在终端会话中运行hermes gateway意味着断开连接后它就会停止。systemd用户服务在注销后保持网关运行,并在崩溃或服务器重启时自动重启。

安装服务

Hermes提供内置命令将网关安装为systemd用户服务:

hermes gateway install

这会在~/.config/systemd/user/hermes-gateway.service创建服务文件并自动启用lingering。Lingering让用户服务在SSH注销后继续运行。没有它,systemd会在你的会话结束时终止网关。

启动服务并设置开机启动:

systemctl --user enable --now hermes-gateway

enable使其开机自启。--now标志立即启动。始终一起使用。

验证服务是否在运行:

systemctl --user status hermes-gateway

注意看输出中的Active: active (running)。如果显示failed,检查日志。

查看日志

查看实时网关日志:

journalctl --user -u hermes-gateway -f

Ctrl+C停止跟踪。网关日志显示每条收到的消息、LLM调用和工具执行。

设置工作目录

默认情况下,网关使用主目录作为工作空间。设置一个专用项目目录:

echo 'MESSAGING_CWD=/home/hermes/projects' >> ~/.hermes/.env
mkdir -p /home/hermes/projects

重启服务以生效:

systemctl --user restart hermes-gateway

如何备份Hermes Agent数据?

Hermes将所有状态存储在~/.hermes/中。该目录包含记忆、学到的技能、会话历史、配置和定时任务。丢失它意味着agent忘记一切。

关键路径:

路径 内容
~/.hermes/config.yaml 配置
~/.hermes/.env API密钥和机密
~/.hermes/memories/ 持久化agent记忆
~/.hermes/skills/ agent创建的可复用技能
~/.hermes/sessions/ 网关会话历史
~/.hermes/cron/ 定时任务
~/.hermes/SOUL.md Agent身份/人设

创建备份脚本:

cat > /home/hermes/backup-hermes.sh << 'SCRIPT'
#!/bin/bash
BACKUP_DIR="/home/hermes/backups"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
mkdir -p "$BACKUP_DIR"
tar czf "$BACKUP_DIR/hermes-$TIMESTAMP.tar.gz" \
  --exclude='*.log' \
  -C /home/hermes .hermes/
# Keep only the last 7 backups
ls -t "$BACKUP_DIR"/hermes-*.tar.gz | tail -n +8 | xargs -r rm
echo "Backup saved: $BACKUP_DIR/hermes-$TIMESTAMP.tar.gz"
SCRIPT
chmod 700 /home/hermes/backup-hermes.sh

通过cron每日运行:

(crontab -l 2>/dev/null; echo "0 3 * * * /home/hermes/backup-hermes.sh") | crontab -

验证cron条目:

crontab -l

你应该看到备份任务定在每天03:00执行。脚本保留7天的备份,删除更旧的。

对于异地备份,将备份目录rsync到另一台机器或对象存储。仅在同一台VPS上保留备份无法防止磁盘故障。

如何更新Hermes Agent?

Hermes Agent包含内置更新命令。更新前先备份数据。

/home/hermes/backup-hermes.sh
hermes update

验证新版本:

hermes --version

检查更新后是否需要配置变更:

hermes config migrate
hermes doctor

config migrate添加新配置选项及其默认值。hermes doctor检查更新后一切是否正常。

重启网关服务以运行新版本:

systemctl --user restart hermes-gateway
systemctl --user status hermes-gateway

如果更新后出现问题,从备份恢复:

systemctl --user stop hermes-gateway
tar xzf /home/hermes/backups/hermes-YYYYMMDD-HHMMSS.tar.gz -C /home/hermes/
systemctl --user start hermes-gateway

安全加固清单

一个在VPS上执行终端命令的AI agent需要注意安全。以下总结了本指南已配置的内容和一些额外步骤。

本指南中已配置:

  • 非root用户(hermes),拥有专用主目录
  • Docker沙箱隔离所有终端命令执行
  • UFW防火墙拒绝除SSH外的所有入站流量
  • API密钥存储在~/.hermes/.env中,权限为600
  • TELEGRAM_ALLOWED_USERS将机器人访问限制为你的用户ID
  • approval_mode: ask对危险命令要求确认

额外加固:

通过验证配置完全禁用本地终端后端:

hermes config

在Terminal部分,确认Backend显示docker而不是local

对Docker容器设置资源限制,防止失控进程消耗所有服务器资源。这在前面通过container_cpucontainer_memory已经配置。

定期审查agent学到的技能:

ls -la ~/.hermes/skills/

技能是agent编写并复用的脚本。像审查服务器上运行的任何代码一样审查它们。

监控网关日志以发现意外用户或异常活动:

journalctl --user -u hermes-gateway --since "1 hour ago" --no-pager

故障排除

网关无法启动:

journalctl --user -u hermes-gateway -n 50 --no-pager

常见原因:无效的bot token、缺少API密钥、Docker未运行。用systemctl status docker检查Docker是否处于活动状态。

Telegram机器人没有回复:

验证bot token和允许的用户是否已设置:

grep TELEGRAM ~/.hermes/.env

测试出站连接:

curl -s https://api.telegram.org/bot<YOUR_TOKEN>/getMe

收到包含机器人信息的有效回复即确认token和网络正常。

Docker权限被拒绝:

groups

输出必须包含docker。如果没有,重新运行sudo usermod -aG docker hermes并注销/登录。

安装后找不到hermes命令:

source ~/.bashrc

如果仍然找不到,检查~/.local/bin是否在PATH中:

echo $PATH | tr ':' '\n' | grep local

内存占用过高:

检查Docker容器资源消耗:

docker stats --no-stream

如果容器使用过多RAM,降低container_memory设置。

费用明细

在VPS上自建Hermes Agent的费用包括服务器和LLM API使用。以下是个人开发者的实际估算。

项目 月费
VPS(2 vCPU,4 GB RAM) €5-10
OpenRouter API(中等使用,约50万token/天) €5-15
Docker开销 包含在VPS费用中
Telegram网关 免费
合计 €10-25/月

托管AI助手订阅费为€20-200/月。自建成本更低,数据留在你自己的服务器上。

在VPS上运行Claude Code


Copyright 2026 Virtua.Cloud. All rights reserved.

准备好亲自尝试了吗?

几秒内部署您自己的服务器。支持 Linux、Windows 或 FreeBSD。

查看 VPS 方案
在VPS上自建Hermes Agent:分步指南