Hello Hugo
去年針對 文件持續交付 找了一些工具,當時以 K8s 官方網站作為目標,研究他使用的工具以及架構,後來這件事情就沒有時間持續往下。最近想把個人的入口網站,做更完善的整理,試了一些東西,最後腦海還是出現去年研究 Hugo 的想法,所以整理一下研究的筆記。
現況與背景
現在 (2020/01) 的 Blog 主要使用 Hexo,大約從 2015 年到現在,文章總數 257
,每次發布執行 hexo generate
,底下是執行過程:
1 | ~ % hexo generate |
在 macbook pro (SSD, 2015Late) 上的執行時間約要花 2.43 min
.
同樣的資料量,把現在 Blog 的文張放到 Hugo 跑本地端的:
1 | ~$ hugo server -D |
效能差非常的多。除了效能,另外我想要擴展 Blog 這件事情,讓他變成我的 Portal Site,去年談 文件持續交付 的過程,以 K8s 官網為研究對象,覺得 Hugo 應該是可以投資、嘗試的。
Experience Hugo
先體驗一下 Hugo,從安裝 Hugo、新文章、測試、到發布一個網站,整理六個步驟的完整流程。
底下是在 macOS 執行。
1 | # 1. 安裝 hugo |
順利的話,步驟五會看到以下的結果:
Hello Hugo
底下紀錄 Hugo 模組相關概念、流程,更細部的說明後續再持續整理。
Installation
底下是安裝 Hugo 的完整紀錄。
1 | # ------------- |
目錄結構
建立好一個 Site 之後,Hugo 產生了一個基本的結構,包含文件內容、Themes、配置 … 等,預設會產生以下目錄結構:
1 | ~$ tree |
詳細參閱: Directory Structure
Config
Hugo 提供很多參數讓使用者自行配置,底下幾個是我在配置時遇到的、值得留意的:
baseURL
: 網站的 FQDN,像是https://blog.rick.com/
paginate
: 分頁數目,預設是 10permalinks
: URL 的結構,如果要從其他 blog 轉過來,就要另外配置,詳細參閱 URLs- 像是從 hexo 過來:
posts = "/:year/:month/:day/:slug/:title/"
- 像是從 hexo 過來:
taxonomies
: 配置 catagories、tags、series 等,詳細參閱 TaxonomiesdisablePathToLower
: Hugo 預設會把 url 大寫轉為小寫,這參數可以關閉 Path 轉小寫preserveTaxonomyNames
: 關閉 Catagoery、Tags、Series 轉小寫,預設為 false。Hugo 預設會把 Taxonomy(Categories、Tags、Series)名稱轉為小寫
contentDir
: 指定 content 的目錄點,像是多語系網站,預設會設計成/content/en/
開始的 landing Page,而不是 post 之類的位置。theme
: 使用的主題 (theme),會去目錄/theme/{THEME_HAME}
讀取相關資料,沒有指定的話,則會直接讀取根目錄底下的layouts
、static
.
其他過程中我有遇到,但通常不用特別改的:
menu
: 設定網站的選單使用,詳細參閱 menu- 跟建置有關的參數:
buildDrafts
: 建制的時候,包含標記草稿的內容,預設是 falsebuildExpired
: 建制的時候,包含已經過期的內容,預設是 falsebuildFuture
: 建制的時候,包含未來要發布的文章,預設是 false。
defaultContentLanguage
: 預設語系enableRobotsTXT
: 產生 robots.txtfrontmatter
: 與時間有關的設定,詳細參見 Front MattergoogleAnalytics
: GAhasCJKLanguage
: 雙位元語系國家,包含日文、韓文、中文。imaging
: 影像處理的配置,詳細參見 Image processing
Config 有修改的話,有些需要重啟 server 才會生效,像是 permalinks
完整 Hugo Config 參閱: Configure Hugo
佈景主題 (Themes)
下載佈景主題 (Theme) 並測試,Themes 可以到這裡下載:https://themes.gohugo.io/
1 | ~$ cd gtcafe |
Theme 的目錄結構大致包含以下:
1 | # Structure of hugo-material-docs |
其中 archetypes、layouts、static 這三個目錄通常都會有,另外通常也都會有一個 exampleSites
目錄,存放範例資料,也就是 theme 提供的的範例資料。
使用 theme 的方式有兩種:
- 第一種是直接在
config.toml
指定 theme 的名稱,然後把exampleSites
目錄裡的資料複製到 site 的根目錄。- 這種方式通常是要單獨開發 Theme 給其他人使用
- 第二種是直接把 theme 裡的三個主要目錄複製到 Site 根目錄,把原本的目錄蓋過去。
官方建議使用第二種。
本地端測試
跟 Hexo 同樣,hugo 同樣可以起一個 WebServer 執行測試。
1 | # ------------- |
文章
hugo 的文章都放在 content
目錄裡,同樣的也是以 markdown 作為格式,如下:
1 | --- |
Q and A
- Q: Hugo 有 category or tag 的功能?
有的,Hugo 稱為 Taxonomies,包含了 Catagoery、Tags、Series 三中,詳細參閱 Taxonomies
- Q: 文章的圖檔應該擺哪裡?
放在
/static
目錄裡面即可。這個位置就是靜態資料在擺放的。
- Q: 放在
/content
裡的文章 (markdown),有時候放在/content/post/
、有些放在/content/blog/
,到底應該放在哪個位置?
這其實跟 Theme 的設計有關係,每個 Theme 對於
Content
的設計與定義不一樣,以 Themeananke
為例,找到/layouts/index.html
, 其中的$mainSections
就是定義用哪一個路徑,預設是post
。
結論
簡單整理 hugo 基本的用法,因為看到 K8s 官網,我相信 hugo 可以達到我想要的,想要的以及未來方向整理如下:
需求 (許願池)
- Blog: 需求如同 Hexo Tuning 描述的需求。
- 使用體驗改善,像是更簡潔的介面、支援 Landing Page、RWD … etc.
- 考慮 SEO: URI 設定
- 假設要從 hexo 搬過來,那麼勢必要能夠處理舊的 URI.
- Docs: Blog 算是流水帳的形式,但我希望可以像 鳥哥 或者 良葛格 那樣,針對特定主題,持續整理成有系統的、屬於自己的知識庫,取代掉 Blog 鬆散的結構。
- 個人品牌:
- 有 AMP (Accelerated Mobile Pages) 功能,可以讓 Blog 直接變成像是 Native APP 那樣,直接在本地端使用。
- 個人客製化的 Theme
工作流程
考量未來經營 blog 與個人 KM 的積累,有以下流程:
- Blog -> Docs: 比較隨性,沒有嚴謹架構的隨筆,先以 Blog 形式發佈
- 先在 Blog 寫成文章:把想法記錄下來,持續修改、或者蒐集相關資訊。
- 定期整理到 Docs,文章蒐錄到 Docs 之後,Blog 就不再更新。
- Docs -> Blog: 主題與結構式整理, 先想整個架構,然後一一落筆。
- 整理出大的藍圖、目錄、結構
- 一一把文章整理出來。
- 反饋到 Blog,公告。
雜感
研究 Hugo 設定的過程,看到很多以前設計 1, 2 過的影子,特別是 Config 的結構與設計,像是 Config 得階層、Config 的動態變數、Config 注入的方式有靜態 (config.toml)、動態 (CLI 參數以及環境變數 starts with HUGO_
) … 等設計,這些其實都是一個成熟系統設計的基本原則與實踐方法。