背景
DeepGraph Web Dashboard 默认只监听本机 127.0.0.1:8080(或 localhost:8080),外网无法直接访问。当前部署在服务器/内网环境时,需要手动配置内网穿透才能从外部浏览器打开。
本 issue 仅关注「服务如何被外网访问」,不涉及 Dashboard UI 样式或在前端展示 tunnel URL。
现状
已有 shell 脚本方案,但未产品化:
| 文件 |
作用 |
start_background.sh |
screen 启动 web + cloudflared tunnel + processor |
scripts/run_tunnel_forever.sh |
cloudflared 崩溃后自动重启 |
scripts/keep_deepgraph_alive.sh |
检测 web/tunnel 进程,缺失则重启 |
status_background.sh |
从 log 解析当前公网 URL |
stop_background.sh |
停止 tunnel 与 web |
当前穿透方式:
cloudflared tunnel --url http://127.0.0.1:8080
# 生成临时地址如 https://xxxx.trycloudflare.com
文档见 SYSTEM.md、HANDOFF.md。
问题
- 无开箱即用:
python main.py 只起 Flask,不会自动建立外网通道;用户需另开终端跑 cloudflared
- URL 不稳定:Quick Tunnel 重启后域名可能变化,需 grep 日志获取新地址
- 路径硬编码:脚本中
ROOT="/home/billion-token/Deepgraph"、CF_BIN="/home/billion-token/bin/cloudflared" 换机器即失效
- 进程管理分散:web / tunnel / main processor 三个 screen 会话,缺乏统一启动入口
- 方案单一:只验证了 cloudflared Quick Tunnel,未支持 Named Tunnel(固定域名)、frp、ngrok 等常见方案
- 安全空白:穿透后 Dashboard 无鉴权,外网任何人可访问内部 research 数据
期望能力
P0 — 最小可用
P1 — 稳定与安全
P2 — 扩展
非目标(本 issue 不做)
- Dashboard 顶部展示/复制公网链接(属 UI issue)
- SSE、PDF 大文件传输优化(可另开 issue)
- 修改 Flask 业务 API
验收标准
- 在新机器上按 README 配置后,无需 SSH 手动 grep 日志,即可获得可访问的 HTTPS 公网 URL
- cloudflared 意外退出后 30s 内自动恢复穿透
- 关闭
--expose 时行为与现在完全一致(仅 localhost)
- (P1)Named Tunnel 模式下 URL 固定不变
相关文件
main.py
config.py
start_background.sh, stop_background.sh, status_background.sh
scripts/run_tunnel_forever.sh, scripts/keep_deepgraph_alive.sh
背景
DeepGraph Web Dashboard 默认只监听本机
127.0.0.1:8080(或localhost:8080),外网无法直接访问。当前部署在服务器/内网环境时,需要手动配置内网穿透才能从外部浏览器打开。本 issue 仅关注「服务如何被外网访问」,不涉及 Dashboard UI 样式或在前端展示 tunnel URL。
现状
已有 shell 脚本方案,但未产品化:
start_background.shscripts/run_tunnel_forever.shscripts/keep_deepgraph_alive.shstatus_background.shstop_background.sh当前穿透方式:
cloudflared tunnel --url http://127.0.0.1:8080 # 生成临时地址如 https://xxxx.trycloudflare.com文档见
SYSTEM.md、HANDOFF.md。问题
python main.py只起 Flask,不会自动建立外网通道;用户需另开终端跑 cloudflaredROOT="/home/billion-token/Deepgraph"、CF_BIN="/home/billion-token/bin/cloudflared"换机器即失效期望能力
P0 — 最小可用
python main.py --expose # 或 ./scripts/start_with_tunnel.shlogs/tunnel-url.txt)run_tunnel_forever.sh)config.py或环境变量,去除硬编码路径:P1 — 稳定与安全
P2 — 扩展
docker compose --profile expose up/api/health供外部 monitor 探测 tunnel 是否正常非目标(本 issue 不做)
验收标准
--expose时行为与现在完全一致(仅 localhost)相关文件
main.pyconfig.pystart_background.sh,stop_background.sh,status_background.shscripts/run_tunnel_forever.sh,scripts/keep_deepgraph_alive.sh