服务器 Docker 部署 Hermes Agent → 飞书(零端口暴露)

一、环境准备:Docker 安装与镜像加速

如果你的服务器还没装 Docker,先安装。已装则跳过。

复制代码
# Ubuntu/Debian 安装 Docker
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker

# 验证
docker version

国内服务器必须配置镜像加速,否则拉取官方镜像极慢或失败:

复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.run",
    "https://docker.m.daocloud.io"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

国内可用加速源:docker.1ms.rundocker.xuanyuan.run


二、拉取 Hermes Agent 镜像

复制代码
# 通过国内加速源拉取(推荐)
docker pull docker.1ms.run/nousresearch/hermes-agent:latest

# 验证镜像
docker images | grep hermes-agent

如果加速源失效,可尝试其他镜像站:

复制代码
docker pull docker.xuanyuan.run/nousresearch/hermes-agent:latest

三、创建数据目录并开放权限

这是最关键的一步,很多配置写不进去就是因为权限问题。

复制代码
# 创建持久化目录
sudo mkdir -p /mnt/docker/hermes-agent

# 权限开到最大,确保容器内能读写配置
sudo chmod -R 777 /mnt/docker/hermes-agent

# 清理可能存在的旧容器
docker rm -f hermes-agent 2>/dev/null

四、进入容器进行交互式配置(不开放端口)

核心思路 :用 --entrypoint /bin/bash 绕过默认 entrypoint,手动进入容器内部执行配置,避免 stdin 被错误解析为 chat 消息。

复制代码
docker run -it --name hermes-agent \
  -v /mnt/docker/hermes-agent:/opt/data \
  --entrypoint /bin/bash \
  docker.1ms.run/nousresearch/hermes-agent:latest

进入容器后,依次执行:

复制代码
# 1. 激活虚拟环境
source /opt/hermes/.venv/bin/activate

# 2. 运行配置向导(此时是标准 TUI 交互界面,不会再被当 chat 消息)
hermes setup

五、在配置向导中按顺序填写

5.1 模型配置(LLM Provider)

表格

选项 推荐值 说明
Select Provider OllamaOpenAI-Compatible 自己部署的模型或者第三方
Base URL http://192.168.x.x:11434 你的 Ollama 服务内网地址
Model hermes3:70bqwen2.5:72b 根据你实际部署的模型填写

如果 Ollama 和 Docker 在同一台服务器,可用 http://host.docker.internal:11434(Docker Desktop)或宿主机实际内网 IP。

5.2 消息网关配置(Gateway)

配置完模型后,选择配置消息平台:

hermes setup 的完整流程中一并配置。

选项 推荐值
Select Platform Feishu / Lark

配置完成后,文件会写入:

复制代码
/opt/data/.hermes/.env

因为挂载了 -v /mnt/docker/hermes-agent:/opt/data,所以配置会持久化保存到宿主机,容器删了也不怕。


六、退出容器,转为后台守护运行

配置完成后,在容器内输入 exit 退出。

现在用后台模式 启动,注意:不映射任何端口

复制代码
# 先删除刚才的交互式容器
docker rm -f hermes-agent

# 后台守护运行,零端口暴露
docker run -d \
  --name hermes-agent \
  --restart always \
  -v /mnt/docker/hermes-agent:/opt/data \
  docker.1ms.run/nousresearch/hermes-agent:latest \
  gateway run

关键安全参数说明:

  • 没有 -p 8000:8000 或任何端口映射

  • ✅ 只有 -v 数据卷挂载

  • --restart always 确保服务器重启后自动恢复

  • gateway run 直接启动网关,不再进入交互模式


七、飞书侧配置(两种模式)

模式 A:扫码自动创建(最简单,推荐)

如果你选择了扫码方式,终端会显示一个二维码链接,用手机飞书 App 扫码即可自动创建应用并授权。这是官方推荐的一键方式。

模式 B:手动创建应用(企业环境)
  1. 访问 飞书开放平台 → 开发者后台

  2. 创建企业自建应用 → 输入名称

  3. 添加应用能力 → 选择 机器人

  4. 权限管理中必须添加以下权限:

    • im:message(接收和发送消息)

    • im:message:send_as_bot(以机器人身份发送)

    • contact:contact.base:readonly(读取用户基本信息,必需!

    • im:resource(读取消息中的资源文件)

    • im:chat:readonly(读取群聊信息,可选但建议)

  5. 事件与回调 → 订阅方式选 长连接(对应 WebSocket 模式)

    • 添加事件:im.message.receive_v1
  6. 凭证与基础信息 → 复制 App IDApp Secret

  7. 版本管理与发布 → 创建版本并申请发布(需要管理员审批)


八、首次对话配对授权

配置完成后,在飞书中搜索你的机器人,发送任意消息(如"你好")。

如果是首次连接,可能会收到配对码(pairing code)(扫码连接自动配置不需要配对码),需要在服务器端授权:

复制代码
# 查看容器日志,找到配对码
docker logs -f hermes-agent

# 或者在容器内执行授权
docker exec -it hermes-agent bash
source /opt/hermes/.venv/bin/activate
hermes pairing approve feishu <配对码>

九、验证与运维

查看运行状态
复制代码
# 看日志
docker logs -f hermes-agent

# 成功标志
# [Gateway] feishu gateway connected
查看配置是否持久化
复制代码
cat /mnt/docker/hermes-agent/.hermes/.env
重启/更新
复制代码
# 重启容器
docker restart hermes-agent

# 更新镜像(保留配置)
docker pull docker.1ms.run/nousresearch/hermes-agent:latest
docker rm -f hermes-agent
# 然后用上面的 docker run -d ... 命令重新启动

十、安全加固清单(生产环境)

表格

项目 状态 说明
零端口暴露 -p 参数,服务器不监听任何新端口
出站仅 443 WebSocket 只走 HTTPS/WSS 443 出站
数据持久化 配置保存在宿主机 /mnt/docker/hermes-agent
自动重启 --restart always 保障高可用
权限最小化 ⚠️ 飞书应用权限按需授予,不要全开
白名单控制 可选 FEISHU_ALLOWED_USERS=ou_xxx,ou_yyy 限制可用用户

完整命令速查表

复制代码
# 1. 安装 Docker + 配置镜像加速(见上文)

# 2. 拉取镜像
docker pull docker.1ms.run/nousresearch/hermes-agent:latest

# 3. 准备目录
sudo mkdir -p /mnt/docker/hermes-agent
sudo chmod -R 777 /mnt/docker/hermes-agent

# 4. 交互式配置(进入容器)
docker run -it --name hermes-agent \
  -v /mnt/docker/hermes-agent:/opt/data \
  --entrypoint /bin/bash \
  docker.1ms.run/nousresearch/hermes-agent:latest

# 容器内执行:
source /opt/hermes/.venv/bin/activate
hermes setup
# 按向导配置 Ollama + Feishu WebSocket,保存退出
exit

# 5. 后台运行(零端口)
docker rm -f hermes-agent
docker run -d \
  --name hermes-agent \
  --restart always \
  -v /mnt/docker/hermes-agent:/opt/data \
  docker.1ms.run/nousresearch/hermes-agent:latest \
  gateway run

# 6. 查看日志
docker logs -f hermes-agent

这套流程的核心优势就是服务器侧零暴露 :没有 -p、没有反向代理、没有防火墙入站规则,全靠 WebSocket 主动 outbound 连接飞书,配合你内网的 Ollama 服务,整个链路都在可控范围内。

相关推荐
minji...2 小时前
Linux 网络套接字编程(三)UDP服务器与客户端实现:Windows与Linux通信,新增字典翻译功能的 UDP 通信
linux·服务器·开发语言·网络·windows·算法·udp
艾莉丝努力练剑2 小时前
【Linux网络】计算机网络入门:网络通信——跨主机的进程间通信(IPC)与Socket编程入门
linux·运维·服务器·网络·c++·学习·计算机网络
白豆五2 小时前
使用 Docker 搭建 Maven 私服
docker·容器·maven
七夜zippoe2 小时前
2026年4月横评:远程软件内卷破局!UU 远程凭实力成为远程工具综合首选
运维·服务器·负载均衡·远程·协助
Gauss松鼠会2 小时前
GaussDB(DWS)数据融合:云端GaussDB(DWS)迁移
java·服务器·网络·数据库·性能优化·gaussdb
枫叶落雨2222 小时前
服务器下载两个jdk
linux·运维·服务器
Elivs.Xiang2 小时前
基于docker安装MySQL、RabbitMQ、ElasticSearch、minio
linux·mysql·elasticsearch·docker·rabbitmq
小兔薯了2 小时前
docker
运维·docker·容器
QC班长10 小时前
Maven公司私库配置踩坑点
java·服务器·maven·intellij-idea