在VPS上自建Hermes Agent
在你自己的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上测试通过。
什么是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发送消息。执行以下命令:
/newbot- 输入机器人名称(例如"My Hermes Agent")
- 输入用户名(必须以
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将机器人访问限制为你的用户IDapproval_mode: ask对危险命令要求确认
额外加固:
通过验证配置完全禁用本地终端后端:
hermes config
在Terminal部分,确认Backend显示docker而不是local。
对Docker容器设置资源限制,防止失控进程消耗所有服务器资源。这在前面通过container_cpu和container_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/月。自建成本更低,数据留在你自己的服务器上。
Copyright 2026 Virtua.Cloud. All rights reserved.