基于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 domain :hermes.<你的域名>
  • Session duration:24 小时(可按需调整)
  • Policy :Action 选 Allow;Include 选 Emails,仅填写本人邮箱

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

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


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

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

相关推荐
吴文周7 小时前
让大模型在本地持续进化:YoungAi 如何用 Sidecar 和后训练重新思考本地 AI
人工智能
浪子明X7 小时前
AI 日报自动化:先把事实、时间和引用做成可检查的编辑流水线
运维·人工智能·自动化
aneasystone本尊7 小时前
大模型训练介绍:一个模型是怎么炼成的
人工智能
半甜柠檬7 小时前
WebCodex实战:把ChatGPT网页端接进本地项目
人工智能·ai·chatgpt·开源软件·ai编程
海盗12347 小时前
微软技术日报 2026-10-08:Windows 给智能体立沙箱,Surface 换上 NVIDIA 芯
人工智能·windows·microsoft·机器人·aigc
A.说学逗唱的Coke7 小时前
【人工智能专题】PolarDB 深度解析:存算分离到 AI Lakebase,云原生数据库的架构演进与实战指南
数据库·人工智能·云原生
hzxpaipai7 小时前
AI把网站页面做出来了,谁来负责后台、服务器和正式上线?
运维·服务器·人工智能
牧羊人.3337 小时前
动手学深度学习 06|学习率调整
人工智能·深度学习·学习
四六的六7 小时前
GPT-6 会自己画界面了:从写页面到定规则,前端在 Intelligent UI 时代的新活法
人工智能·个人开发·ai编程·ai大模型·组件库·ai产品·ui界面
承渊政道7 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(开源大模型ChatGLM使用详解)
人工智能·pytorch·开源·llm·chatglm