如何用 3 个容器和 5 条命令快速完成 Hermes WebUI 多容器部署:Agent + WebUI + Dashboard 教程
【免费下载链接】hermes-webuiHermes WebUI: The best way to use Hermes Agent from the web or from your phone!项目地址: https://gitcode.com/GitHub_Trending/he/hermes-webui
Hermes WebUI 是 Hermes Agent 的浏览器端界面,让你在网页或手机上直接指挥自己的智能体。多容器部署把 Agent、WebUI、Dashboard 拆进三个独立容器,各自升级互不牵连,坏了只需重启那一个。照着这篇走一遍,用 docker compose 一键部署后,你会拿到一个开箱即用的聊天界面加一个资源监控面板。
一图看懂:三个容器各管什么
容器之间通过 Docker 网络互访,并共享同一个hermes-home命名卷,所以会话、配置、技能在三处看到的是一致的。
| 容器 | 职责 | 对外端口 |
|---|---|---|
hermes-agent | 大脑:跑 gateway,负责 API、定时任务、消息通道 | 8642(默认仅本机回环) |
hermes-webui | 脸面:你日常打开的网页聊天界面 | 8787 |
hermes-dashboard | 体检室:看会话数、Token 消耗、CPU/内存/磁盘 | 9119 |
动手前检查清单:30 秒确认环境
- Docker Engine 20.10.0 及以上
- Docker Compose 2.0.0 及以上(终端里能敲出
docker compose) - 至少 4GB 空闲内存(agent 默认上限 4G)
- 至少 10GB 磁盘空间(镜像 + 两个命名卷)
- 网络通畅,能拉取
nousresearch/hermes-agent与ghcr.io/nesquena/hermes-webui镜像
确认无误后,克隆仓库并进入目录:
git clone https://gitcode.com/GitHub_Trending/he/hermes-webui cd hermes-webui第一步:改配置——三容器编排文件里真正重要的几行
三容器方案由 docker-compose.three-container.yml 定义,全部细节不用逐行读,抓住这几处即可:
services: hermes-agent: command: gateway run ports: - "127.0.0.1:8642:8642" # 默认只绑定本机,远程访问需额外配置 volumes: - hermes-home:/home/hermes/.hermes # 共享状态卷 - hermes-agent-src:/opt/hermes # 源码卷,WebUI 启动时读它装依赖 hermes-dashboard: command: dashboard --host 0.0.0.0 --insecure hermes-webui: ports: - "127.0.0.1:8787:8787" volumes: - ${HERMES_WORKSPACE:-${HOME}/workspace}:/workspace # 工作区目录 # 其余配置略两个默认行为值得知道:三个端口都绑在127.0.0.1,即只允许本机访问;工作区默认指向${HOME}/workspace,想换路径不用改 YAML,后面会用环境变量解决。
第二步:一键启动三容器
在仓库根目录执行:
docker compose -f docker-compose.three-container.yml up -d首次运行会自动拉取镜像,耗时取决于带宽。三个容器都进入 Up 状态后,WebUI 会在启动时从共享源码卷安装 Agent 的 Python 依赖,首次启动稍慢属正常现象。
第三步:打开浏览器看结果
- 聊天界面:http://localhost:8787
- 监控面板:http://localhost:9119
部署后验证:两个地址 + 一条自检命令
打开 Dashboard 后进入 Insights 页,"System health" 区块会实时显示 CPU、RAM、磁盘占用,能看到数字就说明 agent 到 dashboard 的健康链路是通的:
再用一条命令确认 WebUI 没有异常日志:
docker logs hermes-webui --tail 50想排查 agent 侧或定时任务,把容器名换成hermes-agent或hermes-dashboard即可。Dashboard 自带日志面板,支持自动刷新与整页复制:
进阶玩法:工作目录、UID/GID 与 5 分钟配好访问密码
三件事都通过.env文件完成,不用动 YAML。在仓库根目录追加三行后重建容器即可生效:
echo "HERMES_WORKSPACE=/path/to/your/project" >> .env echo "UID=$(id -u)" >> .env echo "GID=$(id -g)" >> .env echo "HERMES_WEBUI_PASSWORD=换一个强密码" >> .envHERMES_WORKSPACE决定 WebUI 里工作区面板看到哪个目录,改前确认该目录存在;UID/GID让容器内进程以你本机的用户身份写文件,macOS 用户注意 UID 从 501 起步,不是 1000;HERMES_WEBUI_PASSWORD一旦你把 8787 端口暴露到0.0.0.0供远程访问,它就是必选项。
追加配置后执行一次重建让环境变量注入:
docker compose -f docker-compose.three-container.yml up -d踩坑速查:三类高频问题一次讲清
| 现象 | 原因 | 解法 |
|---|---|---|
容器里报Permission denied或PermissionError | 绑定挂载目录的属主与容器内 UID 不一致 | 按上文把id -u/id -g写入.env;或干脆沿用默认的命名卷,绕开宿主机权限 |
| WebUI 顶部提示 "Gateway endpoint not reachable" | 8642 端口未监听——agent 要求API_SERVER_KEY不少于 16 位才会开启该端口 | 在.env里加一行API_SERVER_KEY=<16位以上密钥>后重建容器 |
| 服务起不来,报端口占用 | 8787/9119 已被其他程序占用 | 改宿主机一侧映射,如"127.0.0.1:18787:8787",然后按新端口访问 |
| 容器运行缓慢或 OOM 退出 | 宿主资源被抢占,超出deploy.resources.limits上限 | 调大 YAML 中对应服务的memory/cpus限制,或关掉其他吃内存的容器 |
升级与备份:各备一段命令
升级时最容易踩的坑是:hermes-agent-src卷只在首次up时从镜像初始化,之后 Docker 会一直复用它,导致docker pull到的新镜像代码被旧卷"挡住"。所以升级要先删这个卷(hermes-home卷存着你的会话与配置,千万别删):
docker compose -f docker-compose.three-container.yml down docker volume rm hermes-webui_hermes-agent-src docker compose -f docker-compose.three-container.yml pull docker compose -f docker-compose.three-container.yml up -d注意卷名里的hermes-webui是 Compose 项目名(默认取父目录名),不确定时用docker volume ls核对。
备份只关心hermes-home这一个卷,用一次性容器打包即可:
docker run --rm -v hermes-webui_hermes-home:/source -v $(pwd):/backup alpine tar -czf /backup/hermes-home-backup.tar.gz -C /source .到这里,你的 Hermes Agent 已经以三容器形态完整跑起来了:聊天在 8787,体检在 9119,状态都沉淀在共享卷里,随时可以升级或整体搬迁。
参考文档:docker-compose.three-container.yml、docs/docker.md、ARCHITECTURE.md
【免费下载链接】hermes-webuiHermes WebUI: The best way to use Hermes Agent from the web or from your phone!项目地址: https://gitcode.com/GitHub_Trending/he/hermes-webui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考