利用Jekyll搭建博客

less than 1 minute read

搭建个人博客主要有三种途径。一种是利用现成的博客网站,如Google的Blogger服务,新浪博客等。另一种则是利用软件生成博客网页, 再上传到自己的服务上。这一类博客生成软件有不少,比如应用最广泛的WordPress,和功能稍弱,但更为简洁的Jekyll和Pelican。

Jekyll的安装与配置

Jekyll是通过Ruby实现的一个工具包。在已经安装Ruby的情况下,安装Jekyll十分简单。和官方教程中略有不同的地方是,为了保持一个干净的根系统,安装时最好使用

gem install --user-install jekyll bundler

这样Jekyll会被安装在用户home文件夹下的.gem目录。博客根目录中的Gemfile定义了你的博客中所需要的插件:

gem "jekyll", "~>3.5"

# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "minimal-mistakes-jekyll"
gem "jekyll-archives"
gem "jekyll-scholar"
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
# gem "github-pages", group: :jekyll_plugins

# If you have any plugins, put them here!
group :jekyll_plugins do
   gem "jekyll-feed", "~> 0.6"
end

这里minimal-mistakes-jekyll为博客主题;jekyll-archives提供了按照年份,类别和标签对文章进行分类的功能;jekyll-scholar提供了为文章插入bibtex文献的功能。执行

$ bundle install

主题和插件就会被安装,注意在安装前要注意系统是否具备所需的包,特别是要安装libxslt1.1,否则会安装到nokogiri的时候会报错。_config.yml文件中还可以启用Jekyll自带的一些插件。

Jekyll使用kramdown语法,支持公式。_include/head.html中加入下面的内容可以将公式转换为.png文件显示在网页中。

<!-- Mathjax support -->
{% if page.mathjax %}
<script type="text/javascript" async
  src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
{% endif %}

kramdown中的数学环境与通常的latex语法略有不同。其行内与行间公式均由$$包裹,行间公式还需要在$$外面添加空行。Mathjax在网页上加载略慢,但是支持的环境非常多。上面代码中的

{% if page.mathjax %}
...
{% endif %}

是Jekyll生成网页时采用的语法,一些简单的语句可以实现一些对不同页面的个性化控制,比如

{% if page.layout == 'home' %}
...
{% endif %}

就可以把代码添加到博客的homepage.

通过执行

bundle exec jekyll build --incremental

命令可以在本地生成静态博客,默认是在_site目录下。注意bundle exec的部分是保证再生成过程中各种插件的调用的。

bundle exec jekyll serve --incremental

可以生成预览文件,在本地localhost:4000端口预览。注意:预览生成的网页链接都是指向localhost的,在上传服务器还是要执行一次build命令。

服务器的搭建

Github或者个人服务器都可以作为博客的伺服点。只需要把./_site文件夹下的文件上传到服务器端即可。服务器端可以使用apache2伺服。安装了apache2后,使用ufw enableufw allow来配置防火墙。将在本地生成的博客文件上传至在/var/www/your-domain-name文件夹中,再利用Apache2的virtual hosts功能实现域名访问。具体可以参见How To Set Up Apache Virtual Hosts.

推荐使用Let’s Encrypt服务加密网页,也就是使用https. 使用前要确保域名已经指向正确的ip,并设置好了virtual hosts. certbot --apache命令会根据/etc/apache2/site-available/中的配置文件生成对应的443端口使用的配置文件,其中包括了生成的证书信息。注意:使用https加密要求网页中的所有链接都使用了https,在Jekyll的配置文件中_config.yml中url要修改成正确的网址才能保证css style文件的正确加载。

其他一些与服务器管理相关的建议:

  • 使用ssh密钥实现免密登录服务器
ssh-keygen
ssh-copy-id user@host
  • 使用被加入了sudo组的用户来管理服务器,避免使用root权限登录服务器
adduser user sudo

缺陷

目前这种博客搭建方式最大的问题是缺少支持kramdown语法的所见即所得编辑器。虽然markdown的本意是使用文本进行格式编辑,但是考虑到大量的数学公式,所见即所得的编辑器还是可以节省不少时间的。typora是目前对kramdown语法支持最好的编辑器,但是其默认的数学环境仍然不同于kramdown,行间公式没有前后空行。作为妥协,可以使用atom进行文本编辑,把typora当作一个预览软件。