dsh-cloudflared-manager:在 DSH 裏管理 Cloudflare 隧道與本地服務

前言

在 DeepSeek Harness(DSH)裏跑本地 Web 服務、調試智能體回調時,常見做法是單獨開終端維護 cloudflared、手寫 ingress 與 DNS,再用另一套腳本啓停進程、翻日誌。命令分散、憑據文件權限容易疏忽,排查 502 或 DNS 半同步狀態時也更費時間。下面介紹社區插件 dsh-cloudflared-manager:把 Named 隧道、本地進程和 trycloudflare 快速暴露收進 DSH 右側面板,並暴露統一的 HTTP API,便於在已有 DSH 工作流裏銜接。

這是什麼

dsh-cloudflared-manager 由維護者 96bearli 發佈,在 SkillHub 插件目錄 中歸類爲工作流。它是 DeepSeek Harness 的 npm 插件(當前資料中的版本爲 1.10.1,許可證 MIT),定位是 Cloudflare Tunnel + 本地服務管理器:固定域名 Named 隧道的 ingress 增刪改查與 DNS 同步、本地服務的啓停/日誌/源碼編輯,以及無需 Cloudflare 賬號的臨時公網隧道。

DSH 生態強調「一切皆插件」;SkillHub 等社區目錄獨立於 DeepSeek / 幻方,並非官方應用商店。安裝前建議自行查看 GitHub 源碼與許可證,並記住插件以當前 DSH 進程的用戶與權限運行,會讀寫 API Token、隧道憑證與進程。

核心功能

Named 隧道(固定域名)

  • 在面板裏對 ingress 做增刪改查(hostname → 本地端口),寫入 Cloudflare 並重載隧道配置。
  • 配置 API Token 後,可自動創建/刪除 DNS CNAME;支持多個根域名,按 hostname 後綴匹配 zone(無需手工填 Zone ID;資料說明 zoneId 字段已廢棄)。
  • 一鍵啓停 Named 隧道,可設爲 DSH 啓動時自動拉起。

新增/刪除映射分兩步(先 tunnel ingress,再 DNS),非原子操作;若 Token 缺 DNS 權限,可能出現「隧道里已有映射但域名未解析」或「DNS 殘留 CNAME」——面板會明確報錯,需在 Cloudflare 控制台覈對。

本地服務管理

  • 用 services.json 定義服務:名稱、端口、啓動命令、工作目錄、備註、autoStart 等。
  • 面板內啓動、停止、重啓、tail 日誌;支持在線查看/編輯啓動腳本,保存後重啓生效。
  • 探活:PID 文件、端口探測、進程命令行匹配;支持無端口服務;停止時清理子進程。
  • 點服務名可查看一行備註說明用途。

快速隧道(trycloudflare)

  • 無需 Cloudflare 賬號,可將本地端口暴露到臨時公網 URL。
  • 可選配置 URL 改寫代理前綴:當直連 trycloudflare.com 不可達時,面板可額外給出代理地址(默認關閉)。

HTTP API

插件在 DSH Web 進程上提供 POST /dsh-cf/api,請求體爲 {"method": "...", "args": {...}},覆蓋狀態、Named 隧道、本地服務、源碼、配置、根域名白名單、快速隧道等方法(詳見倉庫 README 方法表)。

安裝與啓用

從 npm 安裝(README 推薦):

dsh plugin --profile web add dsh-cloudflared-manager

裝完重啓 DSH。若 dsh plugin 報 declares no dsh.bundle,說明版本低於 1.2.0,需升級後再試。

從 GitHub 安裝:

dsh plugin --profile web add github:96bearli/dsh-cloudflared-manager

從本地路徑安裝(README 示例,需自行 clone 到本機後替換路徑):

dsh plugin --profile web add /path/to/dsh-plugin-cloudflared-manager

安裝並重啓後,會話頭部會出現「隧道」入口,面板停靠在右側邊欄,含「域名映射」「本地服務」「快速隧道」等頁籤。也可在 DSH 設置 → Cloudflared 隧道頁籤填寫 API Token、Account ID、Tunnel ID 與根域名白名單。

運行目錄默認爲 $DSH_HOME/cloudflared-setup/,可用環境變量 DSH_CF_SETUP 覆蓋。cf_config.json、credentials.json 含密鑰,應設爲 600,不要提交到 git。credentials.json 可在首次啓動時由插件根據 API 自動生成。

典型用法

1. 定義本地服務

編輯運行目錄下的 services.json(或在面板中維護),例如:

[
  {
    "name": "我的 Web 應用",
    "port": 8080,
    "command": "/usr/bin/node /opt/app/server.js",
    "cwd": "/opt/app",
    "autoStart": true,
    "note": "主站,對外 example.com"
  }
]

命令建議寫絕對路徑;新增時若命令裏包含腳本路徑,「源碼」按鈕才便於定位文件。

2. 配置 Cloudflare 憑據

API Token 需包含 Zone DNS Edit、Zone Read、Account Cloudflare Tunnel Edit(生成 credentials.json 時還需 Tunnel Read)。Account ID、Tunnel ID 在控制台對應位置獲取;根域名白名單填根域(如 example.com),不要填子域。面板可對白名單逐項「校驗可用性」。

若公網訪問延遲抖動或超時,可先查 sysctl net.core.rmem_max;偏小可在 cf_config.json 中改用 TCP:

{ "protocol": "http2" }

3. 面板與 API

頭部進入隧道面板:管理 ingress 與 DNS、啓停本地服務、開快速隧道。需要腳本集成時,例如查詢綜合狀態:

curl -s -X POST http://127.0.0.1:3080/dsh-cf/api \
  -H 'Content-Type: application/json' \
  -d '{"method":"cf-status"}'

停止指定服務時參數放在 args 裏:

curl -s -X POST http://127.0.0.1:3080/dsh-cf/api \
  -H 'Content-Type: application/json' \
  -d '{"method":"cf-svc-stop","args":{"name":"我的 Web 應用"}}'

實際端口以本機 DSH Web 監聽爲準,上例中的 3080 僅爲 README 示例。

適用場景與注意

適合誰: 已在 Linux 容器或同類環境中跑 DSH,需要用 Cloudflare Tunnel 把本機服務暴露到固定域名或臨時 URL,並希望在同一界面管理進程與隧道,而不是維護多套 shell 腳本。

環境限制(資料原文): 當前版本僅支持 Linux x64,並按 Docker 容器環境調優;cloudflared 二進制路徑固定爲 @farthershore/cloudflared-linux-x64。未做 macOS / Windows / ARM 分支,在其他平臺安裝可能拿不到可用二進制。日誌與 PID 寫在運行目錄下的 logs/、pids/,適配容器內 /tmp 爲 tmpfs 的場景。

localhost 與 502: 插件會把 ingress 裏的 http://localhost:PORT 改寫成 http://127.0.0.1:PORT,避免 cloudflared 優先連 [::1] 而本地服務只監聽 IPv4 導致 502。確需 IPv6 時可手填 http://[::1]:PORT。

安全與信任: 插件會調用 Cloudflare API、啓動子進程、讀寫敏感配置;安裝前請閱讀 GitHub 倉庫 源碼。本倉庫 README 註明爲精簡版,不含 CF 優選 IP 等擴展能力。

結尾

經過上面的步驟,可以把 Named 隧道、DNS 同步、本地服務生命週期和 trycloudflare 快速暴露收斂到 DSH 側邊欄,減少重複記命令與手工改 YAML 的成本。進一步細節以倉庫 README 爲準。

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

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

小夜