MeshMonitor:把離網 Mesh 節點狀態收進同一塊儀表板
此專案圍繞「Yeraze/meshmonitor」建置,面向真實業務場景,提供可重複使用、可持續維運的開源實作。
秒懂
- 它是什麼?
- MeshMonitor 是一個用 React、TypeScript 與 Node.js 打造的網頁監控工具,專門彙整 Meshtastic、MeshCore 與 MQTT 節點的狀態。它提供 Docker 與 Helm 兩種部署路徑,並支援 SQLite、PostgreSQL、MySQL 三種資料庫。
- 適合誰用?
- MeshMonitor 適合已經有 Meshtastic 或 MeshCore 節點、需要一個統一網頁介面來觀察離網網路狀態的團隊或個人。它不適合需要即時警報或深度節點管理功能的使用者,因為 README 沒有提及任何告警機制,節點設定仍須回到各節點本身。
- 可以商用嗎?
- 可以。BSD-3-Clause 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 1 天前。
- 用什麼語言寫的?
- 主要是 TypeScript(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。
開源專案深度解析
離網節點散落各處,儀表板是唯一交集
Meshtastic 這類 LoRa 網狀網路,節點分散在戶外、建築物或車輛上,沒有固定 IP,也很少有人會逐一登入每台裝置看狀態。MeshMonitor 把這些節點透過 TCP 或 HTTP 彙整到同一塊網頁儀表板,支援 Meshtastic、MeshCore 與 MQTT 三種來源。它的目標使用者很明確:管理多台節點、需要遠端確認節點是否在線、電池電量或最後一次通訊時間的人。對單一節點使用者來說,這套系統的部署成本可能高於收益,但對十台以上的節點,一個統一視圖的價值就浮現了。README 沒有提到任何即時警報或通知功能,所以它比較像狀態總覽,而不是故障通報系統。
架構:TypeScript 前後端,資料庫三選一
MeshMonitor 的前端是 React,後端是 Node.js,兩者都用 TypeScript 撰寫。資料庫支援 SQLite、PostgreSQL 與 MySQL,這表示從輕量單機到多人團隊都能找到對應的部署規模。SQLite 適合測試或小型部署,PostgreSQL 則適合需要並發讀寫的正式環境。資料流的方向是:節點透過 TCP 或 HTTP 把狀態送進後端,後端寫入資料庫,前端再從資料庫讀取並渲染成儀表板。README 沒有說明輪詢或推送的細節,但從環境變數 MESHTASTIC_NODE_IP 來看,系統會主動連線到指定的節點 IP。這個架構的優點是介面與邏輯分離,缺點是如果節點本身不支援對外連線,你就得自己架橋接層。
60 秒啟動:Docker Compose 與 Helm 兩條路
README 提供一個完整的 Docker Compose 範例,只要把 MESHTASTIC_NODE_IP 設成你的節點 IP,然後 docker compose up -d,瀏覽器打開 http://localhost:8080 就能看到登入頁。預設帳號是 admin,密碼是 changeme,第一次登入後必須改掉。對 Kubernetes 使用者,官方提供 Helm chart,指令是 helm repo add meshmonitor https://meshmonitor.org/charts,接著 helm install meshmonitor meshmonitor/meshmonitor -f custom-values.yaml。custom-values.yaml 裡至少要設定 env.meshtasticNodeIp 與 env.meshtasticUseTls。這兩個部署方式都要求你用環境變數來設定來源,而不是在網頁上直接輸入節點位址。首次啟動時,MESHTASTIC_NODE_IP 只會種下第一個來源,之後的來源要從 Dashboard 的 Sources 頁面管理。
代理認證:SSO 整合的甜頭與陷阱
MeshMonitor 支援透過反向代理的標頭來做認證,相容 Cloudflare Access、oauth2-proxy、Authelia 與 Traefik ForwardAuth。啟用方式是設 PROXY_AUTH_ENABLED=true 與 PROXY_AUTH_AUTO_PROVISION=true,管理員偵測則靠 PROXY_AUTH_ADMIN_GROUPS 或 PROXY_AUTH_ADMIN_EMAILS。這裡有個關鍵前提:MeshMonitor 不能直接對外暴露,必須躲在代理後面,而且 TRUST_PROXY 必須設為 1,否則用戶端 IP、速率限制與稽核日誌都會顯示代理的 IP。v4.13 之後 TRUST_PROXY 預設是 false,這代表很多人升級後會被這個設定絆倒。另一個陷阱是資料庫不強制 email 唯一,如果兩個使用者共用同一個 email,系統會取第一個比對到的。這在 SSO 環境裡很容易發生,因為 IdP 可能允許同一個 email 綁多個帳號。
JWT 群組正規化:處理 IdP 的格式差異
Cloudflare Access 的 JWT 只包含精簡的 identity,例如 email、aud、iss、sub,自訂 OIDC 宣告不一定會出現。如果 PROXY_AUTH_JWT_GROUPS_CLAIM 指向的欄位不存在,MeshMonitor 就會看到空的群組,導致群組型管理員永遠無法觸發。README 建議用 jwt.io 解碼實際請求的 JWT,確認群組宣告的形狀。它還處理了三種群組格式:字串陣列、單一字串、以及帶有 name 屬性的角色物件。這表示 MeshMonitor 的開發者實際遇過 Auth0 的 Post-Login Actions 會輸出角色物件,而不是純字串。這個正規化邏輯很實用,但同時也說明一件事:SSO 整合不是設定完就結束,你必須先確認 IdP 吐出來的 token 內容,否則管理員權限會靜默失效。
雙層群組閘道:代理層之外的第二道門
PROXY_AUTH_NORMAL_USER_GROUPS 提供一個應用層的群組檢查,作為反向代理 URL 層級存取控制之外的第二道閘門。這個設計的用意是,即使代理層允許某個路徑,MeshMonitor 自己還是會檢查使用者的群組是否在允許清單內。兩層模型的好處是防禦縱深,壞處是設定複雜度倍增。你必須同時協調代理的規則與應用程式的環境變數,任何一層沒對齊,使用者就會被卡在登入之外。README 沒有列出這個變數的預設值,但從 PROXY_AUTH_NORMAL_USER_GROUPS 的註解「empty = all allowed」來看,預設是放行所有人。如果你的團隊沒有明確的群組階層,這層閘道可能只是多餘的設定負擔。
限制與替代方案:不是所有 Mesh 環境都適用
MeshMonitor 的明顯限制是它依賴節點能透過 TCP 或 HTTP 被連線。如果你的節點只支援 LoRa 廣播,沒有 IP 介面,這套工具就派不上用場。另外,README 完全沒有提到節點韌體更新、頻道設定或訊息收發功能,它純粹是監控,不是管理。替代方案方面,Meshtastic 官方有自家的 Web UI 與手機 App,可以直接連單一節點,但缺乏多來源彙整。另一類替代是通用的網路監控工具,例如 Prometheus 搭配 node_exporter,但你需要自己寫 exporter 來轉換 Meshtastic 的協定。MeshMonitor 的差異在於它原生支援 Meshtastic 與 MeshCore 的資料格式,不用自己解析封包。如果你的環境只有單一節點,官方工具更簡單;如果有多種協定混雜,MeshMonitor 的單一儀表板就值得考慮。
維護成本與授權:BSD-3-Clause 下的自由度
MeshMonitor 採用 BSD-3-Clause 授權,這表示你可以自由使用、修改與再散佈,只要保留版權聲明。對商業團隊來說,這比 GPL 類授權更友善,因為你不需要開源自己的衍生程式碼。維護成本方面,專案近期釋出 v4.15.2-rc6,代表開發仍持續進行,但 release 帶有 rc 後綴,表示穩定版可能還沒跟上。升級時要注意 TRUST_PROXY 預設值的變更,這是 v4.13 之後的行為改變,升級前必須檢查代理設定。另外,代理認證的 JWT 格式會隨 IdP 調整而改變,你可能需要定期用 jwt.io 驗證 token 內容。整體來說,這是一個維護活躍、授權寬鬆的專案,但它的設定面偏向有 DevOps 經驗的使用者,而非純節點操作者。
編輯結論
MeshMonitor 適合已經有 Meshtastic 或 MeshCore 節點、需要一個統一網頁介面來觀察離網網路狀態的團隊或個人。它不適合需要即時警報或深度節點管理功能的使用者,因為 README 沒有提及任何告警機制,節點設定仍須回到各節點本身。採用前應先確認你的節點是否支援 TCP 或 HTTP 介面,並檢查 MQTT broker 的憑證與 topic 格式是否符合文件。若你只跑單一 Meshtastic 節點,官方 Web UI 或 Meshtastic 自家的 App 可能更輕量。若需要多站點彙整與角色權限控管,MeshMonitor 的代理認證與群組閘道設計就值得投入。
社群筆記