一句话总结:在 VPS 上部署 Hermes Agent,搭配 DeepSeek API 做推理、Discord 做消息推送。现在用手机就能查服务器状态、收日报、监控网站——全程 10 个坑,每个都替你踩过了。
⚖️ 利益相关声明:本文含 VPS 推荐链接,通过链接购买 GK 会获得少量佣金,不影响你的价格。所有方案均基于自费实测。
一个周末晚上,我完成了 Hermes Agent 部署——在 VPS 上安装开源 AI 管家,搭配 DeepSeek API 做推理、Discord 做消息通路。从 SSH 连进去到手机收到第一条消息,花了三个多小时。中间翻了十个坑——API 400、Discord Token 401、cron 命令格式反复报错、时区不一致导致日报失踪。这篇文章把整个过程原样记下来。如果你也在做 Hermes Agent 部署,能帮你省两个小时。
Hermes Agent 部署完成后,最终效果:手机 Discord 发一条”服务器状态”,十秒收到回复。每天早上收到自动日报。网站挂了第一时间告警。
一、Hermes Agent 是什么
简单说:Hermes Agent 是一个开源的 AI 框架,能在服务器上执行终端命令、读写文件、管理定时任务。给它接上大模型 API,它就变成一个能自己干活的运维管家。你不在的时候它跑定时任务,你在的时候发条消息它就干活。
三个组件组成这套系统:
| 组件 | 角色 | 说明 |
|---|---|---|
| Hermes Agent | AI 管家本体 | 7×24 运行在 VPS 上,执行命令、管理定时任务、接收消息 |
| DeepSeek API | 推理大脑 | 处理自然语言指令,生成回复。走 OpenAI 兼容协议,按量计费 |
| Discord | 消息通路 | 你手机发消息 → Discord → Hermes 收到 → 执行 → 返回结果 |
为什么不用 Telegram?国内被墙。为什么不用微信?微信个人号接 Bot 违反平台规则,公众号内容审核又极其严格。Discord 国内直连、手机推送及时、Hermes 原生支持,是当下最省心的选择。
VPS 有闲置内存就行。我在用的是 Vultr 2h2g(BandwagonHost 同理),Ubuntu 24.04,宝塔面板已装,两个 WordPress 站点运行中。Hermes 本体只占 ~200MB 内存,不抢网站资源。
二、Hermes Agent 部署:从零到跑通
2.1 创建低权限用户
Agent 能执行 shell 命令,所以不能用 root 跑。万一出问题只影响自己目录:
useradd -m -s /bin/bash hermes
passwd hermes
usermod -aG sudo hermes
2.2 安装
安装脚本会自动处理 Python、Node.js 等依赖。但编译工具(build-essential、python3-dev)需要 sudo 权限装:
# 先切 root 装编译依赖
apt install -y build-essential python3-dev libffi-dev
# 再切回 hermes 安装
su - hermes
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.bashrc
hermes --version
坑 #1:宝塔终端断连。 安装脚本下载 213 个 Python 包时(`uv` 解析依赖),宝塔网页终端超时断开——两次都断在同一个地方。换 Mac 原生终端 SSH 后解决。教训:所有部署类操作,别用网页终端,用真实 SSH。如果网络不稳定,可以先用 `screen` 开一个会话再跑安装,断了也能重连回来。
2.3 配置 DeepSeek API:解决 HTTP 400 报错
安装完进入配置向导,Quick Setup → 模型提供商选 DeepSeek → 模型选 deepseek-chat → 粘贴 API Key。
配置完输入”你好”,HTTP 400。
⚠️ API call failed: BadRequestError [HTTP 400]
Provider: deepseek Model: deepseek-chat
Endpoint: https://api.deepseek.com/v1
坑 #2:内置 DeepSeek 适配器不兼容。
排查:`curl` 直接调 DeepSeek API → 正常返回。API Key 没问题,是 Hermes v0.14.0 内置适配器和实际 API 不匹配。
方案:绕开内置适配器,走自定义端点。这是整个 Hermes Agent 部署过程中第一个真正卡住我的坑。
hermes model
# 在模型列表最下面选 More providers → 自定义端点(Custom endpoint)
# Base URL: https://api.deepseek.com/v1
# API Key: sk-你的key
# Compatibility mode: Chat Completions(选第 2 项)
# 验证端点 → 2 models visible → 确认
再输”你好”,正常回复。这个坑查了快四十分钟。
三、对接 Discord:解决 Token 401 与 Bot 不响应
这是整个部署里最折腾的环节。
3.1 创建 Bot
discord.com/developers → New Application → Bot → Reset Token。
坑 #3:Token 401。
discord.errors.LoginFailure: Improper token has been passed.
HTTPException: 401 Unauthorized
回去 Reset Token 重新生成。注意:Token 格式是 MTU...G...xxxxx 三段,点隔开。不是这个格式的拿错了。另外 Token 只在创建时显示一次,不确定就 Reset。
坑 #4:Bot 没进服务器。 创建了 Bot 但它在哪?去 OAuth2 → URL Generator:
| 类别 | 勾选 |
|---|---|
| Scopes | bot、applications.commands |
| Bot Permissions | Send Messages、Read Message History、Use Slash Commands、Embed Links |
复制生成的 URL,浏览器打开,选服务器,授权。成员列表出现 My-Agent 后,`/set-home` 才能用。
坑 #5:Message Content Intent 没开。 Bot 在线但不读消息。Developer Portal → Bot → Privileged Gateway Intents → 打开 Message Content Intent。不开这个,Bot 只认斜杠命令,不认普通文字。
3.2 配置 Gateway
hermes setup gateway
# 选 Discord → 粘贴 Token
# Allowed user IDs → 粘贴你的 Discord 用户 ID
# (只允许你操作!Bot 能执行服务器命令,别跳过这步)
# Home channel → 跳过,稍后 Discord 里 /set-home
坑 #6:装系统服务时找不到命令。
root@vps:~# sudo hermes gateway install --system --run-as-user hermes
sudo: hermes: command not found
`hermes` 装在 `/home/hermes/.local/bin/`,root 的 PATH 里没有。完整路径解决:
/home/hermes/.local/bin/hermes gateway install --system --run-as-user hermes
/home/hermes/.local/bin/hermes gateway start --system
systemctl status hermes-gateway
看到 `active (running)`。回 Discord,发 `/set-home`,Bot 回复”Home channel set”。通路打通。
四、定时任务:配置 Cron 实现自动化监控
Hermes 能执行这些监控命令,是因为它自带了系统命令执行能力——这也是为什么前面第一步就强调必须创建低权限的 hermes 账户。不要用 root 跑 AI Agent:一旦模型产生幻觉或被恶意提示词注入,低权限用户顶多弄脏自己的 home 目录,root 跑就直接裸奔了。
坑 #7:cron 参数格式。 这个坑花了好几条错误尝试才搞明白:
# ❌ 报错
hermes cron add "描述"
# → Failed: create requires either prompt or at least one skill
hermes cron create --prompt "描述"
# → unrecognized arguments: --prompt
hermes cron create -z "描述"
# → unrecognized arguments: -z
`hermes cron create –help` 显示:schedule 和 prompt 是位置参数,不加任何 flag。
# ✅ 正确格式
hermes cron create "schedule" "prompt描述" --name "任务名" --deliver discord
坑 #8:`30m` 是单次,不是重复。 `”30m”` 表示”30 分钟后跑一次,然后停”。要持续重复必须用 cron 表达式。
坑 #9:没加 `–deliver discord`。 默认投递到本地终端,手机收不到。
最终四条:
# 网站监控(每30分钟)
hermes cron create "*/30 * * * *" "检查网站。curl检查yourdomain.com和yourdomain2.com的HTTP状态码。异常Discord告警,恢复也通知。" --name "site-monitor" --deliver discord
# 每日早报(每天9点)
hermes cron create "0 9 * * *" "服务器日报发Discord:CPU/内存/磁盘、nginx/mysql状态、Wordfence攻击拦截、流量数据。标题'📊 每日报告'。" --name "daily-report" --deliver discord
# 月度维护(每月1号10点)
hermes cron create "0 10 1 * *" "月度维护发Discord。核实Pretty Links有效性、列出超过90天的文章建议更新、插件可用更新。标题'🔧 月度维护'。" --name "monthly-check" --deliver discord
# 自动清理(每周日凌晨3点)
hermes cron create "0 3 * * 0" "执行hermes sessions prune --older-than 30清理旧会话。" --name "session-cleanup" --deliver discord
验证:`hermes cron list`,确认每个任务都是 `Repeat: ∞` 且 `Deliver: discord`。
五、实际怎么用
出门查服务器
手机打开 Discord,发”服务器状态”。Bot 返回 CPU、内存、磁盘、网站在线情况,十秒。
每天早上收日报
9 点自动推送:过去 24 小时攻击扫描次数、Pretty Links 点击数及来源、系统资源。不登录宝塔,不看 GSC。
发现被扫描
部署第二天 Bot 就发现一个 IP 在批量探测 wp-config.php 备份文件。以前这种扫描我根本不知道。
分析流量
发”分析今天的访问日志”,Bot 给完整报告:访问来源、404 错误、Pretty Links 点击明细、异常 IP。以前得登三个后台。
Bot 比你想象的更聪明
部署完后第一次收到 site-monitor 的检查报告,Bot 不仅报了 HTTP 状态码,还主动提醒我:
⚠️ 注意:两个站点都有 Cloudflare 防护,拦截不带浏览器 User-Agent 的请求。
建议在定期检查脚本中添加 -A 参数,否则裸 curl 会误报 403。
Agent 自己发现了监控命令的缺陷并提出改进方案——这是 LLM 驱动的 Agent 比普通 cron 脚本强的地方。它不只是执行命令,还会分析结果、提出建议。于是我把 curl 命令改成了 `curl -A Mozilla/5.0`,之后的检查再也没有误报。
想知道什么就问什么
“列出最近五篇发布的文章”、”nginx 错误日志有什么异常”、”Redis 缓存命中率”——想到什么问什么。
六、成本
| 项目 | 费用 |
|---|---|
| VPS(已有) | ¥0 增量 |
| DeepSeek API | ~¥2-5/月 |
| Discord Bot | 免费 |
| Hermes Agent | MIT 开源,免费 |
| 合计/月 | ~¥2-5 |
如果你还没有 VPS,或者国内的轻量云因为网络问题拉不到 Discord API,搞一台海外机器是最省心的。Hermes Agent 需要 7×24 稳定连接外网,重启不掉线。我目前跑这套服务用的是 Vultr(按小时计费,折腾坏了随时删机重建,新号有试用金),追求国内直连低延迟的可以选 BandwagonHost。1h1g 基础配置足以跑满整个 Agent 工作流,月费 $6 起。
七、Hermes Agent 部署踩坑速查表
| # | 现象 | 原因 | 解决 |
|---|---|---|---|
| 1 | 安装中途 SSH 断 | 宝塔网页终端超时 | 用 Mac 原生终端 |
| 2 | API 返回 400 | 内置 DeepSeek 适配器不兼容 | 走自定义端点,指定 Base URL |
| 3 | Discord Token 401 | Token 不完整或格式错 | Reset Token,确认三段格式 |
| 4 | Bot 不在服务器 | 没通过 OAuth2 URL 授权加入 | 生成 OAuth2 URL,选 bot 权限 |
| 5 | Bot 在线不读消息 | Message Content Intent 没开 | Developer Portal → 打开 |
| 6 | sudo 找不到 hermes | bin 不在 root PATH | 用 /home/hermes/.local/bin/hermes |
| 7 | cron create 报错 | 参数没用对 | 位置参数,不加 flag |
| 8 | 任务只跑一次 | “30m” 是单次 | 用 “*/30 * * * *” |
| 9 | 手机收不到 | 没加 –deliver discord | 重建加 –deliver discord |
| 10 | 日报没按时推送 | VPS 时区和本地不一致(如 BST vs CST) | 不改系统时区,改 cron 表达式适配 |
八、💡 独家彩蛋:用跨会话记忆格式化 Bot 回复
部署完你会发现 Bot 的输出不太美观——表格挤在一起、代码没高亮、表情时有时无。这是因为 Hermes 默认没针对 Discord 的 Markdown 子集做优化(Discord 不支持 Markdown 表格,只支持粗体、代码块、emoji)。
不用改配置文件。直接在 Discord 里给你 Bot 发一段格式规则,Hermes 会记住:
以后在 Discord 回复我时遵守以下规则:
- 回复简洁,默认不超过 500 字
- 数据表格用 ASCII 格式,别用 Markdown 表格
- 代码块用三个反引号包裹并标注语言
- 关键信息用粗体
- 状态前面加 emoji:✅ ❌ ⚠️ 🟢 🔴
发完这段话,Hermes 的跨会话记忆系统会记住它。之后所有回复都会按这个格式来。不需要编辑配置文件、不需要重启服务——一条消息搞定。
如果你和我一样用了四条定时任务,记得也给定时任务的 prompt 里加上”用 Discord 友好格式输出”的提示。
九、总结
三个小时,十个坑,四条定时任务。这次 Hermes Agent 部署的收获远超预期。
有一个 7×24 在线的 AI 管家和每次打开电脑才用的 AI 助手,是完全不同的体验。Claude Code 依然是主力——写文章、编辑文件、安全审查,在 VS Code 里无缝。但 Hermes Agent 补上了 Claude Code 做不到的:你不在的时候干活,你拿起手机的时候响应。
如果你有闲置内存的 VPS,花一晚上部署。坑我替你踩了。