layout | title | description | category |
post | 使用Github Pages建獨立部落格 | Github本身就是不錯的代碼社群,他也提供了一些其他的服務,比如Github Pages,使用它可以很友善的建立自己的獨立部落格,并且免費。 | blog |
[{{ page.title }}][1]
2012-02-22 By {{ site.author_info }}
Github很好的将代碼和社群聯系在了一起,于是發生了很多有趣的事情,世界也因為他美好了一點點。Github作為現在最流行的代碼倉庫,已經得到很多大公司和項目的青睐,比如jQuery、Twitter等。為使項目更友善的被人了解,介紹頁面少不了,甚至會需要完整的文檔站,Github替你想到了這一點,他提供了Github Pages的服務,不僅可以友善的為項目建立介紹站點,也可以用來建立個人部落格。
Github Pages有以下幾個優點:
- 輕量級的部落格系統,沒有麻煩的配置
- 使用标記語言,比如Markdown
- 無需自己搭建伺服器
- 根據Github的限制,對應的每個站有300MB空間
- 可以綁定自己的域名
當然他也有缺點:
- 使用Jekyll模闆系統,相當于靜态頁釋出,适合部落格,文檔介紹等。
- 動态程式的部分相當局限,比如沒有評論,不過還好我們有解決方案。
- 基于Git,很多東西需要動手,不像Wordpress有強大的背景
大緻介紹到此,作為個人部落格來說,簡潔清爽的表達自己的工作、心得,就已達目标,是以Github Pages是我認為此需求最完美的解決方案了。
購買、綁定獨立域名
雖說Godaddy曾支援過SOPA,并且首頁放着極其不專業的大胸美女,但是作為域名服務商他做的還不賴,選擇它最重要的原因是他支援支付寶,沒有信用卡有時真的很難過。
域名的購買不用多講,注冊、選域名、支付,有網購經驗的都毫無壓力,優惠碼也遍地皆是。域名的配置需要提醒一下,因為偉大英明的GFW的存在,我們必須多做些事情。
流傳Godaddy的域名解析伺服器被牆掉,導緻域名無法通路,後來這個事情在BeiYuu也發生了,不得已需要把域名解析服務遷移到國内比較穩定的服務商處,這個遷移對于域名來說沒有什麼風險,最終的控制權還是在Godaddy那裡,你随時都可以改回去。
我們選擇DNSPod的服務,他們的産品做得不錯,易用、免費,收費版有更高端的功能,暫不需要。注冊登入之後,按照DNSPod的說法,隻需三步(我們插入一步):
- 首先添加域名記錄,可參考DNSPod的幫助文檔:https://www.dnspod.cn/Support
- 在DNSPod自己的域名下添加一條A記錄,位址就是Github Pages的服務IP位址:207.97.227.245
- 在域名注冊商處修改DNS服務:去Godaddy修改Nameservers為這兩個位址:f1g1ns1.dnspod.net、f1g1ns2.dnspod.net。如果你不明白在哪裡修改,可以參考這裡:Godaddy注冊的域名如何使用DNSPod
- 等待域名解析生效
域名的配置部分完成,跪謝方校長。
配置和使用Github
Git是版本管理的未來,他的優點我不再贅述,相關資料很多。推薦這本Git中文教程。
要使用Git,需要安裝它的用戶端,推薦在Linux下使用Git,會比較友善。Windows版的下載下傳位址在這裡:http://code.google.com/p/msysgit/downloads/list。其他系統的安裝也可以參考官方的安裝教程。
下載下傳安裝用戶端之後,各個系統的配置就類似了,我們使用windows作為例子,Linux和Mac與此類似。
在Windows下,打開Git Bash,其他系統下面則打開終端(Terminal):

1、檢查SSH keys的設定
首先我們需要檢查你電腦上現有的ssh key:
$ cd ~/.ssh
如果顯示“No such file or directory”,跳到第三步,否則繼續。
2、備份和移除原來的ssh key設定:
因為已經存在key檔案,是以需要備份舊的資料并删除:
$ ls
config id_rsa id_rsa.pub known_hosts
$ mkdir key_backup
$ cp id_rsa* key_backup
$ rm id_rsa*
3、生成新的SSH Key:
輸入下面的代碼,就可以生成新的key檔案,我們隻需要預設設定就好,是以當需要輸入檔案名的時候,回車就好。
$ ssh-keygen -t rsa -C "郵件位址@youremail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):<回車就好>
然後系統會要你輸入加密串(Passphrase):
Enter passphrase (empty for no passphrase):<輸入加密串>
Enter same passphrase again:<再次輸入加密串>
最後看到這樣的界面,就成功設定ssh key了:
4、添加SSH Key到GitHub:
在本機設定SSH Key之後,需要添加到GitHub上,以完成SSH連結的設定。
用文本編輯工具打開id_rsa.pub檔案,如果看不到這個檔案,你需要設定顯示隐藏檔案。準确的複制這個檔案的内容,才能保證設定的成功。
在GitHub的首頁上點選設定按鈕:
選擇SSH Keys項,把複制的内容粘貼進去,然後點選Add Key按鈕即可:
PS:如果需要配置多個GitHub賬号,可以參看這個多個github帳号的SSH key切換,不過需要提醒一下的是,如果你隻是通過這篇文章中所述配置了Host,那麼你多個賬号下面的送出使用者會是一個人,是以需要通過指令
git config --global --unset user.email
删除使用者賬戶設定,在每一個repo下面使用
git config --local user.email '你的github郵箱@mail.com'
指令單獨設定使用者賬戶資訊
5、測試一下
可以輸入下面的指令,看看設定是否成功,
的部分不要修改:
$ ssh -T [email protected]
如果是下面的反應:
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
不要緊張,輸入
yes
就好,然後會看到:
Hi <em>username</em>! You've successfully authenticated, but GitHub does not provide shell access.
6、設定你的賬号資訊
現在你已經可以通過SSH連結到GitHub了,還有一些個人資訊需要完善的。
Git會根據使用者的名字和郵箱來記錄送出。GitHub也是用這些資訊來做權限的處理,輸入下面的代碼進行個人資訊的設定,把名稱和郵箱替換成你自己的,名字必須是你的真名,而不是GitHub的昵稱。
$ git config --global user.name "你的名字"
$ git config --global user.email "[email protected]"
設定GitHub的token
2012-4-28補充:新版的接口已經不需要配置token了,是以下面這段可以跳過了
有些工具沒有通過SSH來連結GitHub。如果要使用這類工具,你需要找到然後設定你的API Token。
在GitHub上,你可以點選Account Setting > Account Admin:
然後在你的指令行中,輸入下面的指令,把token添加進去:
$ git config --global user.name "你的名字"
$ git config --global user.token 0123456789your123456789token
如果你改了GitHub的密碼,需要重新設定token。
成功了
好了,你已經可以成功連接配接GitHub了。
使用GitHub Pages建立部落格
與GitHub建立好連結之後,就可以友善的使用它提供的Pages服務,GitHub Pages分兩種,一種是你的GitHub使用者名建立的
username.github.io
這樣的使用者&組織頁(站),另一種是依附項目的pages。
User & Organization Pages
想建立個人部落格是用的第一種,形如
beiyuu.github.io
這樣的可通路的站,每個使用者名下面隻能建立一個,建立之後點選
Admin
進入項目管理,可以看到是這樣的: 而普通的項目是這樣的,即使你也是用的
othername.github.io
:
建立好
username.github.io
項目之後,送出一個
index.html
檔案,然後
push
到GitHub的
master
分支(也就是普通意義上的主幹)。第一次頁面生效需要一些時間,大概10分鐘左右。
生效之後,通路
username.github.io
就可以看到你上傳的頁面了,beiyuu.github.io就是一個例子。
關于第二種項目
pages
,簡單提一下,他和使用者pages使用的背景程式是同一套,隻不過它的目的是項目的幫助文檔等跟項目綁定的内容,是以需要在項目的
gh-pages
分支上去送出相應的檔案,GitHub會自動幫你生成項目pages。具體的使用幫助可以參考Github Pages的官方文檔:
綁定域名
我們在第一部分就提到了在DNS部分的設定,再來看在GitHub的配置,要想讓
username.github.io
能通過你自己的域名來通路,需要在項目的根目錄下建立一個名為
CNAME
的檔案,檔案内容形如:
beiyuu.com
你也可以綁定在二級域名上:
blog.beiyuu.com
需要提醒的一點是,如果你使用形如
beiyuu.com
這樣的一級域名的話,需要在DNS處設定A記錄到一個ip(ping username.github.io),而不是在DNS處設定為CNAME的形式,否則可能會對其他服務(比如email)造成影響。
設定成功後,根據DNS的情況,最長可能需要一天才能生效,耐心等待吧。
Jekyll模闆系統
GitHub Pages為了提供對HTML内容的支援,選擇了Jekyll作為模闆系統,Jekyll是一個強大的靜态模闆系統,作為個人部落格使用,基本上可以滿足要求,也能保持管理的友善,你可以檢視Jekyll官方文檔。
你可以直接fork我的項目,然後改名,就有了你自己的滿足Jekyll要求的文檔了,當然你也可以按照下面的介紹自己建立。
Jekyll基本結構
Jekyll的核心其實就是一個文本的轉換引擎,用你最喜歡的标記語言寫文檔,可以是Markdown、Textile或者HTML等等,再通過
layout
将文檔拼裝起來,根據你設定的URL規則來展現,這些都是通過嚴格的配置檔案來定義,最終的産出就是web頁面。
基本的Jekyll結構如下:
|-- _config.yml
|-- _includes
|-- _layouts
| |-- default.html
| `-- post.html
|-- _posts
| |-- 2007-10-29-why-every-programmer-should-play-nethack.textile
| `-- 2009-04-26-barcamp-boston-4-roundup.textile
|-- _site
`-- index.html
簡單介紹一下他們的作用:
_config.yml
配置檔案,用來定義你想要的效果,設定之後就不用關心了。
_includes
可以用來存放一些小的可複用的子產品,友善通過
{ % include file.ext %}
(去掉前兩個{中或者{與%中的空格,下同)靈活的調用。這條指令會調用_includes/file.ext檔案。
_layouts
這是模闆檔案存放的位置。模闆需要通過YAML front matter來定義,後面會講到,
{ { content }}
标記用來将資料插入到這些模闆中來。
_posts
你的動态内容,一般來說就是你的部落格正文存放的檔案夾。他的命名有嚴格的規定,必須是
2012-02-22-artical-title.MARKUP
這樣的形式,MARKUP是你所使用标記語言的檔案字尾名,根據_config.yml中設定的連結規則,可以根據你的檔案名靈活調整,文章的日期和标記語言字尾與文章的标題的獨立的。
_site
這個是Jekyll生成的最終的文檔,不用去關心。最好把他放在你的
.gitignore
檔案中忽略它。
其他檔案夾
你可以建立任何的檔案夾,在根目錄下面也可以建立任何檔案,假設你建立了
project
檔案夾,下面有一個
github-pages.md
的檔案,那麼你就可以通過
yoursite.com/project/github-pages
通路的到,如果你是使用一級域名的話。檔案字尾可以是
.html
或者
markdown
或者
textile
。這裡還有很多的例子:https://github.com/mojombo/jekyll/wiki/Sites
Jekyll的配置
Jekyll的配置寫在_config.yml檔案中,可配置項有很多,我們不去一一追究了,很多配置雖有用但是一般不需要去關心,官方配置文檔有很詳細的說明,确實需要了可以去這裡查,我們主要說兩個比較重要的東西,一個是
Permalink
,還有就是自定義項。
Permalink
項用來定義你最終的文章連結是什麼形式,他有下面幾個變量:
-
檔案名中的年份year
-
檔案名中的月份month
-
檔案名中的日期day
-
檔案名中的文章标題title
-
文章的分類,如果文章沒有分類,會忽略categories
-
檔案名中的除去字首0的月份i-month
-
檔案名中的除去字首0的日期i-day
看看最終的配置效果:
-
/2009/04/29/slap-chop/index.htmlpermalink: pretty
-
/04-29-2009/slap-chop.htmlpermalink: /:month-:day-:year/:title.html
-
/blog/2009/04/29/slap-chop/index.htmlpermalink: /blog/:year/:month/:day/:title
我使用的是:
-
/github-pagespermalink: /:title
自定義項的内容,例如我們定義了
title:BeiYuu的部落格
這樣一項,那麼你就可以在文章中使用
{ { site.title }}
來引用這個變量了,非常友善定義些全局變量。
YAML Front Matter和模闆變量
對于使用YAML定義格式的文章,Jekyll會特别對待,他的格式要求比較嚴格,必須是這樣的形式:
---
layout: post
title: Blogging Like a Hacker
---
前後的
---
不能省略,在這之間,你可以定一些你需要的變量,layout就是調用
_layouts
下面的某一個模闆,他還有一些其他的變量可以使用:
-
你可以對某一篇文章使用通用設定之外的永久連結permalink
-
可以單獨設定某一篇文章是否需要釋出published
-
設定文章的分類category
-
設定文章的tagtags
上面的
title
就是自定義的内容,你也可以設定其他的内容,在文章中可以通過
{ { page.title }}
這樣的形式調用。
模闆變量,我們之前也涉及了不少了,還有其他需要的變量,可以參考官方的文檔:https://github.com/mojombo/jekyll/wiki/template-data
使用Disqus管理評論
模闆部分到此就算是配置完畢了,但是Jekyll隻是個靜态頁面的釋出系統,想做到關爽場倒是很容易,如果想要評論呢?也很簡單。
現在專做評論子產品的産品有很多,比如Disqus,還有國産的多說,Disqus對現在各種系統的支援都比較全面,到寫部落格為止,多說現在僅是WordPress的一個插件,是以我這裡暫時也使用不了,多說與國内的社交網絡緊密結合,還是有很多亮點的,值得期待一下。我先選擇了Disqus。
新增賬號什麼的就不提了,Disqus支援很多的部落格平台,參見下圖:
我們選擇最下面的
Universal Code
就好,然後會看到一個介紹頁面,把下面這段代碼複制到你的模闆裡面,可以隻複制到顯示文章的模闆中:
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'example'; // required: replace example with your forum shortname 這個地方需要改成你配置的網站名
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
配置完之後,你也可以做一些異步加載的處理,提高性能,比如我就在最開始頁面打開的時候不顯示評論,當你想看評論的時候,點選“顯示評論”再加載Disqus的子產品。代碼很簡單,你可以參考我的寫法。
$('#disqus_container .comment').on('click',function(){
$(this).html('加載中...');
var disqus_shortname = 'beiyuu';
var that = this;
BYB.includeScript('http://' + disqus_shortname + '.disqus.com/embed.js',function(){$(that).remove()}); //這是一個加載js的函數
});
如果你不喜歡Disqus的樣式,你也可以根據他生成的HTML結構,自己改寫樣式覆寫它的,Disqus現在也提供每個頁面的評論數接口,幫助文檔在這裡可以看到。
代碼高亮插件
如果寫技術部落格,代碼高亮少不了,有兩個可選插件DlHightLight代碼高亮元件和Google Code Prettify。DLHightLight支援的語言相對較少一些,有js、css、xml和html,Google的高亮插件基本上任何語言都支援,也可以自定義語言,也支援自動識别,也有行号的特别支援。
Google的高亮插件使用也比較友善,隻需要在
<pre>
的标簽上加入
prettyprint
即可。是以我選擇了Google Code Prettify。
結語
如果你跟着這篇不那麼詳盡的教程,成功搭建了自己的部落格,恭喜你!剩下的就是保持熱情的去寫自己的文章吧。