為什麼要把 blog 放在 GitHub?

我在上一篇中提到,最終選擇使用 hexo+ GitHub Pages 來存放 blog, 不是 WordPress+虛擬主機,也不是 hexo+虛擬主機,都是出於安全考慮。為什麼呢?

靜態比動態更方便

以 WordPress 為代表的動態 blog 程序的確很好很強大,也很容易上手和維護,仍然是獨立 blog 的不二之選(雖然現在都沒什麼人會創建獨立 blog 了)。但它的問題也很多,臃腫緩慢且不說,安全和備份問題就很讓我頭大。

WordPress 使用者眾,針對它的攻擊也從未停止。我的 blog 被黑並非針對我本人而來,只是黑客隨手掃描到我這裡有漏洞而已。但我就是個技術小白,能夠搭建起 WordPress, 卻沒有能力去維護其安全。

WordPress 的所有文件都存放在服務器,包括文章、頁面、配置文件、插件、模板以及許多 PHP 動態文件,它 24 小時依賴服務器上的動態開發環境運行。此外還要調用單獨的數據庫,數據庫一般也存放在服務器。備份至少要做到網站文件備份和數據庫備份,而正確的備份姿勢包括提前停用所有插件,數據庫文件又是不易讀的 SQL 文件,所有這些都讓我覺得不便。

Jekyll 和 hexo 這類靜態網站則很不同:雖然它們也依賴動態開發環境,但這個動態環境在本地電腦,而不在服務器。它只要在本地生成了靜態文件,就可以不再運行。之後把生成的靜態文件上傳到服務器即可,它對服務沒有什麼特殊的功能要求,可以說隨便找個服務器就行。備份很簡單,因為所有文章、頁面、插件、模板都存放在本地,而且沒有數據庫,可以隨時很方便的備份。文章和頁面全部以 Markdown 文件存放,比 SQL 文件的數據庫讀取更方便。

GitHub 比虛擬主機更安全

hexo 生成靜態文件後,可以直接上傳到服務器上。事實上,hexo 提供了許多自動完成上傳的方案,支持 GitHub/OpenShift/ftp/heroku/Amazon S3/Rsync 等等。也就是說,我可以把 hexo 在本地生成的靜態文件上傳到虛擬主機的 ftp 裡,然而我沒有這麼做,因為覺得虛擬主機不如 GitHub 那麼安全。

一般的 ftp 使用密碼即可登陸,這是最容易被攻破的登陸方式了吧,即便我設置了非常複雜的密碼。而 GitHub 提供了二步驗證(2-step Verification),這可比單純靠密碼登陸管理安全多了。國外許多大的廠商都提供二步驗證功能,包括 Google/Apple/Microsoft/GitHub 等,大家不要嫌麻煩,最好開啟此功能,免得什麼時候又成了大規模密碼洩漏的受害者。

我以前在關於 Git 的文章中就說過,Git 的生態早已形成,用 Git 的方式來管理 blog, 尤其是管理文章的不同版本,非常方便,這是使用 WordPress 所無法達到的體驗。hexo 生成的靜態文件非常節省空間,GitHub Pages 提供的 300MB 免費空間完全夠用。就算哪天要換到其它平臺,甚至換掉 hexo, 成本也很低。