在github上搭建个人博客是个很有争议的话题,在知乎上也有看到 使用 GitHub Pages 来做博客是否道德? 这类问题。其实道不道德完全在你自己,github本身就是一个开放,分享,交流的平台。如果你的博客本身的目的就是记录分享,这完全符合github的期望,就完全没必要纠结这样的问题。但如果你的目的是商业用途,你完全可以购买github的服务,而不让自己有这种道德包袱。

jekyll用来搭建博客,是很有意思的一种体验,不同wordpress,Ghost,jekyll的所有内容都是静态的,不需要数据库,NO 数据库,使用起来也很简单,但它它最吸引我的是它专注的是博客内容本身,让你的博客更有质量而不是看起来更漂亮,而这正是体验其他博客之后发现自己真正想要的。

好了,说怎样搭吧:

准备工作

在正式搭建之前,这些基础条件你必需要有的:你先要有github帐号,本地装好了git,而且你的本地的git已经成功链接githug;这个过程很简单,先github注册帐号,然后本地装git,最后是建立链接,因为git可以使用的ssh协议,所以你本地生成公钥,提交给github,然后在设置一下帐号信息就好了,相信很多同学都是github的用户,都很熟悉这些了。如果还有疑问可以看这篇文章。

github新建仓库:既然要利用githug的page搭建博客,当然先要让github分配一个可访问的域名了,具体步骤就是登录你github -> New repository:具体可以看下图:

setting image 这里需要注意的是,域名的形式是username.github.io这里的username要和你github的帐户名相同,因为一个用户只能拥有一个这样的域名的,如果不一致的话,是无法访问的!

If the first part of the repository doesn’t exactly match your username, it won’t work, so make sure to get it right.

这里因为我已经添加过了,所以有提示name already;正常会显示一个绿色的小勾,说明没有问题了。

测试访问: 如果你这时候访问,发现404;原因很简单,因为你还没有提供任何可供访问的东西,那么怎样为我的bolg添加内容呢?
你不是已经在github上建立了一个username.github.io的仓库吗,你的博客内容当然也全部放在这个仓库里了,所以先把这个仓库拉到本地了:

$ git clone https://github.com/username/username.github.io

OK现在可以为博客加点内容了:

$ cd username.github.io
$ touch index.html #这里有必要提供这样一个index.html
$ vim index #随便写点东西 Hello World

当然这只是你本地添加的,接下来你就希望把你刚添加的放到线上,如果按我们平时的习惯,可能就需要cdn之类的部署上线,但因为全是静态的文件,你只需要用git提交到你远程的github下的username.github.io仓库就可以了:

$ git add --all
$ git commit -m "initial commit"
$ git push origin master

现在访问你的username.github.io应该就可以看到你刚写的Hello World了。

接下就是用jekyll搭建你的博客了

安装jekyll 首先当然你得先装jekyll,因为jekyll是基于ruby的,所以你先得有一个ruby环境,除此之外它还依赖一些其他的环境,你可以一起安装:

$ sudo apt-get install ruby ruby-dev make gcc nodejs

之所以会需要node你可以看一下这个github上的issue
如果你的环境已经搭好,是不是就直接可以安装呢?还有两个坑一定填完了再安装,切记:
1. linux下的用户,最好不要用packgae安装,因为官方并没有很多好的维护这一块,最好的方式是通过RubyGems来安装,Ruby社区很好的在维护;
2. 因为网络的原因(你懂的),放在rubygems.org上的资源你可能下载不了,所以你可以换一下rubygems的镜像源,国内淘宝的rubygems镜像做很好的,可以替代官方的版本。

$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l
https://ruby.taobao.org
# 请确保只有 ruby.taobao.org

如果按照上面说的,环境搭好,而且也换过镜像源了,那么你可以放心安装了;

$ sudo gem install jekyll

jekyll写博客 现在你可以两种方法使用jekyll New 来新建一个jekyll博客:
一种是直接到你的username.github.io文件下new一个新博客(不推荐)

$ cd username.github.io
$ jekyll new ./
$ jekyll serve --force_polling 
#这里的--force_polling 是因为jekyll版本更新后--watch不起作用了  
#和--watch一样的功能,旨在开发时监视文件改动并自动更新,不用每  
#次改动都要启动serve

现在可以你打开http://localhost:4000,应该就可以一个初始的jekyll博客了
setting image 当然这也是可以的,但这样会然人觉得缺少一个开发环境,因为改动和提交都在这里,特别是刚开始的去改博客内容时,改动很多,最后想还原也很麻烦;另外一点是,如果你看过jekyll介绍,你会发现jekyll所有最后生成的页面其实都放在_site这个文件中,所以你根本不用把所有文件都放到你的username.github.io仓库中,毕竟github只有300M免费空间。

正如上面说的,应该有一个开发环境,并且只提交自动生成的博客页面,及_site目录下的文件
所以这里提供另一种方案
先新建一个供开发使用的目录及这里的myblog-dev,开发都集中在这个目录下

$ mkdir myblog-dev
$ cd myblog-dev
$ jekyll new ./
$ jekyll serve --force_polling

然后只把自动生成的_site中的文件放到你的username.github.io仓库中;

当然你也不希望每次改动完了都要把_site里的文件复制到username.github.io中再提交吧。所以你可以设置成让每次在myblod-dev中的修改自动同步到username.github.io中,这样就安心在dev中开发,然后到username.github.io中去提交了。方法是在_config.yaml中添加:具体

source:  .
destination:  ../username.github.io/

修改保存之后

$ cd myblog-dev
$ jekyll build

就可以看到username.github.io下多了生成的我们想要的_site下的文件了,文件目录应该是这样的:

+username.github.io  
   index.html
   about
   css
   ...
+myblog-dev
   _posts
   _layouts  
   ....

贴一张图可能看的更清楚,里面的music,movie之类的文件夹是我自己的分类 setting image

接下来你就可以放心的在本地测开测试,待一切都OK之后,去username.github.io下提交,然后线上也和你本地一样了!