RETURN_TO_INDEX

RESEARCH_ENTRY // 工程实践

将 Hermes Agent 部署到阿里云并接入飞书

在阿里云 ECS 上安装 Hermes Agent,通过 WebSocket 长连接接入飞书,并使用 systemd 保持网关长期运行。

Hermes Agent 是 Nous Research 开源的个人 AI Agent,可以调用模型与工具,也可以通过消息网关接入飞书。把它部署到阿里云 ECS 后,即使本地电脑关机,仍能在飞书私聊或群聊中使用。

本文采用官方推荐的 WebSocket 长连接:Hermes 从服务器主动连接飞书,不需要域名、HTTPS 证书、Nginx 或公网 Webhook 端口,特别适合个人服务器。

最终架构

飞书客户端
   │ 消息事件

飞书开放平台
   ▲ WebSocket 长连接(服务器主动建立)

阿里云 ECS ── Hermes Gateway ── LLM API / Tools

服务器只需要访问公网 443。入方向通常只保留用于运维的 SSH 22 端口,并限制为自己的固定公网 IP。

一、准备阿里云 ECS

个人使用建议从 2 核 2 GB、40 GB 系统盘起步,系统选择 Ubuntu 24.04 LTS。Hermes 本身不在服务器本地运行大模型,主要资源消耗来自 Python 环境、工具和并发会话;如果要运行浏览器或多个 MCP 服务,应增加内存。

安全组建议:

从本机连接服务器:

ssh <用户>@<ECS公网IP>

首次连接要核对主机指纹。推荐使用 SSH 密钥而不是密码,并及时安装系统安全更新。

二、准备普通运行用户

不要让拥有工具执行能力的 Agent 长期以 root 身份运行。建议直接使用创建 ECS 时配置的普通运维用户(例如 ecs-user),该用户应能通过 sudo 完成系统维护。Hermes 的配置、记忆和服务都将归属于当前用户。

先安装基础依赖:

sudo apt update
sudo apt install -y curl git ca-certificates build-essential

确认当前不是 root:

whoami

如果实例目前只能使用 root 登录,应先按照阿里云的账户与 SSH 指南创建普通用户、配置密钥和 sudo 权限,再继续安装。不要把 Hermes 安装在 root 的主目录后又切换用户运行,否则配置路径和 systemd 服务会互相错位。

三、安装与初始化 Hermes

使用官方安装脚本:

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
source ~/.bashrc
hermes --version
hermes doctor

安装脚本会管理 Hermes 自己的运行环境。不要在同一个目录里再手动创建一套不受管理的虚拟环境,否则更新和 systemd 服务可能引用到不同的 Python。

运行初始化向导:

hermes setup

根据提示选择 LLM 供应商、模型并填写 API Key。先在终端验证基础对话:

hermes chat -q "只回复:Hermes 服务正常"

如果这里失败,先处理模型 Key、余额或服务器出网问题,不要急着配置飞书。飞书网关最终仍要调用同一套模型配置。

四、创建飞书机器人

最简单的方式是运行:

hermes gateway setup

选择 Feishu / Lark。当前 Hermes 支持扫码创建应用:用飞书手机客户端扫描终端显示的二维码,Hermes 会自动创建机器人、申请所需权限并保存凭据。如果当前租户不允许自动创建,向导会回退到手动输入 App ID 和 App Secret。

手动创建方式

  1. 打开飞书开放平台,创建企业自建应用。
  2. 在“凭证与基础信息”复制 App ID 和 App Secret。
  3. 添加“机器人”应用能力。
  4. 在权限管理中添加消息读取、机器人发送、资源访问和群信息等权限。
  5. 在事件与回调中选择“使用长连接接收事件”,订阅消息接收事件。
  6. 创建版本并发布应用,确保当前测试用户在可用范围内。

Hermes 官方列出的核心权限包括:

实际控制台可能根据功能拆分更多细粒度权限,应以 hermes gateway setup 的提示和飞书审核结果为准。

五、确认 Hermes 飞书配置

交互向导会把配置保存到 ~/.hermes/。手动配置时,在 ~/.hermes/.env 中加入:

FEISHU_APP_ID=cli_xxxxxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxxxx
FEISHU_DOMAIN=feishu
FEISHU_CONNECTION_MODE=websocket

# 生产环境强烈建议设置
FEISHU_ALLOWED_USERS=ou_xxxxxxxxxxxxx

飞书国内版使用 FEISHU_DOMAIN=feishu,Lark 国际版使用 lark。不要把 App Secret 上传到 Git 仓库,并限制配置文件权限:

chmod 600 ~/.hermes/.env

FEISHU_ALLOWED_USERS 填写允许使用机器人的飞书 Open ID,多个值用英文逗号分隔。测试阶段也不要把机器人开放给整个组织;可以先把应用可用范围限制为自己,确认 Open ID 后立即配置白名单。

六、前台启动并联调

先在 SSH 终端以前台方式启动:

hermes gateway

看到飞书连接成功后,在飞书里私聊机器人。私聊消息会直接触发回复;在群聊中默认需要 @机器人。如果需要把当前会话设为定时任务和通知的默认投递位置,在聊天中发送:

/set-home

前台联调通过后按 Ctrl+C 停止,再安装后台服务。

七、使用 systemd 长期运行

阿里云这类无头服务器推荐安装 system 级服务,它不依赖 SSH 登录会话:

sudo hermes gateway install --system
sudo hermes gateway start --system
sudo hermes gateway status --system

实时查看日志:

sudo journalctl -u hermes-gateway -f

如果选择普通用户服务,则必须启用 linger,否则退出 SSH 后用户级 systemd 可能停止:

hermes gateway install
sudo loginctl enable-linger "$USER"
hermes gateway start
journalctl --user -u hermes-gateway -f

服务器只保留一种服务模式即可,不要同时启动 user 与 system 两套网关,否则可能重复消费事件或让状态命令指向错误实例。

八、常见问题

飞书中没有任何回复

依次检查机器人能力是否启用、应用是否已经发布、当前用户是否在可用范围、消息事件是否订阅,以及 Gateway 日志中是否出现 WebSocket 连接成功。群聊必须先 @机器人

能收到消息但模型不回答

运行 hermes doctor 和终端测试命令,检查模型 API Key、余额、区域网络与 DNS。飞书连接成功只代表消息已经到达 Hermes,不代表上游模型可用。

日志提示 App ID 或 App Secret 无效

确认复制的是同一个应用的凭证,FEISHU_DOMAIN 与国内飞书/Lark 匹配。修改 .env 后重启 Gateway。

退出 SSH 后机器人离线

说明仍在前台运行,或使用了未开启 linger 的用户服务。ECS 推荐使用 sudo hermes gateway install --system

WebSocket 依赖缺失

先运行 hermes updatehermes doctor,再重新执行 hermes gateway setup。不要直接向系统 Python 随意安装包,以免与 Hermes 管理的环境分离。

九、日常维护与安全

WebSocket 模式把部署复杂度降得很低:服务器负责稳定运行,飞书负责消息入口,Hermes Gateway 负责把两端连接起来。真正需要长期关注的不是开放更多端口,而是密钥、用户白名单、工具权限和服务日志。

参考资料