dsh-tunnel-preview:用 Cloudflare 隧道把容器端口變成公網 HTTPS 預覽

前言

在 DeepSeek Harness(DSH)裏跑前端 dev server、臨時 Web 服務或需要 HMR 的場景時,常見做法是手動改 Cloudflare 隧道配置、寫腳本登記端口,或把整臺機器暴露出去。步驟多、容易和 agent 工作流脫節,註銷不及時還會留下公網入口。

下面介紹社區插件 dsh-tunnel-preview(維護者 SOVLOOKUP,分類:聯網工具)。它複用已有 Cloudflare 命名隧道,把容器內正在監聽的端口登記爲 https://<端口>.<你的域名>,用完可註銷;不新增對外端口,也不依賴人工改隧道配置文件。

這是什麼

dsh-tunnel-preview 是 DSH 插件,當前版本 0.2.0,MIT 許可證,倉庫:SOVLOOKUP/dsh-tunnel-preview。SkillHub 目錄頁:dsh-tunnel-preview(社區目錄,與 DeepSeek / 幻方無官方從屬關係)。

一句話定位:給 agent 一把「開/關公網入口」的鑰匙——登記監聽端口即得公網鏈接,註銷後公網立刻不可達。

核心機制

插件做三件事,彼此配合:

  1. 反代:默認在 127.0.0.1:9999 監聽(配置項 listen 可改),與隧道 config 的 catch-all 對齊;按 Host 中的端口號轉發到 127.0.0.1:<端口>。HTTP 與 WebSocket(含 HMR)同路徑,公網鏈接上熱更新可用。
  2. 登記表:僅登記過的端口會被轉發;狀態落在 stateDir/previews.json,宿主重啓不丟。未登記返回 403,註銷後恢復 403。
  3. 閘門:公網 URL 需帶 ?dp_token=<token> 驗證一次,通過後寫入域級 Cookie,同域下各端口子域後續可免 token。容器內直連 127.0.0.1 不受此限。

預覽地址形如 https://<端口>.<domain>,只支持一級子域(例如 5173.example.com;二級子域需額外 SSL 方案,見 README「已知取捨」)。

Agent 工具與 REST

工具 作用
preview_register({ port, label? }) 建 DNS(API 優先,否則 CLI)並寫入登記表,返回可打開鏈接
preview_unregister({ port }) 移出登記表,公網立刻 403;已綁定 API token 時可刪 DNS
preview_list() 列出登記項:端口、公網地址、本地是否仍在監聽

登記前本地服務必須已在 LISTEN(插件讀 /proc/net/tcp{,6});否則鏈接會 502。順序應是:先起服務,再登記。

DSH Web 還擴展 REST:

  • GET /api/tunnel-preview/services
  • POST /api/tunnel-preview/register(body:{ port, label })
  • POST /api/tunnel-preview/unregister(body:{ port })

右側欄「服務」標籤與會話頂欄「暴露的服務」入口提供卡片列表、監聽狀態、新標籤打開、側欄預覽、複製鏈接、註銷與快速暴露候選端口等操作(細節見 README GUI 一節)。

配置要點

配置定義在 cordis.patch.yml,均有默認值。常用項如下:

鍵 默認 說明
listen 9999 反代監聽,須與隧道 catch-all 一致
domain example.com 子域後綴;設置頁「公網域名」可改,保存立即生效
stateDir $HOME/devpreview token、previews.json 目錄
tunnelName dsh-dev cloudflared tunnel route dns 使用的隧道名
cloudflared $HOME/bin/cloudflared 可執行文件路徑
tunnelConfig $HOME/.cloudflared/config.yml 隧道配置
manageTunnel true 是否託管 cloudflared 進程
manageDns true 登記時是否自動建 CNAME
cloudflareApiToken 空 粘貼即綁定;綁定後可 API 建刪 DNS
dnsOnUnregister delete 註銷時刪或留 DNS(delete / keep)

在 DSH 側欄 → 插件 → tunnel-preview 填寫「公網域名」(不帶 https:// 與端口),保存即可。若 profile 的 cordis.patch.yml 中對 tunnel-preview 寫了整段 config,會以 profile 爲初始覆蓋,之後仍以設置頁保存爲準。

綁定 Cloudflare API Token 時,設置頁提供「直達 Cloudflare 生成 Token」鏈接(預填 Zone DNS Edit 與 Zone Read)。保存後熱更新,不重掛插件;preview_list() 頂部會顯示綁定狀態或失敗原因。未綁定 token 時建記錄可走 cloudflared tunnel route dns,但註銷時默認刪不掉 DNS 記錄(公網是否通仍由登記表決定)。

安裝與啓用

資料中的 SkillHub 目錄標識插件爲 SOVLOOKUP/dsh-tunnel-preview。請在 DSH 插件管理或目錄頁給出的方式安裝,安裝前閱讀倉庫源碼與 MIT 許可證;插件以當前 DSH 進程權限運行,涉及公網入口與 Cloudflare 憑據,安裝前應自行評估風險。

若曾使用舊版 /workspace/devpreview/ 手寫腳本,裝插件前先停舊棧,避免 9999 端口衝突:

/workspace/devpreview/start.sh stop

之後反代與 cloudflared 由插件託管;舊 .token 可繼續複用,已發出的鏈接在遷移說明下仍可沿用。

典型用法

  1. 在容器內啓動 dev server(例如監聽 3000)。
  2. 讓 agent 調用 preview_register({ port: 3000, label: "web" }),或經 REST / GUI 登記。
  3. 用返回鏈接訪問;首次在瀏覽器帶 ?dp_token=<token>(token 位於 stateDir)。
  4. 結束後 preview_unregister({ port: 3000 }),公網入口關閉。

倉庫自測命令:

node --check index.js && node --test test/

適用場景與注意

適合:已有 Cloudflare 命名隧道、需要在 DSH/agent 工作流裏臨時暴露本地 HTTP/WebSocket 服務並可控註銷的開發者。

務必知曉:

  • 這是真實公網 HTTPS 入口;插件 token 主要防「猜鏈接」,若要限制陌生人訪問,應在 Cloudflare Access 等層面加固(README「已知取捨」)。
  • 容器內若啓用 HTTPS_PROXY 且代理攔截 api.cloudflare.com,插件會對 Cloudflare API 嘗試直連重試;DNS 建刪失敗不會阻塞登記表更新,但 GUI/工具輸出會說明記錄是否未刪掉。
  • 禁止登記的端口見配置 deny(含 VNC/調試端口等)。

結尾

dsh-tunnel-preview 把「登記端口 → 公網 HTTPS → 註銷」收成插件與 agent 工具,並附帶 DSH Web 服務側欄,適合在 Harness 裏做可審計的臨時預覽。進一步瞭解配置與 Cloudflare 綁定步驟,見 GitHub README;安裝入口見 SkillHub 目錄頁。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜