最近山姆鍋在建置業餘專案 #呆丸開發者 ⎘時, 需要一個可以支援多對多溝通模式的 web 應用。幾經思考,覺得論壇軟體可以符合大部分需求。傳統的 web 論壇軟體雖然成熟,功能也完整,但網站需要符合 Mobile-first 的要求以及現代化的使用者體驗,所以需要跳脫傳統論壇軟體框架的選擇。可能合用且比較常見的有下列三個:Discourse ⎘、NodeBB ⎘ 以及 Flarum ⎘。本文並非三者的優缺點比較,僅是山姆鍋介紹 NodeBB 的哪些特點,讓它成為最後選擇。
NodeBB 簡介
NodeBB 是基於 NodeJS 環境,支援 Redis 或 MongoDB 多種資料庫的現代化論壇軟體,透過 socket.io(websocket 或者 long polling)支援雙向即時溝通機制,提供使用者流暢的訊息流。(全是技術用語,山姆鍋果然是很糟的產品行銷人員 :D)
選擇 NodeBB 的原因
概略的 Google 比較後,大部分的人可能跟山姆鍋一樣會傾向於使用 Discourse,畢竟從社群大小、功能、畫面等等,Discourse 是這三者最優。一開始,山姆鍋也是從 Discourse 開始試用,但當自己開始實際安裝後就開始撞牆了,再經過幾次不成功的嘗試後(官網的安裝步驟、DigitalOcean 的一鍵安裝等等),對於自行安裝維運 Discourse 的信心直線下降。轉而試圖安裝 NodeBB, 按照官方文件沒有困難地就完成安裝與基本設定,當然正式生產環境還必須要有主機安全加強、HTTPS 連線等,山姆鍋有時間再分享如何完成 NodeBB 的生產環境設定。話說 Flarum 的社群更小,開發進度緩慢,況且山姆鍋有可能需要對網站進行功能擴充,但不想再學習 PHP,所以連試用它的機會都沒有。Flarum 可謂不戰之罪,偏好 PHP 執行環境的人,可以評估一下 Flarum 是否符合需求。
簡單地歸納,山姆鍋會選擇 NodeBB 的原因有下列幾點:
容易安裝
根據山姆鍋過去的經驗,Flarum 應該更好安裝與設定,但因為上述原因被排除了。跟 Discourse 比起來,NodeBB 的安裝簡單的多,由於是自己維運這點就很重要。如果是使用雲端託管服務,雖然這點就變得不是那麼絕對,但反而費用會變成主要考量。
系統要求低
由於 #Developers.TW 是個人業餘項目,自然希望花在主機等維運費用越低越好,目標是初期可以在 DigitalOcean 的最小 Droplet 上執行 (1 core, 1GB, 每月 $5 元),之後再根據需要擴充。這個規格根據 Discourse 官方資料看來是不實際的。對於一個可能沒有人使用的網站,即使是每個月 $5 也是額外的負擔,畢竟是業餘興趣,能省則省。
容易擴充
並不是說 Discourse 或者 Flarum 不容易擴充(山姆鍋對兩者沒有深入研究),而是山姆鍋已經決定縮小自己的主要程式語言為 JavaScript 跟 Python, 因為NodeBB 採用 NodeJS 且支援外掛(plug-in)方式擴充功能,需要的話山姆鍋可以自行開發。所以,三者中山姆鍋自然是偏向 NodeBB。
NodeBB 的特點
有商業支援
以開源軟體的成熟度指標,有商業支援通常是一個很好的判斷依據。NodeBB 背後有 NodeBB Inc. 這家加拿大公司負責主要開發跟推廣,公司感覺不大,但既然核心團隊對於自己的產品有信心商業化,對使用者來說應該也算是一種保證。
相對輕量化
最精簡的安裝的話,執行 NodeBB 只需要 NodeJS 以及 Redis 服務,對於記憶體以及 CPU 運算能力需求比 Discourse 低。 NodeJS 進程負責主程式,Redis 負責資料以及快取的用途,不過正式生產環境還需要在 NodeBB 主程式之前設置 web 伺服器(建議 Nginx)來負責靜態檔案以及 SSL 連線。
支援 NoSQL
NodeBB 支援 Redis 或 MongosDB 作為論壇主資料庫這點,其中山姆鍋最關注的是 Redis 的支援。一般 Redis 被用來作為資料快取或者 Pub-sub 模式的訊息傳輸用途,當做主資料庫這點相當少見。由於 #Developers.TW 算是很小的論壇網站,資料量跟使用者不多的情況下,使用 Redis 來存放資料可以有效提升網站存取效率。如果是中大型論壇,則建議採用 MongosDB + Redis 模式。
支援外掛(plug-in)
藉由外掛,第三方開發人員可以在不動到核心的情況下擴充軟體功能,這點跟 WordPress 跟 Drupal 的外掛相同。比較不同的是,為了提供前端網頁優化,外掛的啟用通常需要進行重新建置網頁並重啟服務才能生效,這點應該是開發團隊基於網頁效能的取捨,犧牲部署便利性換取應用執行效能。
NodeBB 的缺點
建置 #Developers.TW 到目前為止,也發現 NodeBB 的一些問題或者缺點,底下是山姆鍋比較在意的:
社群比較小
因為使用者基礎較少,遇到問題有較高的機會在 NodeBB 社群論壇找不到已有的解答。對於山姆鍋這種懶得發問的人算是小小的困擾。
繁體中文翻譯不全
雖然 NodeBB 也支援簡體跟繁體中文語系,但繁體中文的翻譯明顯年久失修,猜測原因應該是台灣使用 NodeBB 的人不多。由於簡體中文的翻譯相當完整,山姆鍋偷雞直接把簡體中文翻譯改成台灣習慣的用語並提交給 NodeBB 開發團隊。
中文搜尋支援不佳
NodeDB 官方的 dbsearch 外掛只能有效支援拉丁語系,像中文的機緣基本上完全無法使用。按照目前已知的資訊,官方有另一個使用 Solr 的搜尋外掛可以解決,但需要另外安裝 Solr 服務。由於不想耗用太多系統資源,山姆鍋選擇關閉搜尋功能,並沒有安裝 Solr, 所以尚無法證實 Solr 外掛的中文支援是否良好。
有明顯的錯誤跟問題
到目前為止,遇到下列幾個明顯但不嚴重的問題,
- 使用者介面有未本地化的字串,加上中文搜尋的問題,NodeBB 的國際化(i18n)還需要加強。
- 使用者介面有幾個小錯誤,例如:版面(category)建立後,因為無法搜尋到其它版面資料導致無法更改版面的上層版面。
小結
NodeBB 是一個比較符合現代使用者體驗又不耗用太多系統資源的網路論壇,對於想要使用 Discourse 但卻無能力自行安裝的人或者不需要那麼多功能的人,山姆鍋現階段會建議使用 NodeBB。