在VPS上自托管Hermes Agent
在自己的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服务封装整个流程。这就是全部步骤。
为什么现在要自托管?供应商锁定的教训
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发送消息。发送以下命令:
/newbot- 输入机器人名称(例如"My Hermes Agent")
- 输入用户名(必须以
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限制机器人访问仅限你的用户IDapproval_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计费。你的月度费用取决于选择的模型和使用频率。查看你的提供商定价页面了解当前费率。
真正的节省不仅是财务上的。你拥有智能体的数据,可以选择任何供应商,没有任何策略变更能在一夜之间让你停摆。
版权所有 2026 Virtua.Cloud。保留所有权利。 本内容为 Virtua.Cloud 团队原创作品。 未经书面许可,禁止复制、转载或再分发。
准备好亲自尝试了吗?
在您自己的 VPS 上运行 AI 代理。 →