用 pelican 创建静态网站放到 GitHub 上

去年在 GoDaddy 买域名半送的 Linux 空间到期了,最近一直在找替代方案。大致的方向是想用 GitHub 免费的 github pages 作为 host,因为此前已经知道 jekyll 是一个选项。但是考虑到 jekyll 是基于 Ruby 的,而我又不想在电脑里再多装一个我不太可能会用到的编程语言,因此搜索了一下基于 Python 的方案,果然,很轻松就地找到了 pelican

以下是我用 pelican 创建静态网站并托管到 github pages 的流程,希望能让其他看到的人省点时间。另一点专门写出来的原因是,目前我在网上找到的关于 pelican 的教程绝大部分都是针对 Linux 系统的,像 make 之类的命令在 Windows 下根本就不适用,因此我也花了不少准备的时间才把这个系统搭起来。

  1. 准备工作

Python 环境,我已经有 Anaconda3,pelican 官网上建议使用 2.7,主要原因是怕用到第三方库不兼容,考虑到我的需求应该很简单,3.5 似乎也是可以用的。

安装额外的第三方库:pip install pelican markdown

  1. [可选]迁移原来 Wordpress 的文章

更新:用 pelican-import 导出文章时中文处理上有问题,会有丢失一部分内容的情况,因为我已经有用 jekyll-exporter 导出的 markdown 文件了,所以也没有深究是什么引起的。

Wordpress 自带了导出 xml 的功能,而 pelican 也有对这种文件的支持(根据文档,似乎还依赖pandoc这个神器)。在原博客管理后台下载了备份文件之后,切到文件所在目录,执行

pelican-import wordpress_output_file.xml -o output_dir_name -m markdown

这里我选择的标记语言格式是 markdown,默认是 rst。

  1. 在 github 上建立 repo

在 github 上建一个名为 username.github.io 的 repo,详细可参考这里

建好之后不需要添加 README,反正也看不到。

  1. 本地文件的准备

这里用的是我自己的办法,没有用文档推荐的用 ghp-import 的方法。我喜欢把设置保持为最简,然后慢慢添加自己需要的设置,这样 config 文件里所有的项我都知道它的用途。

在本地建立 Blog 文件夹,下面新建一个 contentoutput 文件夹,前者用来放 markdown 的源文件,后者放 pelican 生成的 html。然后新建一个 pelicanconf.py 的文件,里放一些相关的设置,我最初的设置是这样的:

# -*- coding: utf-8 -*-

AUTHOR = 'Charles Chen'
SITENAME = "Charles Chen's blog"
SITEURL = 'http://seekiu.github.io'

PATH = 'content'

TIMEZONE = 'Asia/Shanghai'

DEFAULT_CATEGORY = 'misc'

THEME = 'notmyidea'

ARTICLE_SAVE_AS = '{date:%Y}/{slug}.html'
ARTICLE_URL = '{date:%Y}/{slug}.html'

最后两行是为了用 slug 定义 URL 的格式,默认的是用标题,如果有中文用的是拼音,我觉得不太好,直接用 slug 自定义更可控。

然后在 Blog 文件夹下 git clone 相应的 repo 到 output 文件夹,这样以后更新内容之后,只需要在 output 文件夹里 git push 就可以更新了。(这也是我的笨办法和官方方法最大的不同)

做好这些,然后就可以在 content 文件夹里添内容了。每一次新建内容之后,cd 到 Blog 文件夹下,运行

pelican content -s pelicanconf.py

这样 output 文件夹就更新了。


关于 pelican 的安装和初始设置就到此为止了,以后想起来再更新更复杂的设置吧。

links

social