MOOSSin
選單

全部文章 · 開源工具

World Monitor:一個開源的世界情勢儀表板,自架時要想清楚的幾件事

World Monitor 是 AGPL-3.0 授權的地緣情勢儀表板,地圖、時間軸、金融與能源面板都有。自己跑一份時要決定哪些跟雲端綁在一起的模組要換掉、資料從哪裡來、AGPL 的邊界在哪,還有上游每個月幾百個提交要不要跟。

World Monitor 是開源的世界情勢儀表板:一張地圖疊著地震、衝突、航班、船舶等圖層,旁邊是市場、能源、央行政策這類面板,用 TypeScript 寫,前端是 Vite 建置的單頁應用,後端是一組 API 處理函式,資料快取在 Redis。授權是 AGPL-3.0-only。上游同時經營一個有帳號和付費方案的託管版本。我 fork 了一份在本機跑,接自己收的資料,以下是這個過程裡值得知道的事。

執行形式:不一定要 Docker

上游建議的部署是 Docker Compose。如果你的機器不方便跑 Docker,另一條路是把 API 處理函式建置成一個 Node 伺服器,前端建成靜態檔,加一個 Redis REST 代理,讓它們在同一個 Node 程序裡跑,全部只綁本機迴路位址。Redis 那一層任何講 RESP 協定的東西都行,我用的是 Garnet。上游附的 Redis REST 代理需要多裝一個 npm 套件而且監聽所有介面,自己寫一個零依賴、只聽本機、每個請求都要權杖的版本不難。

哪些模組要換掉

上游的產品有登入、帳務、結帳、推播、使用分析、推薦這些跟它的雲端服務綁在一起的模組。自架而且離線的話,這些東西一個都連不到,建置時用同名的空殼取代它們,順便把對上游主機的 preconnect、登入按鈕和付費橫幅拿掉,伺服器端只保留真的會用到的路由。改完之後用幾個關鍵字掃建置產物,確認上游雲端服務的名字出現零次。剩下會連外的只有地圖圖磚和新聞面板直接讀的 RSS。

資料從哪裡來

面板讀的是 Redis 裡特定格式的鍵。上游有自己的抓取腳本,你也可以用自己的資料源照同樣的格式寫進去。我把這段橋接程式放在自己的專案裡而不是 fork 裡,因為 fork 沒有我需要的資料庫用戶端,加進去就要改它的 package.json 和 lockfile,跟進上游時一定衝突。兩邊只靠 Redis 的 HTTP 介面交換資料。

AGPL 的邊界

AGPL 跟 GPL 的差別在第十三條:透過網路提供服務也算散布,使用者有權拿到修改後的原始碼。只在本機迴路位址上自己用,這條實務上不會被觸發;修改後的原始碼完整留在 repository 裡,本來就會。但哪一天要把它放到任何公開網址,就必須向使用者提供完整的修改版原始碼,或取得商業授權,沒有第三個選項。把自己的收集器和分析程式放在不同的 repository、不同的程序裡,只靠資料庫和 HTTP 溝通,它們就能保留自己的授權。

上游跑得很快

這個專案的上游一個月可以有幾百個提交。fork 的時候要釘一個基底提交,把自己的改動疊在上面,並且接受「要不要跟進、什麼時候跟進」這個問題會反覆出現。改動越集中在少數幾個檔案,跟進越容易。

Windows 上的幾件小事

Vite 的命令列在 Windows 上建置完可能不會結束,建置腳本改成呼叫它的 API 然後明確退出。上游的測試有兩萬多項,在 Windows 上會有一批失敗,原因是 CRLF 的 checkout、npm 找不到 git、Windows 路徑和時間敏感的測試。判斷自己的改動有沒有弄壞東西,只看那些只在 fork 上失敗的測試,其餘先對照未修改的上游跑一次。

官方網站:worldmonitor.app

閱讀偏好

返回全部文章作者與內容更正

留言(0)

還沒有留言。讀完有想法,歡迎留下第一則。

留言經站長審核後才會顯示。暱稱和留言會公開,請不要寫下電話、地址等個人資料;資料怎麼處理,請見隱私權政策。