博客從Ghost遷移至Hugo

Posted by Y Cheung on Tue, Apr 30, 2024

隨著Ghost的功能越來越多,它不再是一個純粹的markdown CMS了,Y Cheung猶豫了很久最終還是決定從Ghost遷出。

為什麼棄用Ghost?

升級維護困難

說實話,Y Cheung 並不是很頻繁在維護host的,備份有腳本定期執行,一般也就站點出現問題了再 ssh 登入上去看看,而ghost的升級並不如WordPress這般絲滑。四年前的Ghost 0.4.2 跨世代升級到 3.19.2 版本文章內就抱怨過了,而小版本升級也還要登入服務器操作,還不一定每次都順利。Y Cheung 不想分配那麼精力在這個事情上。

編輯器變更

現在的 Ghost 的編輯器不再是markdown語法編輯器,而是 visual editor 。這也許適應了商業化需求,但就已經不是當初的那個它了。畢竟十年前選擇ghost系統正是因為當時它是直接用markdown語法寫作的 opensource cms。如果現在的需求是一個visural editor,那還不如用wordpress、blogger等,都更簡單安裝維護,還有大量的社區、工具支持。

圖片處理困難

因為權限設置或別的不知名的原因,在給文章內添加圖片的時候,無法生成前台所需要的各種尺寸圖片,導致前台無法顯示圖片,需要 ssh 登入服務器手動生成,腳本是Y Cheung 自己寫的。而且 visual editor中只能新增圖片,無法選擇已上傳的圖片,在用markdown語法添加圖片也無法迅速找到那張圖片來使用。

資源開銷大

Ghost 是用 node.js 起的服務,還需數據庫,佔用服務器資源不小,而這個站只需要靜態加載頁面就好了,反正大家都是搜索過來看完需要的東西就跑的,繼續host在Y Cheung的主機上是一種資源浪費。

Cloudflare Page + Hugo 優勢

這個站原本就套了一層Cloudflare的CDN,現在Cloudflare Page可以免費host static sites,就是本站的最佳解了。而 Hugo 是用Go寫的,使用起來也很方便。

  • Hugo 寫作直接是markdown文檔
  • Hugo 社區活躍
  • Hugo 無需數據庫
  • 可以在 github上存儲內容與追踪版本變化
  • 可以用 cloudflare 上自動部署
  • 網站訪問速度更快
  • All free

遷移步驟

  1. 參考官方文檔在本地安裝 Hugo。
  2. 在Ghost後台設置中的Labs /ghost/settings/labs ,導出內容,獲得一個json文件。
  3. 將導出的json文件生成Hugo post所需的.md文件。 這一步Y Cheung是寫了個python腳本來轉換。另有 ghostToHugo 也是可以直接生成整個hugo站點的。
  4. 將圖片從備份文件中放入hugo的 static/images 文件夾內。
  5. 本地檢視網站,確認一切正常
  6. 更改RSS Feed 默認地址,編輯站點配置文件,如/hugo.toml
1[outputFormats]
2[outputFormats.RSS]
3  mediatype = "application/rss"
4  baseName = "rss"
5[mediaTypes]
6[mediaTypes."application/rss"]
7  suffix = "xml"
8[params.social.rss]
9  url = "/rss"
  1. 根據實際情況,參考 Cloudflare Page Redirects文檔新增static/_redirects文件添加相關301跳轉,比如:
1# static/_redirects
2/tag/* /tags/:splat 301
  1. 在 github 上建立 private 項目,將本地hugo站點整個git push上去。.gitignore文件參考(https://www.toptal.com/developers/gitignore?templates=hugo)。
  2. 參考Cloudflare 文檔新增 Page site,關聯github repo,配置項目。
  3. 根據提示,更改域名DNS解析,增加CNNAME指向。

總結

Ghost不再是一個純粹的markdown CMS,因為它的功能越來越多,而且升級維護困難、占用服務器資源等問題也導致了Y Cheung放棄使用。相比之下,使用Cloudflare Page和Hugo可以免費托管靜態站點,並且具有許多優勢,如寫作直接使用markdown文檔、無需數據庫、可以在GitHub上存儲內容和追蹤版本變化等。歡迎大家也試試看哦~