在VPS上自托管Hermes Agent

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

在自己的VPS上部署Nous Research的Hermes Agent。创建隔离用户,一条命令安装,选择LLM提供商,接入Telegram,作为systemd服务运行。

Hermes Agent是一个迭代非常快的项目。自2026年2月发布以来,Nous Research在六周内发布了八个版本,新增了配置文件、凭据轮换、MCP服务器模式,以及通过自有门户支持400多个模型。v0.8.0于4月8日发布,带来了后台任务自动通知、跨网关实时模型切换和原生Google AI Studio支持。

在笔记本电脑上运行适合快速实验。但一个合上盖子就休眠、只能从键盘访问、重启后丢失工作区的智能体长期来看并不实用。VPS解决了这三个问题:智能体7x24小时在线,你可以用手机通过Telegram与它对话,它的记忆和技能在会话间持久保存。

配置过程很简单。启动一台虚拟机,创建非root用户进行隔离,安装Hermes,选择模型和网关,然后用systemd服务封装整个流程。这就是全部步骤。

在VPS上自托管AI智能体

为什么现在要自托管?供应商锁定的教训

2026年4月4日,Anthropic切断了第三方AI智能体对Claude Pro和Max订阅的访问权限。在此之前,OpenClaw等工具允许你以固定月费运行繁重的智能体工作负载。一夜之间,这些用户收到了400错误和迁移通知。仅剩的选项:切换到按token计费的API(对重度用户来说可能贵10倍),购买企业级使用套餐,或迁移到Anthropic自己的Claude Code Channels——一个与OpenClaw直接竞争的官方产品,同月上线。

规律很明显。将你的工作流构建在单一供应商的平台上,一次策略变更就能摧毁一切。像Hermes这样的自托管智能体完全避开了这个陷阱。Hermes不绑定任何供应商:它开箱即支持15+推理后端,从OpenRouter到Nous Portal再到本地Ollama服务器。如果某个供应商更改条款或定价,你用一条命令替换它,继续工作。你的记忆、技能和会话留在你的服务器上,与背后使用哪个LLM无关。

什么是Hermes Agent,为什么要自托管?

Hermes Agent是由Nous Research开发的开源(MIT许可证)AI智能体。它连接LLM提供商,执行终端命令,浏览网页,并在会话间记住所学内容。它能从完成的任务中构建可复用的技能,支持Telegram、Discord、Slack、WhatsApp、Signal、Matrix等消息网关。

自托管意味着你的提示词和数据留在你的服务器上。没有第三方智能体平台能看到你的对话。智能体持续运行,随时间积累上下文,成本仅为VPS托管费加上你实际使用的LLM API调用费。

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

Hermes Agent需要一台至少2 GB内存和10 GB可用磁盘空间的Linux服务器。唯一的前提条件是Git。安装程序会自动处理Python 3.11+、Node.js v22、ripgrep和ffmpeg。

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

智能体本身很轻量。如果你计划通过消息网关运行多个并发会话,建议4 GB或更多内存。

前提条件

安装Hermes Agent之前,先设置一个非root用户和基本防火墙。如果你已经有一台安全配置好的VPS,可以直接跳到安装部分。

创建专用用户

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

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

为该用户配置免密码sudo(服务管理需要):

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

配置防火墙

安装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用户身份运行,不要用root。

一键安装

Virtua.Cloud维护了一个一键安装脚本,可以一步完成Hermes Agent的安装和systemd持久化配置:

curl -fsSL https://virtua.sh/i/hermes-ssh | bash

该脚本处理了以下章节中涵盖的所有内容:安装Hermes并创建systemd服务。完成后,直接跳到配置LLM提供商

手动安装

如果你更喜欢逐步安装,下载上游安装脚本并在运行前查看:

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 v22、ripgrep、ffmpeg和hermes CLI。确认无误后:

bash /tmp/hermes-install.sh

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

source ~/.bashrc

检查已安装的版本:

hermes --version

预期输出:

Hermes Agent v0.8.0 (2026.4.8)
Project: /home/hermes/.hermes/hermes-agent
Python: 3.11.15
...

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

hermes doctor

查看绿色对勾标记。此阶段关于未配置API密钥的警告是正常的。如果Python或Git出现红色标记,需要在继续之前修复。

如何配置LLM提供商?

Hermes Agent不包含模型。你需要连接提供商API并按token付费。最快的选择方式是内置选择器:

hermes model

这会显示一个包含15+提供商的交互式菜单。选择一个,粘贴你的API密钥即可。如果你更喜欢手动配置,请继续阅读。

选项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:Nous Portal

Nous Research运营自己的推理门户,支持400+模型。如果你想留在Nous生态系统内:

hermes config set model.provider nous

hermes model命令会引导你完成认证。

选项3:自定义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+模型,单一密钥
Nous Portal 通过hermes model 按token计费(查看定价) 400+模型,原生集成
Anthropic ANTHROPIC_API_KEY 按token计费(查看定价) 直接访问Claude
Google AI Studio GOOGLE_API_KEY 按token计费(查看定价) Gemini模型,v0.8.0起原生支持
Hugging Face HF_TOKEN 按token计费(查看定价) 完整模型套件
Ollama(本地) OPENAI_BASE_URL + OPENAI_API_KEY 免费(自托管) 需要GPU VPS以获得良好速度
vLLM OPENAI_BASE_URL + OPENAI_API_KEY 免费(自托管) 需要GPU

自v0.6.0起内置了提供商故障转移。你可以设置有序的提供商链,当某个提供商宕机时,智能体自动切换到下一个。

测试LLM连接是否正常:

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

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

如何配置审批模式?

Hermes Agent内置了审批系统,在执行可能危险的命令之前会征求确认。在服务器上请保持启用:

hermes config set approval_mode ask

三种模式:

  • ask:在任何修改文件、安装包或访问网络的命令之前提示确认。推荐使用。自v0.8.0起,Telegram和Slack会显示原生审批按钮,无需手动输入回复。
  • 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会回复一个机器人token,格式类似7123456789:AAHx...。复制它。

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

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

第3步:配置网关

将机器人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中的机器人token是否正确
  • 你的用户ID是否在TELEGRAM_ALLOWED_USERS
  • VPS能否通过443端口访问api.telegram.org(出站HTTPS)

其他支持的平台包括Discord、Slack、WhatsApp、Signal、Matrix、飞书/Lark和企业微信。运行hermes gateway setup可以使用交互式向导配置其中任意一个。

如何将Hermes Agent作为systemd服务运行?

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

安装服务

Hermes提供了内置命令:

hermes gateway install

这会在~/.config/systemd/user/hermes-gateway.service创建服务文件并自动启用lingering。Lingering可以在你退出SSH后保持用户服务运行。

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

systemctl --user enable --now hermes-gateway

检查服务状态:

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/中。该目录包含记忆、学习的技能、会话历史、配置和定时任务。丢失它意味着智能体遗忘一切。

关键路径:

路径 内容
~/.hermes/config.yaml 配置
~/.hermes/.env API密钥和密钥
~/.hermes/memories/ 持久化智能体记忆
~/.hermes/skills/ 智能体创建的可复用技能
~/.hermes/sessions/ 网关会话历史
~/.hermes/cron/ 计划任务
~/.hermes/SOUL.md 智能体身份/角色

创建备份脚本:

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到另一台机器或对象存储。

如何更新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智能体需要注意安全。以下是本指南已配置的内容总结和一些额外步骤。

本指南中已配置:

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

额外加固:

定期审查智能体学习的技能:

ls -la ~/.hermes/skills/

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

监控网关日志,排查异常用户或可疑活动:

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

自v0.7.0起,Hermes会阻止浏览器URL和LLM响应中的密钥泄露尝试。v0.8.0新增了MCP OAuth 2.1 PKCE支持、SSRF防护和扩展的自动恶意软件扫描。保持安装更新以获得这些保护。

故障排除

网关无法启动:

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

常见原因:无效的机器人token、缺少API密钥或网络问题。

Telegram机器人没有响应:

检查机器人token和允许的用户:

grep TELEGRAM ~/.hermes/.env

测试出站连接:

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

返回包含你机器人信息的有效响应说明token和网络正常。

安装后找不到hermes命令:

source ~/.bashrc

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

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

内存使用过高:

检查资源消耗情况:

top -bn1 | head -20

如果智能体生成了长时间运行的进程,降低工作负载或升级VPS。

费用是多少?

在VPS上自托管Hermes Agent的费用包括服务器和LLM API使用。两个成本组成部分:

  • VPS托管: 一台2+ vCPU和4 GB内存的VPS。查看Virtua.Cloud VPS方案了解当前定价。
  • LLM API调用: 所有支持的提供商都采用按token计费。你的月度费用取决于选择的模型和使用频率。查看你的提供商定价页面了解当前费率。

真正的节省不仅是财务上的。你拥有智能体的数据,可以选择任何供应商,没有任何策略变更能在一夜之间让你停摆。

在VPS上运行Claude Code


版权所有 2026 Virtua.Cloud。保留所有权利。 本内容为 Virtua.Cloud 团队原创作品。 未经书面许可,禁止复制、转载或再分发。