文/杜佳駿 蔡榮 吳芳
上世紀末至本世紀初,互聯網在高校普及,水木清華站、北大未名站、飲水思源站、日月光華站等高校BBS論壇,成為當時師生獲取信息和交流思想的重要渠道。然而,隨著移動互聯網和社交網絡的快速發展,傳統的Firebird BBS系統逐步退出歷史舞臺,高校線上社區功能已逐漸被即時通訊軟件或其他社交平臺所替代。
2019年4月,上海交通大學基于開源的Discourse論壇系統構建了新的校內論壇——水源社區。三年來,水源社區在促進校內信息交流、推動學??茖W治理等方面發揮了巨大作用,成為校園網絡文化建設的重要陣地。特別是2022年3月9日以來,上海交通大學因疫情防控要求進入封閉管理狀態,水源社區為廣大師生提供了高效的信息交流渠道,平均每日活躍用戶過萬人,在實現校內師生互助、消除信息更新不及時、緩解學生焦慮等方面發揮了至關重要的作用,成為學校師生的精神家園。
本文將重點介紹Discourse論壇系統的特點、選擇的原因、安裝與維護的細節,以及水源社區的運營經驗。
如圖1所示,Discourse是開源的新一代論壇框架,其部署門檻低、界面優雅可定制、移動端體驗友好、插件豐富、管理方便,與傳統的論壇軟件相比,有了明顯進步,具體從以下六個方面進行說明:

圖1 GitHub上的Discourse開源項目
1.在技術架構方面,Discourse為前后端分離的Web架構。在技術選型上,前端使用Ember.js框架,后端API使用了Ruby on Rails框架,使用PostgreSQL數據庫和Redis緩存,使用Sidekiq作為后臺作業系統。
2.在用戶界面方面,Discourse對桌面端和移動端瀏覽器均進行了適配,并且支持用戶自定義主題。雖然沒有開發原生Android和iOS客戶端,但支持PWA(漸進式Web App),用戶在手機瀏覽器上即可感受到類似App的沉浸式體驗。
3.在內容編輯方面,Discourse支持Markdown、HTML代碼和Emoji表情,不僅能上傳圖片、視頻、文檔等各類文件,還可通過插件支持LaTeX代碼,允許用戶進行學術討論。Discourse同時支持Wiki模式,允許用戶協同編輯創作。
4.在二次開發方面,Discourse提供了完備的API接口并支持WebHook,可以較為簡單地部署相應監測、自動化服務等功能。Discourse利用Rails的插件體系結構進行功能插件的開發,可新增或者覆蓋原有代碼,快速對接學校SSO實現一鍵登錄。
5.在內容分類方面,Discourse采用扁平化的分類模式,避免過深層級帶來的閱讀困難和上下文信息分割,同時提供標簽,與板塊形成二維分類模式??梢葬槍Π鍓K分類做出不同設定,設置發帖和審核要求,并且為不同板塊分配不同的審核站務。Discourse支持用戶特別關注或者屏蔽任何板塊、標簽和用戶。
6.在內容管理方面,Discourse提供了系統管理員、站務、用戶等不同角色。用戶能夠及時通過舉報機制反饋問題;站務能夠審核用戶的內容并且做出隱藏、刪除、封號等不同響應操作;系統管理員在站務權限基礎上,允許管理論壇的各項配置。
1. 為什么不選微信?
微信是實時聊天軟件,群聊內容很容易被淹沒,不方便長期存留。朋友圈則是建立在好友關系上,消息分散且受眾有限。公眾號存在操作門檻高、發布次數受限、僅能由所有者主動發布、評論區難以相互討論等問題。
2. 為什么不選云文檔?
金山文檔、騰訊文檔均提供共享文檔,允許多用戶查看和協同編輯,但云文檔用戶權限劃分較粗,很難判定信息的發布者,內容還可能被用戶惡意修改。此外,云文檔由商業公司維護,學校缺乏監管手段。
3. 為什么不選Discuz?
Discuz也是比較優秀的社區論壇系統,但其界面老舊,移動端顯示效果不佳,無法滿足廣大師生隨時隨地進行便捷信息交流的需求。
Discourse提供了Docker鏡像和易用的安裝維護腳本,降低了安裝和運維門檻。
水源社區目前運行在上海交通大學網絡信息中心提供的jCloud私有云服務器上,其配置為32核64G內存和1.3T高性能云盤,并可根據需要進行垂直擴展,甚至在未來單機性能達到極限時,將服務進行水平橫向擴展。雖然目前尚未使用對象存儲服務(OSS),但已計劃未來將用戶上傳文件轉入OSS。由于安裝與更新會自動從代碼倉庫下載依賴和代碼,因此服務器需保障能夠暢通訪問Docker Hub、GitHub、NPM、Ruby Gems等服務。
登錄服務器,將Discourse維護倉庫(https://github.com/discourse/discourse_docker)克隆到本地工作目錄(下面例子將以/var/discourse作為工作目錄進行演示)。然后切換到選擇的工作目錄中,運行./discourse-setup 進行初始化,按命令行提示對應操作,結束后會在./containers/目錄下生成App.yml 文件??芍苯邮褂眠@個默認配置文件,也可根據需要再編輯自定義調整。執行./launcher rebuild App即可開始全自動部署論壇,具體分為以下環節(僅介紹過程,實際無需人工操作):
1. 更新/var/discourse路徑的discourse_docker代碼;
2. 拉取官方提前構建好的鏡像(會訪問Docker Hub),該鏡像包含軟件依賴但不包含代碼;
3. 下載最新的Discourse代碼和插件代碼(會訪問GitHub);
4. 下載后端(會訪問Ruby Gems倉庫)和前端(會訪問NPM倉庫)的依賴,更新已安裝的主題(會訪問GitHub);
5. 本地構建前端的生產版代碼;
6. 本地數據庫版本遷移;
7. 生成本地的Docker鏡像;
8. 使用步驟7中構建好的鏡像加上讀取containers/App.yml中的運行參數啟動論壇容器應用。
此后若需要更新Discourse版本,可以重新執行./launcher rebuild App,自動生成新的鏡像和容器,而數據不會丟失。
Discourse官方論壇為https://meta.discourse.org,可在官方論壇中獲取更多支持及來自全球開發團隊和其他運營者的經驗。為方便升級以及解決兼容性問題,水源社區不對Discourse代碼本身做任何修改,而是采用其提供的插件接口開發需要的功能。相關插件代碼均托管在代碼平臺上,并按照普通插件安裝的方式進行維護。
水源社區由上海交通大學網信辦指導運營、學校師生團隊提供技術支持;并由在校學生組成站務委員會實施管理,充分調動社區活躍用戶,以推動論壇自治和健康發展。水源社區首頁如圖2所示,具體運營經驗如下:

圖2 水源社區首頁
1.在用戶管理方面,水源社區僅能通過學校統一身份認證jAccount登錄,且所有用戶均已完成實名制認證。水源社區站務委員會成員擁有站務權限,站務委員會制定水源社區管理規范,在標準清晰、責任明確的情況下審核社區內容和用戶行為,站務委員會成員上崗前均被要求學習國家互聯網相關規定。社區所有用戶均可主動舉報不當內容,并由站務委員會及時處理。
2.在內容分類方面,水源社區采取精簡分類的設計思路。目前,一級板塊數量為14個,二級板塊若干,并可通過帖子標簽進行二維分類。對愿意入駐的職能部門和學生團體,為其單獨開設二級分類。入駐社區的部分學生團體還可承包運營部分興趣類板塊。水源社區主動開設了獨立的廣告板塊,避免滲透非廣告板塊,用戶也可自行選擇是否屏蔽廣告板塊。社區內的活躍用戶有權限調整錯誤分類的主題帖。
3.在用戶教程方面,水源社區號召活躍用戶撰寫了水源教程,包括論壇介紹、使用說明等各個方面。新用戶教程還介紹了水源社區的基本情況、帖子編輯方法等,教程內容在新用戶主頁置頂,供新用戶學習參考,方便其更快地融入社區。
4.在處理矛盾方面,水源社區引導用戶形成共識,鼓勵活躍用戶自治。社區建議觀點不同、容易引發矛盾的用戶之間,主動采用黑名單機制避免繼續爭吵。在爭吵激烈的帖子中,可以啟用慢速模式,讓每位用戶在一定時間之內只能發言一次,限制用戶發言頻率。
5.在活躍用戶方面,水源社區積極組織各種線上線下活動,通過派發虛擬徽章、社區IP實物、其他各類獎品等方式,鼓勵用戶參與活動。為鼓勵優質內容發布,提升社區內容質量,水源社區還創建了精品內容板塊,用以統一整理用戶創作的精品內容,并為創作精品內容的用戶頒發可以外顯的“精品作者”徽章,進行激勵。