完美的部落格解決方案(二):Jekyll + Github Pages

2013-11-19 #github-pages #jekyll #liquid

Github Pages 是Github 提供的網站託管服務,用來建立專案、個人或組織的網頁。當然,我們也可以利用它製作比Calepin 更有個人特色的部落格。

Github Pages 的用法相當簡單,只要在Github 上建立一個叫<Github 帳號>.github.io的repository,推進html 檔,之後便可以在http://<Github 帳號>.github.io 看到網頁。

由於Github Pages 只支援靜態網頁,無法動態地執行伺服器端的程式碼,因此必須預先把網站產生好。為了自動產生網頁,我們可以用Calepin 所使用的網頁產生器Pelican(以Python 實作,名字和做鋼筆的百利金Pelikan 差一字),並將產生出來的網頁推到Github 上。不過,我們也可以使用Github Pages 內建的網頁產生器Jekyll(讀音如「傑可」)。

Jekyll 是一套以Ruby 實作的網頁產生器,由Github 的執行長 Tom Preston-Werner 等人開發。我們不必上傳完整的網站,而是將部落格的文章(一樣可為Markdown 格式)、模版,和CSS 樣式推到Github,Github 便會自動用Jekyll 產生出網頁。

使用Github Pages 和Jekyll 的發文流程類似Calepin。兩者的文章皆可以用Markdown 格式儲存(Jekyll 另支援Textile)。發文前,Github Pages 的文章要放在專案根目錄的_posts 資料夾下。若文章為Markdown 格式,檔名則為<yyyy>-<mm>-<dd>-<文章名稱>.md。發文時,是使用Git 提交(commit)並推送(push)到GitHub 上。

和Calepin 一樣,文章的開頭也需要放入一些描述文章的資訊,稱為「front-matter」,格式是YAML,用三個減號(dash)包圍。因此一篇文章長得像這樣:

---
title: Hello, Jekyll!
layout: post
tags: jekyll github-pages blog 
---
第一篇文章…

Jekyll 支援一套叫做Liquid 的模版語言,其語法並不難。例如,若要印出所有文章的標題和連結,我們可以寫個簡單的迴圈:

<ul>
{% for p in site.posts %}
  <li>
    <a href="{{ p.url }}">{{ p.title }}</a>
  </li>
{% endfor %}
</ul>

而若要在多個頁面中放進同樣的模版,如一致的頁首和頁尾,我們可以將這些模版放在部落格根目錄下的_includes 資料夾,並在要使用的頁面裡納入,如:

...
<body>
{% include header %}
...
{% include footer %}
</body>

網路上已有許多關於Jekyll 和Github Pages 的介紹和教學,可參考下面的連結。