本文的目的
通过给服务器上的hermes Agent 添加一个可以远程对话、管理的界面WebUI,实现通过手机和电脑在任何地方安全的使用和管理。
撰写本文的原因
不同于其它Claw 强大的可视化管理,Hermes 没有提供官方的交互管理界面(dashboard太简陋,不算),各种手工修改文件配置的操作,让很多新手没办法直观的配置,体验感直线下降。
本人去年购买了一个优惠的云主机,安装了无UI的Ubuntu V24,近期把Hermes Agent跑了起来,还对接了微信、Deepseek-V4-flash。但烦于每次都要 SSH 上去敲命令,就揣摩着给Hermes 装上WebUI,经过摸索实现了通过 Nginx 反向代理和密码保护,可以在浏览器里远程管理和使用 Hermes Agent,安全又优雅。
实现路径
安装星标 4.3K 的社区版的Hermes-WebUI。官网:
https://github.com/nesquena/hermes-webui
前置条件
• 一台运行 Ubuntu 的服务器(我的版本是ubuntu24.04),拥有 sudo 权限 • 服务器已安装 Hermes Agent(本文不涉及 Hermes 本体的安装) • 已知服务器公网 IP 或已绑定域名(假设:domain.com),服务器开放了公网端口(假如为8080) • 一台本地电脑或手机,做测试
步骤一:服务器上安装 hermes-webui 管理界面
第一步:克隆仓库
1 2 3 cd ~/sudo git clone https://github.com/nesquena/hermes-webui.git hermes-webuicd hermes-webui
第二步:运行引导脚本,安装依赖
项目提供了一个 bootstrap.py 脚本,它会自动创建虚拟环境并安装所有 Python 依赖:
1 python3 bootstrap.py
建议:一般安装hermes后,系统自动安装了python3,上面命令可以直接执行。
这个脚本做了几件事:
• 创建 Python 虚拟环境(venv) • 安装所有 pip 依赖包 • 准备好运行所需的目录结构
整个过程大概一两分钟,取决于你的网络速度。
第三步:启动 WebUI
1 ./start.sh
启动后你会看到类似这样的输出:
1 2 3 [bootstrap] Starting Hermes Web UI on http://127.0.0.1:8787[bootstrap] Web UI is ready: http://localhost:8787[bootstrap] Log file: /home/web/.hermes/webui/bootstrap-8787.log
第四步:确认服务正常运行
1 curl http://localhost:8787
如果返回了 HTML 内容,说明 WebUI 已经跑起来了。
踩坑提醒:如果
./start.sh报权限不足,先执行chmod +x start.sh。如果 8787 端口被占用,可以用ss -tlnp | grep 8787 看看是谁占了,或者直接杀掉:sudo fuser -k 8787/tcp
步骤二:配置 Nginx 反向代理
现在 WebUI 在 8787 端口上跑着,但直接暴露端口号很不安全。我们用 Nginx 做一层反向代理,把内部端口藏起来,对外统一用一个 端口访问(本文使用了8080端口,有条件的最好用80或443)。
2.1 安装 Nginx(如果已经安装,可跳过)
1 2 3 4 sudo apt updatesudo apt install nginx -ysudo systemctl enable nginxsudo systemctl start nginx
我使用的是nginx/1.28.0
2.2 创建站点配置文件(文件路径可能不一样)
1 2 3 sudo vi /etc/nginx/conf.d/hermes-webui.conf 或者:sudo nano /etc/nginx/conf.d/hermes-webui.conf
如果服务器已经存在nginx,在原配置文件上添加下面配置:
写入以下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 server { listen 8080; server_name domain.com; # 替换成你的域名或服务器 IP # 规避跨域访问错误 add_header Access-Control-Allow-Origin "$http_origin" always; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE" always; add_header Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With" always; add_header Access-Control-Allow-Credentials "true" always; if ($request_method = 'OPTIONS') { return 204; } location / { # 反向代理到本机 hermes proxy_pass http://127.0.0.1:8787/; proxy_set_header Host $host; # SSE 流式推送支持(Hermes WebUI 的 Agent 回复需要这个) proxy_buffering off; proxy_cache off; proxy_http_version 1.1; chunked_transfer_encoding off; }}
建议:
proxy_buffering off这行很关键!Hermes WebUI 使用 Server-Sent Events(SSE)做流式输出,如果开了缓冲,你会发现 Agent 的回复是"憋"一会儿才整段弹出来的,体验极差。关掉缓冲后才能看到打字机一样的实时流式效果。
2.3 启用站点并重启 Nginx
1 2 sudo nginx -tsudo systemctl reload nginx 或 sudo nginx -s reload
nginx -t 输出下面内容表明成功:
1 2 3 web@hcss-ecs-4c23:~/hermes-webui$ sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful
现在你可以windows或手机的浏览器上直接用 http://domain.com:8080访问 Hermes WebUI 了。外部用户完全看不到 8787 端口的存在。
提醒:如果你之前装过 Nginx 的默认站点,可能会冲突。你需要使用域名或调整暴露的端口号,并在服务器的防火墙和安全组开放该端口。
步骤三:设置远程访问密码保护
让 WebUI 裸奔在公网上?那可不行。接下来我们给 WebUI 加上密码锁。
密码保存在hermes的环境配置文件 .env 中
第一步:修改hermes配置文件
然后用你喜欢的编辑器打开hermes配置文件,一般是:
1 cd ~/.hermes
1 2 3 sudo nano .env或sudo vi .env
增加一行:
HERMES_WEBUI_PASSWORD=你的密码
保存退出
博主建议:密码别用 123456 之类的弱密码。建议至少 6 位,包含大小写字母、数字和特殊字符。
第二步:重启 hermes gateway 和 WebUI 使配置生效
1 2 3 4 5 6 hermes gateway restart# 先停掉之前的进程sudo fuser -k 8787/tcp# 重新启动(密码已写入 .env)cd ~/hermes-webui./start.sh
踩坑提醒: WebUI 当前在设置-System 中提供了修改密码的界面,但通过测试,没有效果,等待官方更新吧。
步骤四:验证效果
一切配置就绪,现在来验证一下是否正常工作。
4.2 外网访问测试
在本地电脑或手机浏览器打开 http://domain.com:8080:

1. 应该看到:Hermes WebUI 的登录页面或密码输入界面 2. 输入密码后:进入主界面 
3. 测试流式输出:发一条消息给 Agent,确认回复是逐字流式显示的(说明 Nginx 的 SSE 代理配置正确)
4.3 安全检查清单
最后过一遍安全清单:
•8787 端口未对外暴露 •已设置 WebUI 密码保护 •密码强度足够(6 位以上) •Nginx 反代正常工作 •SSE 流式输出正常(Agent 回复实时显示) •(可选)已配置 HTTPS(用 Let's Encrypt 免费证书)
博主建议:生产环境强烈建议加上 HTTPS。可以用 Certbot 一键搞定:
1 2 sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d domain.com
免费、自动续期,三分钟的事。
夜雨聆风