基于Cloudflare Tunnel的Hermes Agent Dashboard面板安全公网部署实践

前言:前段时间写了一篇《手把手教你搭建Hermes Agent并且配置微信和TG通知渠道完善日常工作流》的技术分享。最近我习惯用 Hermes 的多 Agent 配合Hermes Kanban推进工作,Hermes Dashboard支持拖拽分配任务与自动调配,成了日常各类工作的调度中心。面板默认只监听本机 9119,不同设备访问不便,如果暴露公网不安全,如果通过SSH本地连接转发那么在不同设备访问不便。本文记录用 Cloudflare Tunnel 与 Access 实现安全公网访问的完整方案:零入站端口、自动 HTTPS、邮箱白名单安全认证。

背景:为什么要把 Dashboard 暴露到公网

最近一段时间,我的工作流有明显变化:更依赖 Hermes 的多 Agent 协作,并用 Kanban 看板把任务串起来。

大致是这样用的:

  • 多个 Agent 各司其职(调研、实现、验证等),由 Hermes 统一调度;
  • Kanban 负责可视化:待办、进行中、阻塞、完成,一眼看清全局;
  • Hermes Web Dashboard (本地默认 9119 端口)把会话、模型、定时任务、技能等集中管理。

对我来说,Dashboard 不只是「看一眼状态」的页面,而是操作台 :在看板上拖拽 就能做任务分配,配合 Hermes 的调度能力还能做自动调配------比纯 CLI 直观得多,也更适合多 Agent 并行时的日常指挥。

问题是:Dashboard 默认只监听 localhost ,人不在 VPS 旁时,手机、笔记本都访问不到。传统做法要开端口、Nginx、证书、认证,维护成本高。我需要的是:偶尔从外网安全打开这块看板,而不是再搭一套公网架构。

当本地服务已经是日常中枢(而不只是调试页)时,「安全公网可达」就变成刚需;Cloudflare Tunnel + Access 适合这种「轻量、个人、要强认证」的场景。

一、方案概述与流量路径

目标:在不开放任何入站端口不部署 Nginx 的前提下,通过 HTTPS 访问 Dashboard,并限制只有本人能登录。

流量路径:

arduino 复制代码
用户浏览器
  → Cloudflare Edge(HTTPS + Access 认证)
    → Cloudflare Tunnel(QUIC 加密隧道)
      → 服务器 cloudflared(本地进程)
        → http://localhost:9119(Hermes Dashboard)
对比项 传统公网暴露 本方案
防火墙 需开放端口 零入站端口
反向代理 通常需要 Nginx/Caddy 不需要
TLS 证书 自行申请与续期 Edge 自动 HTTPS
访问控制 自装 Basic Auth 等 Cloudflare Access 策略

本质是把「公网访问我的端口」改为「本机进程主动向外建立隧道」,对 NAT、安全组、家庭宽带都更友好。

二、环境说明

以下为本次实践使用的配置

项目 说明
操作系统 Debian 13.x(x64)
域名 已接入 Cloudflare 的自有域名
子域名 hermes.<你的域名>(示例)
Dashboard Hermes,localhost:9119
隧道组件 cloudflared(systemd 托管)

三、安装 cloudflared

可以直接让hermes安装,明确告知你要使用Cloudflare Tunnel来内网穿透VPS的指定端口服务

ruby 复制代码
curl -fsSL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 \
  -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared
 
cloudflared --version

四、创建 Cloudflare Tunnel

在控制台创建,SSH 环境不宜依赖 cloudflared tunnel login 弹浏览器,callback 经常失败。建议在控制台创建 Tunnel 后,用 token 安装服务。

操作入口:

one.dash.cloudflare.com/

路径:Networks → Tunnels → Create a tunnel ,类型选 Cloudflared ,命名(如 hermes-dashboard),安装方式选 Command line ,复制 token给AI注入。

在服务器执行(可以直接让AI来做):

bash 复制代码
sudo cloudflared service install <你的-token>
sudo systemctl start cloudflared
sudo systemctl enable cloudflared

五、启动 Hermes Dashboard

Tunnel 转发时,HTTP 请求的 Host 为公网域名,而非 localhost。Hermes 默认仅接受本机 Host,未调整时易出现 502

css 复制代码
hermes dashboard --stop
 
hermes dashboard --host 0.0.0.0 --insecure --no-open

参数说明:

  • --host 0.0.0.0:监听所有网卡(默认仅 127.0.0.1
  • --insecure:允许非 localhost 的 Host(经 Tunnel 访问时必需)
  • --no-open:服务器上不自动打开浏览器

日常重启可记一条:

css 复制代码
hermes dashboard --stop && hermes dashboard --host 0.0.0.0 --insecure --no-open

验证 cloudflared:

lua 复制代码
sudo systemctl status cloudflared --no-pager

正常应看到 Active: active (running)Registered tunnel connection

六、配置 Cloudflare Access(访问控制)

隧道建立后,域名对公网可达,必须增加认证层。

操作入口:

one.dash.cloudflare.com/

路径:Zero Trust → Access → Applications → Add an application → Self-hosted

建议配置:

  • Application name:Hermes Dashboard(自定)
  • Application domainhermes.<你的域名>
  • Session duration:24 小时(可按需调整)
  • Policy :Action 选 Allow;Include 选 Emails,仅填写本人邮箱

效果:访问 https://hermes.<你的域名> 时先出现 Cloudflare 登录页,通过策略后才进入 Dashboard。

访问域名出现Cloudflare的鉴权页面,上述就是Cloudfalre Access生效的情况


搭建这个环境主要是更加安全便捷访问Hermes AgentDashboard ,最快捷的搭建方式就是直接复制文章全文给Hermes让他指导部署即可。

Hermes Agent 的理念和我对Agent多工作流编排的期望完全一致,后续会深入研究Hermes的玩法及其源码层面上的设计。

相关推荐
魏祖潇11 小时前
RAG 的关键从来不是向量——是你能不能把对的内容捞出来
人工智能
web_Leon11 小时前
提示词工程已死?Loop Engineering 三步法,让你的 AI 效率暴增 10 倍
人工智能·ai编程
半个落月11 小时前
为什么大模型“记不住”你?从一次 API 调用讲透 LLM 的无状态、上下文与对话历史
人工智能
血小溅11 小时前
Skill 脚本语言选型:Python、Node.js、Shell 到底怎么选?
人工智能·后端
ZhengEnCi11 小时前
09d-斯坦福 CS336 作业三:缩放定律(Scaling Laws)
人工智能
JieE21211 小时前
从"无状态"到"懂你":深入理解 LLM 对话的本质,以及 Prompt/Context/Loop 三层工程进化之路
人工智能·llm·ai编程
稚雪九月11 小时前
永久记忆,丰富情感,Atrium AI框架:给AI一颗真正的心
人工智能
小鼻子的猫11 小时前
万字长文讲透 AI Agent 架构设计:从 ReAct 到多 Agent 协作,附完整 Python 代码
人工智能
Hector_zh11 小时前
实战·第八篇:当模型陷入死循环——FACA破解JSON生成的架构陷阱
人工智能·agent·vibecoding
魏祖潇11 小时前
AI 能记住了,但能自己干活吗?——看懂执行系统,你就知道它怎么完成复杂任务
人工智能·ai编程