FANG KE (Coor)

Always Seeking an Adventure.

Pelican & GitHub Pages使用手记

Fri 17 March 2017

正式开始之前首先吐槽一下,呈现在这里的文章已经是”第三次创作“了。前两次的写作因为使用有道云笔记MAC OS客户端,由于未知原因,不仅文章未能同步至云端,本地的记录也消失不见,将此Bug反馈后未得到任何回复。。

不过不管有道云笔记怎么抽风,Pelican的好都值得我再写一遍此文,前两次就算是教训了!

此致敬礼,吐槽完毕,请看正文!

前言

在了解到静态博客之前,我曾使用Wordpress搭建我的个人博客。毫无疑问,Worepress可以说是目前为止最为强大的开源博客系统,大到资讯网站,小到个人博客都可以见到它的踪影。但是随着近些日子使用Markdown和Github的频次增加,越发感觉到用Markdown写作所带来的体验是以前那种“富文本”编辑器所不能及的。对于我这种英年早懒的人来说,Wordpress的很多所谓强大功能本身就是我所用不到的。像我这么少有的懒人,内容也没有那么高产,大多就是随便写写,打发打发时间。

于是最终我决定,通过GitHub Pages搭建一个纯静态的个人博客并自制一个主题。本文将首先介绍如何使用Pelican静态博客生成器和GitHub Pages服务搭建一个个人博客,后续的文章我会将主题的构建过程也分享给大家。

静态博客

顾名思义,静态博客的概念相对于动态博客而来。其实所谓静态博客,可以简单的理解为一个纯粹由HTML和CSS构建起来的网站系统。相较于比较流行的动态博客系统,它的主要优缺点可以总结如下。

优点:

  • 部署简单
  • 体量轻盈
  • 加载速度很快
  • 方便使用git进行版本控制
  • 方便直接使用Markdown进行写作

缺点:

  • 灵活性和扩展性相对较差
  • 功能通常较为简单
  • 图片的插入与管理较为繁琐(无媒体管理和富文本编辑器)

在实际的应用场景下,大家可以根据自己的需要灵活的选择。

既然说静态博客完全由HTML页面组成,这就意味着在网页中的每一个链接实际都对应有一个HTML文件,如果将这些文件逐个编写保存,那使用静态博客就是一件得不偿失的事情了。所以这就是为什么我们需要使用“生成器”,静态博客生成器可以直接将用户编写的诸如Markdown之类的文本文件和主题样式整合后,一次性输出所有必要的HTML文件,有了这些文件后,我们直接将其上传到网页服务器就完成了部署。

Pelican

Pelican是一款基于Python编写的纯静态博客生成器,支持使用restructuredText和Markdown格式编写的文章,可以说是一款比较成熟的静态博客系统。相关的技术细节可以在官方和文档中找到。

以及本文需要用的Python虚拟环境Virtualenv参考网站:

安装

请注意,Pelican的环境要求为 Python 2.7.X或Python 3.3+

该过程已Mac OS下的实践为例,其它平台大同小异,不再赘述。

比较简单的安装方式是直接使用pip获取Pelican包,Sierra自带有Python2.7但是没有pip包管理工具,所以我们首先通过easy-install安装pip:

$ sudo easy_nstall pip

有了pip以后有两种方式继续安装,对于很少使用Python的用户而言,可以直接跟随第一种安装方式;对于平时还使用Python进行其它项目开发的用户,建议使用第二种方式,虚拟环境的好处是可以将不同Python项目的包分开管理,将每一个项目所需要的包独立存储在为这个项目的虚拟环境目录下。

方式1:直接安装

$ sudo pip install pelican

方式2:在虚拟环境下安装

首先安装虚拟环境

$ sudo pip install virtualenv

然后为Pelican创建一个专属虚拟环境(该目录可以随意指定,以下方式为官方建议方式)

$ sudo virtualenv ~/virtualenv/pelican

$ cd ~/virtualenv/pelican

启动虚拟环境

$ source bin/activate

至此,接下来的所有操作都将在这个虚拟环境中完成,如果为其它的Python项目创建虚拟目录,该过程一样,只是存储目录有所不同。

用pip安装Pelican

$ sudo pip install pelican

初始化一个Pelican项目

通过以上的步骤,我们获取的只是Pelican的工具包,现在使用该工具包对生成器环境进行初始化。

首先进入到站点所在的目录下(可以自定义)

$ cd 目录名

运行快速启动指令

$ pelican-quickstart

如果一切正常,该指令会产生一系列的问题,回答完毕后就完成了网站设定的初始化,这些问题可以稍后在pelicanconfg.py中修改。

但是,在Mac OS X和Sierra中,存在运行该指令后报错的问题,报错内容为:

ValueError: unknown locale: UTF-8

这是由于系统自身的一个小bug导致的。你可以尝试在用户目录下, 找到文件.bash_profile,在文件内容的开头加入下面两行内容即可。

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

如果在用户目录一下找不到该文件,可以直接创建一个名为.bash_profile的文件,然后将以上内容写入即可

$ nano .bash_profile

至此,Pelican的安装和初始化就完成了。

写一篇文章

Pelican支持使用reStructuredTextMarkdownAsciiDoc formats等格式书写文章,我个人比较倾向于使用Markdown,关于Markdwon的语法这里不做赘述,请参考其官方网站:

Markdwon 语法参考

在文章正文开始之前,需要加入一些基本信息,如标题、修改时间、分类、关键词等等。

Title: 文章标题
Date: 2010-12-03 10:20
Modified: 2010-12-05 19:30
Category: Python
Tags: 关键词1, 关键词2
Slug: my-super-post
Authors: 维多克雨果
Summary: 这是一篇假冒维多克雨果的文章

这里开始正文。

生成博客

将上面写好的文章保存在项目目录下的content,使用pelican命令生成网站。

$ pelican content -s pelicanconfig.py

运行该指令后生成的静态HTML文件存放在output文件夹中。cd到output目录下,开启python的http服务即可预览网站的效果:

Python 2.7.X 用户请使用:

$ python -m SimpleHTTPServer

Python 3.3+ 用户请使用:

$ python -m http.server

现在就可以在浏览器中输入http://localhost:8000/查看博客了。

关于主题模板

Pelican提供了多样的主题供大家选择,大家可以在其GitHub的主题库中寻找自己喜欢的主题,然后下载或者clone到本地,保存到项目目录下。

Pelican主题库

在生成博客的命令中,使用-t参数说明要使用的主题所在的目录(如果在生成的过程中未指定所使用的主题,生成器将使用其默认的主题)。

$ pelican content -s pelicanconfig.py -t .../themename/

GitHub Pages

GitHub Pages是GitHub为用户提供的一种静态网站托管服务,没有空间限制而且可以绑定自己的域名(本博即托管于此)。

GitHub Pages 首页

如果没有GitHub账号请首先注册一个账号,然后建立一个名为username.github.io的仓库,请注意将这里的username替换成你自己的用户名(重要)。

完成了以这一步就可以在本地打开命令行,将该目录克隆下来:

$ git clone 仓库的git地址

克隆完成后该目录就建立好了,但是目前目录为空,将之前生成在output目录下的所有文件拷贝到该目录下,后执行:

$ git add -A

$ git commit -m "Initial Commit"

$ git push

这时访问http://username.github.io,应该就可以看到网站的内容了。

绑定自定义域名

首先进入GitHub刚才创建的仓库(静态站点)下,在setting中,将Custom domain设置成为你的域名。

然后到域名服务商,添加一个A解析,地址为以下二选一:

192.30.252.153 192.30.252.154

待到解析记录生效后,就可以用你的域名访问该博客了。更多关于自定义域名的设置请参考官方文档:

Setting up an apex domain

至此,关于使用Pelican和GitHub Pages搭建个人静态博客的内容就结束了,希望对大家有所帮助。