從 Ghost 跳槽到 Hexo

Introduction

自從接觸 Markdown 後,對於像 Google Blogspot 或是 Wordpress 這類型的網誌就不太想碰。即使建立了網誌想開始記錄一下生活點滴,也是放著不太寫新文章。原因無他,只要一想到文章還要設定一堆字體、字型、或是編號、插入圖片等等要一直切換著滑鼠跟鍵盤就覺得麻煩,不如 Markdown 這樣鍵盤直接打到完。

也因為如此,在兩年前事情比較少時才開始下定決心認真找適合自己的網誌:

  • 支援 Markdown 寫作
  • 架設、環境部署要簡單
  • 若為線上服務
    • 支援 HTTPS
    • 可自訂網域名稱
    • 提供文章備份下載功能

而基於以上幾個要求,在過程中找到了幾個框架或服務:

  1. Hexo
  2. Ghost
  3. Logdown

而這篇文章中,將會先對上述所列的三個框架或服務稍微介紹一下,並依序說明對我而言的優缺點,最後會解釋在使用後為什麼會跳到 Hexo 的原因。

Logdown

關於 Logdown 的介紹可以先參考開發者的文章:

Logdown 是我們公司 Rocodev 正式開發維護的一個產品。線上使用 Markdown 寫作文章,支援 Github-Flavored Markdwon, MultiMarkdown, 以及 Latex 數學式, 提供上傳圖片介面以及 Custom Domain。Octopress 與 Wordpress 搬家服務。

Logdown ── 正式搬家到 Logdown:Why Logdown?

Logdown 的訂價策略上提供免費與付費種模式,兩者間只差在網誌數、靜態網頁數以及自訂網域的功能,而付費方案每年需要 $49.99 美元,雖然在金額上可以接受,但對於可以自行架設伺服器的人而言可能就沒有太大的吸引力。

Logdown Pricing

值得注意的是,官方的網址最後的文章是 2014 年,文章下的垃圾留言也沒在管理。雖然在剛起步時獲得不少高評價,國外也不少使用者,稱得上是台灣之光,但對於開發者放置產品不理的心態還是讓我有點傻眼。另外 Logdown 距離上次更新已經過了非常久的一段時間,基本上已經可以說是一個停止維護的產品。雖然還是可以用但就是有風險,例如突然文章消失之類的狀況發生時有很大的機會求助無門,每年 $49.99 的金額換得這樣的服務,就不列入我的考慮了。

Ghost

Ghost 是由前 Wordpress UI 副主管 John O’Nolan,因對 Wordpress 將產品用於網誌而非內容管理系統感到失望而於 2012 年 12 月所發想的計畫。在 2013 年 4 月 29 日 O’Nolan 在 Kickstarter 發動為期 29 天的募款活動,目標為 25,000 元英鎊,而募款在 11 小時內完成,並在活動結束時共募得 196,362 元英鎊。贊助者除個人支持外亦包含許多著名人物與公司,如 Seth Godin、Leo Babauta、Darren Rowse、Tucker Max、WooThemes、Envato 與 Microsoft。最後於 2013 年 9 月 9 日發布第一個公開版本 Kerouac,並在同年 10 月 14 日基於 MIT 許可證透過 GitHub 發布版本 0.3.3 並持續更新至今。

Ghost 是一項基於 Node.js 與 Google V8 引擎的網誌,由於 MIT 許可證,使用者可免費、自由下載與使用,此外 Ghost 向用戶提供按月收費的託管平台,作為設定伺服器與手動安裝框架的替代方案,包含自動備份與更新、以及支援電子郵件等功能。

Ghost 官方推薦伺服器為 Ubuntu,亦可使用其他 Linux 分支或 Windows Server 進行架設,唯架設於 Windows Server 過程較繁瑣且網路資源較少,若有使用者想嘗試可以參考我之前寫過的文章:

Ghost 算是我目前用過第二久的網誌(第一為 Blogspot),從最一開始的版本用到現在出了 Ghost 2.0,平均而言給了我挺好的使用體驗,但仍舊有一些我不太能接受的小缺點,所以才會在最近毅然決然跳到 Hexo,這邊做個紀錄一下。

JavaScript 檔案解析問題

首先,如果有看 Running Ghost 1.0 on Windows with IISNode 這篇文章的話,在文章結束前有提到 1.13.0 版本之後的 Ghost 在 JavaScript 的檔案解析上有問題,我曾在 Ghost Forum 上提報,卻得到「我們在 Ubuntu 執行上沒問題,所以是你 Windows Server 的問題」這樣的解答,由於自己對這份專案也沒有什麼貢獻,所以我也不好多說什麼,就默默將有問題的檔案替換成 1.13.0 的來解決問題。

說好的 Markdown 呢?

雖然 Ghost 在一開始主打用 Markdown 來寫文章,但在 Ghost 1.0 之後開始推動了 mobiledoc 的文件格式。簡單說明 Issus: Feature: New Mobiledoc Editor 的話,Ghost Team 認為現有的編輯器已經過時,除了問題多外擴充也是不易,因此採用 mobiledoc 才是趨勢、潮流。而這也導致了從 Ghost 實驗性功能文章匯出(Export)出來的內容從 Markdown 都變成了 mobiledoc 格式,說好的 Markdown 呢?

Node.js 自動關閉

接著算是我想跳槽的轉捩點,也就是將 Ghost 1.x 更新為 Ghost 2.0 並一併更新 Node.js 後,Node.js 不知怎麼搞的,Server Side 執行一段時間會自己關閉,導致使用者連上網誌時會先出現「伺服器錯誤」,要再按下 F5 重整網誌才會正常檢視。這樣的不定時炸彈加上 Ghost 部署在 Windows Server 確實不容易且麻煩的情況下,下定決心趁文章數量還很少時改採用 Hexo。

Hexo?

Hexo 是一個基於 Node.js,主打快速、簡單且強大的網誌框架,那多快多強大呢?官網是這麼說的:

  • 超級快速
    • Node.js 帶給您超級快的檔案產生速度,上百個檔案只需幾秒就能建立完成。
  • Markdown 支援
    • Hexo 支援所有 GitHub Flavored Markdown 的功能,您甚至能在 Hexo 使用大部份的 Octopress 外掛。
  • 一鍵部署
    • 您只需要一個指令就能把網站部署到 GitHub Pages, Heroku 或其他網站。
  • 豐富的外掛
    • Hexo 有強大的外掛系統,您可安裝外掛讓 Hexo 支援 Jade, CoffeeScript。

與 Ghost 不同的是,Hexo 將整個網誌產生成靜態網頁,直接部署到 GitHub Page 或類似的免費服務上(GitHub Page 提供 300MB 空間)。

對照 Ghost,Hexo 所有文章皆是以 Markdown 的格式做儲存。也因為是將網誌產生成靜態檔案,因此不會有 JavaScript 解析的問題,也不必擔心 Node.js 會自己停掉導致使用者體驗不佳,雖然缺點是無法做到即時線上編輯,但能讓使用者正常訪問才是我更重視的。

另外,Hexo 是由台灣人 Tommy Chen 所開發的,因此不論是官方文件或社群討論對中文的友善度遠比 Ghost 來的高。關於 Hexo 作者的開發原因以及過程等可以參考他的個人網誌:

建立 Hexo

基本上建立的方式參考官方文件就好,首先先安裝 Node.js。Ubuntu 可透過 apt-get 來安裝 Node.js:

1
2
3
4
5
6
7
8
9
10
11
# Node.js >= 6.x
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs

# Node.js 10
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt-get install -y nodejs

# Check Node.js and npm version
$ nodejs --version
$ npm --version

接著安裝 Hexo 命令列工具 hexo-cli

1
$ npm install hexo-cli -g

最後便可以透過 Hexo 命令列工具來建立一個網誌:

1
$ hexo init <folderName>

從 Ghost 遷移至 Hexo

從 Ghost 遷移至 Hexo 雖然在大多數的網站都有提到,可以透過插件 hexo-migrator-ghost 來完成。然而原專案已年久失修,雖然有其他人修改後的專案 fuyufjh/hexo-migrator-ghost,但最後更新日期也是 2017/11 左右,對照 Ghost Release 版本,大概是適用 1.18.2/1.16.2 以下的版本號。而 Ghost 今年已經不知道跳了幾個版本,更是升級成 Ghsot 2.0。

雖然文章數至今約 20 篇左右,說多不多、說少不少,但一篇一篇轉還是挺麻煩的,因此就抱持著嘗試的心態用了 fuyufjh/hexo-migrator-ghost 看看,結果經測試後發現是無法開心輕鬆正常轉換。

原本打算寫個小工具將 Export 出來的 JSON 轉換成 Hexo 的文章,結果意外發現導出的 JSON 竟然不包含 Markdown,心寒。不過從資料庫的資料表 posts 可看到裡面還是有存放 Markdown 的欄位 mobiledoc,想寫程式轉換的使用者我想可以從這部分著手。

問我為什麼沒寫?因為才 20 幾篇我就複製貼上就結束了,浪費一點時間而已。