基于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的玩法及其源码层面上的设计。

相关推荐
跨境技工小黎1 小时前
Facebook无法向他人发送消息?2026原因解析与解决思路
人工智能·矩阵
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-05-31
前端·人工智能·经验分享·搜索引擎·chatgpt·html
GIOTTO情1 小时前
智能舆情处置系统技术方案:基于NLP语义算法的全链路风险处置落地
人工智能·算法·自然语言处理
筑梦调音师1 小时前
从知识沉淀到 AI 执行:一次本地知识库工作流的 Harness 实践
人工智能
程序员cxuan1 小时前
MiniMax M3 发布,据说接近 Opus 4.7?真的假的
人工智能·后端·程序员
kcuwu.1 小时前
BERT文本分类完整实战指南
人工智能·分类·bert
ViiTor_AI1 小时前
视频翻译出海完整流程:翻译、克隆原声、对口型怎么做
人工智能
MacroZheng1 小时前
给Claude Code装上这个超酷的状态栏,瞬间高大上了!
java·人工智能·后端
私域合规研究1 小时前
聚焦新消费商业模式 专家研讨会在台州举行
人工智能