使用 Jekyll 搭建 Blog

2012-12-21 Friday

Jekyll 是一个简单的免费的 Blog 生成工具,类似 WordPress,但是不同的是,Jekyll 只是一个生成静态网页的工具,不需要数据库支持,不支持评论功能,只关注 Blog 本身的内容。

不过,可以配合第三方评论服务,例如 Disqus;最关键的是 Jekyll 可以免费部署在 Github 上,而且可以绑定自己的域名。

接下来,我们看看如何搭建一个 Blog 。

jekyll logo

一步步安装

可以通过如下方式一步步的安装测试。

1. 安装Jekyll

安装 Jekyll 环境。

----- 在Ubuntu平台上
# apt-get install ruby rubygems python-pygments
----- 在CentOS平台上
# yum install ruby rubygems ruby-devel rubygem-ffi

----- 安装jekyll时,通过选项--no-rdoc、--no-ri可以使安装最小化
# gem install rdiscount --no-rdoc --no-ri
# gem install jekyll --no-rdoc --no-ri
# gem install redcarpet kramdown                ← 2016.5.1之后Github只支持kramdown
# yum install nodejs

----- 测试环境是否安装成功
$ jekyll -v

在 CentOS 上,安装 Nodejs 时,需要安装 EPEL 源,否则会出错 Could not find a JavaScript runtime 。

2. 创建默认目录结构

Jekyll 会动态创建 Blog ,并将结果保存在 _site 中,因此访问时直接访问静态文件。

|-- _includes/                  ← 通常是一些页面的组建
|   |-- head.html
|   `-- sidebar.html
|-- _layouts/                   ← 一些通用的模版
|   |-- default.html
|   `-- post.html
|-- _posts/                     ← 就是blog了
|   `-- 2012-08-15-hello.md
|-- _site/                      ← 编译结果
|-- _config.yml                 ← 默认配置文件
|-- index.html
|-- archives.html               ← 通常用来展示归档内容
`-- people/                     ← 其它目录设置
    `-- essay.html              ← 可以通过http://xxx.com/people/essay.html访问

3. 运行

安装完成后可以在源码目录下执行如下命令,

$ jekyll server [port] -w --incremental

在浏览器中输入 http://localhost:4000,其中 -w 与 --watch 相同,修改文件时会自动刷新;--incremental 参数表示只编译更新的文件。

4. 上传到 github

Jekyll 是 GitHub Pages 的后台博客引擎,也就是说 Github 可以支持 Jekyll 部署的。

首先,必须在 github 上搭建一个名称为 username.github.io 的代码仓库,其中 username 就是每个 github 用户的用户 ID,只有这样名称的库才能被 github 用于链接到个人博客。

需要注意的是,username 不区分大小写。

jekyll github logo

可以通过如下方式将更改提交到 github,可以添加 .gitignore 文件,文件内容为。也就是在提交到 github 时,忽略动态生成的网页,忽略备份,忽略尚未完成的文章(未完成的文章使用 _init.md 作为后缀)。

_site/
*.bak
_posts/*_init.md

常用操作如下。

----- 通过如下两个方式设置远端
$ git remote set-url origin git@github.com/kfpandahyy/kfpandahyy.github.io.git
$ git remote add origin https://github.com/kfpandahyy/kfpandahyy.github.io.git

$ git add -A                      ← 添加目录下所有的文件
$ git ls-files                    ← 查看已经管理的文件
$ git commit -a -m "comment"      ← 提交添加注释
$ git push                        ← 推送到远端,也就是github

5. MarkDown 语法

如下是一些常见的 Markdown 语法,以及转换后的 tag 。

markdown

配置优化

配置文件

也就是 _config.yml ,详细可以参考 官方配置文件讲解,如下是我的一个简单配置文件。

gems: [jekyll-paginate]
paginate: 8
permalink: /blog/:title.html    # 默认是通过月份分割,此时只使用标题
404: 404.html
mardown: kramdown
highlighter: pygments

注意:现在不再支持 auto: true ,应该在启动时使用 --watch/-w 参数。从 2016.5.1 之后,Markdown 引擎只支持 kramdown,其它的 rdiscount、redcarpet 将不再支持。

添加分类

对于 blog 可以在头部通过如下方式设置 。

----- 单个的分类
category: cate

----- 如果是多个分类应该使用
categories: cate1 cate2
categories: [cate1, cate2]

为文章设置好分类之后,就可以读取分类列表了,所有的分类都在 site.categories 变量中,所以只遍历它,就可以把分类读取出来, 其中: category | fist 为分类名称, category | last | size 为该分类下文章数量。

如果 Category 为中文,显示将会出错,可以通过如下方式修改。

permalink: /:blog/:year/:month/:day/:title
permalink: /blog/:year/:month/:day/:title

头部信息

---
source: http://foobar.com/blog/test     # 如果有引用则指定引用的URL
title: 使用 Jekyll 搭建 Blog             # 本文章的标题
layout: post                            # 使用的模版
comments: false
language: chinese
category: [linux, program]
keywords: 关键词,通过英文逗号分割
description: 文章的描述。
---

字体

有些字体可以从网站上下载,不过对于中文来说,如果要覆盖所有的中文字体就会导致下载比较大的字体包,所以除非固定使用的字,建议还是使用系统自带的。

可以从 www.dafont.com 下载相应的字体。

/* 为了让多个浏览器支持,可以写成如下格式 */
@font-face {
 font-family: 'YourWebFontName';
 src: url('YourWebFontName.eot'); /* IE9 Compat Modes */
 src: url('YourWebFontName.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
      url('YourWebFontName.woff') format('woff'), /* Modern Browsers */
      url('YourWebFontName.ttf')  format('truetype'), /* Safari, Android, iOS */
      url('YourWebFontName.svg#YourWebFontName') format('svg'); /* Legacy iOS */
 font-weight: normal;
 font-style: normal;
}
/* 代码中使用 */
<h2 class="neuesDemo">Neues Bauen Demo</h2>

/* 设置CSS格式 */
h2.neuesDemo {
  font-family: 'NeuesBauenDemo'
}

添加 TOC

网上有介绍使用 Bootstrap 的 Affix & Scrollspy 组件的,不过配置调试起来有些麻烦,不太符合需求,所以就用 javascript 实现了一个简单的 Table Of Contents 。

详细可以直接查看 main.js 源码,会自动区分是否是 post 页面,且文章的内容最高 head 是 h2 。

关于 ScrollSpy 内容,可以参考 为Jekyll博客添加目录与ScrollSpy效果,或者 本地文档

添加搜索

其中功能比较完善的是 jekyll-lunr-js-search,利用 lunr.js 实现的全文搜索,不过同样配置也有些麻烦,暂时就先不考虑了。

在此,简单实现了搜索,在根目录下保存了一个 json 格式文件,包括了需要搜索的内容,页面加载时同样会请求该文件,在前端进行搜索。

高亮显示

需要安装 Python、easy_install、Pygments 工具,对于一些平台,如果 easy_install 没有安装,可以通过如下命令安装。

# apt-get install python-setuptools
# easy_install Pygments
# gem install pygments.rb

设置 _config.xml,注意 pygments: true 选项已经取消,目前采用的是 highlighter 。

Pygments 提供了多种样式,比如’native’、’emacs’、’vs’ 等等,可以从 Pygments demo 中选择某种语言的例子,支持的语法高亮可以查看 Available lexers,也可以参考如下 网站 自定义高亮格式。

通过下面的命令可以查看当前支持的样式:

$ python
>>> from pygments.styles import STYLE_MAP
>>> STYLE_MAP.keys()
['monokai', 'manni', 'rrt', 'perldoc', 'borland', 'colorful', 'default', 'murphy', 'vs', 'trac', 'tango', 'fruity', 'autumn', 'bw', 'emacs', 'vim', 'pastie', 'friendly', 'native']

选择一种样式,应用在 Jekyll 中执行如下命令,其中 “native” 是样式名,”html” 是 formatter 。

$ pygmentize -S native -f html > pygments.css

优化

去除 a 标签虚线

在 CSS 中添加如下内容即可。

a:focus{outline:none;}

响应式

实际上利用的是 BootStrap 的栅格系统,sidebar 的标签内容如下。

<div class="col-lg-3 visible-lg blog-sidebar">

也就是只有在 lg 大小的屏幕时,才会显示侧边栏。

SEO 技巧

Search Engine Optimization, SEO 也就是搜索引擎优化,指遵循搜索引擎的搜索原理,对网站结构、网页文字语言和站点间互动外交略等进行合理规划部署,以改善网站在搜索引擎的搜索表现,进而增加客户发现并访问网站的可能性。

在 Github 中,有一个 jekyll-seo-tag 插件可以参考,不过暂时没有采用,防止 Github 不兼容。

1. 标签优化

title 通常是标题名+网站名称;另外增加适当的 keywords、description、robots 等标签。

<title>使用 Jekyll 搭建 Blog | Kfpanda's Blog</title>
<meta name="keywords" content="jekyll,github,搭建,免费">
<meta name="description" content="在此介绍如何通过 Jekyll 以及 Github 搭建个人的免费 blog 网站,包括了如何搭建,如何进行优化,配置 SEO 相关,一些不错的网站。另外,关键是所有的东西都可以自己控制,可以很方便记录一些常见文章。">

2. 站长工具

通常有 GoogleBaidu 等搜索引擎的站长工具,通常需要在网站的 <head> </head> 头部添加类似如下的特定元标记,用于标记确实是你网站,也就是用于认证。

<meta name="baidu-site-verification" content="B786jeR0MV" />

这样就有利于搜索引擎的收录。

参考

可以参考中文官方网站 Jekyll 将纯文本转化为静态网站和博客 或者参考英文网站 Jekyll Transform your plain text into static websites and blogs ;其中可以参考 各种 blog 模版

关于搭建 Blog 可以查看 Jekyll和Github搭建个人静态博客 中的介绍;还有两篇之前保存的 用Jekyll构建静态网站教你一步一步搭建Jekyll博客,也可以参考本地保存的 blog1blog2blog3

Markdown 语法的目标是:成为一种适用于网络的书写语言,详细可以参考 Markdown 语法说明 (简体中文版),或者 本地保存文档


About This Blog

Recent Posts

Categories

Related Links

  • RTEMS
    RTEMS
  • GNU
  • Linux Kernel
  • Arduino

Search


This Site was built by Huang Yongyao, generated with Jekyll, and is hosted on GitHub Pages
©2012-2017 – Huang Yongyao