I recently switched my blog from Google Blogger to GitHub Pages, here is how I built my blog. I’ll go through the following:
- Install Jekyll on Raspberry Pi
- Setup Jekyll Theme
- Post a new article
- Images minimization
- Commit to GitHub
Using Jekyll and Minimal Mistake build a blog and host on GitHub and Raspberry Pi(or Ubuntu).
Requirements:
- Raspberry Pi(or Ubuntu)
- GitHub account
- Jekyll 2.2+
- Minimal Mistake
- Grunt
If you have no idea with these things, here are useful resources:
How Jekyll Works
Jekyll Installation
Minimal Mistake Theme Setup
GitHub Pages
Getting started - Grunt
Jekyll Installation
Because some packages are out of date in Raspberry Pi’s repository, we are going to install packages manually.
Jekyll requirements:
- Ruby
- RubyGems (default in Ruby1.9 above)
- NodeJS or another JavaScript runtime (it’s for CoffeeScript support)
Build packages using Raspberry Pi will spend a lot of time. Ruby took me about 80 minutes and NodeJS around 4 hours. So have a walk after make
:-).
Install Ruby2.2
$ wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.0.tar.gz
$ tar xf ruby-2.2.0.tar.gz
$ cd ruby-2.2.0
$ ./configure
$ make
$ sudo make install
Install NodeJS
$ wget http://nodejs.org/dist/v0.10.36/node-v0.10.36.tar.gz
$ tar xf node-v0.10.36.tar.gz
$ cd node-v0.10.36
$ ./configure
$ make
$ sudo make install
Jekyll Theme Setup
Install Jekyll Theme is pretty easy, download and do some modify in _config.yml.
I use the Minimal Mistake for example, you can find the others on Jekyll Themes.
Steps:
- Download Minimal Mistakes
- Unzip
- Install all dependencies via
bundle install
$ wget https://github.com/mmistakes/minimal-mistakes/archive/master.zip
$ unsip master.zip
$ cd minimal-mistakes-master
$ sudo gem install bundler
$ bundle install
$ jekyll s
Now you can connect to http://127.0.0.1:4000 see the prototype.
If you don’t know how to modify _config.yml, Please refer to Site Setup or my _config.yml.
I got a problem when I was running jekyll s
, to solve this problem remove the Gemfile.lock
file and it’s work properly.
$ jekyll s
WARN: Unresolved specs during Gem::Specification.reset:
pygments.rb (~> 0.6.0)
redcarpet (~> 3.1)
jekyll-watch (~> 1.1)
classifier-reborn (~> 2.0)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
/usr/local/lib/ruby/gems/2.2.0/gems/jekyll-2.5.3/bin/jekyll:21:in `block in <top (required)>': cannot load such file -- jekyll
/version (LoadError)
from /usr/local/lib/ruby/gems/2.2.0/gems/mercenary-0.3.5/lib/mercenary.rb:18:in `program'
from /usr/local/lib/ruby/gems/2.2.0/gems/jekyll-2.5.3/bin/jekyll:20:in `<top (required)>'
from /usr/local/bin/jekyll:23:in `load'
from /usr/local/bin/jekyll:23:in `<main>'
$ rm Gemfile.lock
Post a new article
The simplest way to post an article is create a file with date prefix in _post folder and fill in header, but as a lazy person like me Minimal Mistake provide octopress
command to create a new post. Personally, I use vim-jekyll instead.
Use octopress
Use vim-jekyll
After vim-jekyll is installed, add configuration in .vimrc
is shown below:
{% highlight vim %} let g:jekyll_post_dirs = [’_posts’] let g:jekyll_post_extension = ‘.md’ let g:jekyll_post_template = [ \ ‘—’, \ ’layout: post’, \ ’title: “JEKYLL_TITLE”’, \ ‘modified: ‘, \ ‘categories: ‘, \ ‘comments: true’, \ ’excerpt:’, \ ’tags: []’, \ ‘image:’, \ ’ feature:’, \ ‘date: “JEKYLL_DATE”’, \ ‘—’, \ ‘’] {% endhighlight %}
Images minimization
Gruent is a JavaScript Task Runner performs repetitive tasks. Minimal Mistakes have a Gruntfile already, we can use it for minimizing images and JavaScript, but we have to install Gruent first and install dependencies via npm install
. By default it minimizes all scripts into scripts.min.js
and optimize .jpg, .png, and .svg files in the images/ folder.
Alternatively, you can use grunt imagemin
to minimize images only.
$ cd minimal-mistakes-master
$ sudo npm install -g grunt-cli
$ sudo npm install
$ grunt
Commit to GitHub
You can host your blog by your own or use GitHub Pages, how to work with GitHub Pages:
- Create a repository called account.github.io (mine is oopsmonk.github.io)
- Clone repository to your blog folder
- Commit to GitHub
Yes, it’s extremely convenient and easy, thanks GitHub.
Here is what I did:
$ cd minimal-mistakes-master
$ git clone https://github.com/oopsmonk/oopsmonk.github.io.git .
$ git add .
$ git commit
$ git push
Then you can see your blog at https://account.github.io
Conclusion
Create a Jekyll blog doesn’t like Google Blogger, even use themes to build a blog, it’s not ready to go after unboxing.You have to do some modifications, understanding HTML, CSS, and Jekyll is necessary. Here are Pros/Corns for using GitHub Pages with Jekyll.
Pros
- Flexible customization
- Keep contents in local or on Internet
- Offline writing and preview
- Write in terminal
Corn
- Learning curve