这篇主要是总结下折腾个人博客的经验,前人已经刷了无数攻略,这个副本并不难,只是需要花时间。遇到问题时,Google始终是你最好的老师...
0x01 Requirement
- 搭建简单,维护备份方便
- 写博客方便,支持MD格式
- 模板美观大方,可以装B,不会丑的狗带
- 社区活跃,遇到问题可以抱大神大腿
0x02 Solution
主要是三大类解决方案:
a. 商业化产品
- Lofter
- CSDN
b. 个人博客(CMS)
- Wordpress
- Durpal
c. 静态页面
- Pelican
- jekyll
- Ortopress
- 商业化产品首先不考虑,服务受提供商制约,用户体验有待提高,备份也很头疼,且没有折腾的意义...
- 使用过Wordpress,需要数据库等后面一套,略庞大,肯定需要独立空间,我懒...
自从搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门之后,国内的个人博客就如雨后春笋,资料大把,原理类似...
Static Site Generators记录了github中各个开源的静态网站生成器star的情况,排名前五的是jekyll(Ruby)、Octopress(Ruby)、Hexo(Javascript)、Hugo(Go)、Pelican(Python)
- Jekyll Jekyll在Github上有20000+stars,远远领先于第二名的关注度,笔者没用过ruby,且国内ruby源被GFWfuck后,设置淘宝源各种蛋疼...遂放弃
- Ortopress同理,但是看到别人做的效果挺好的就关注了下:陋室
0x03 Pelican
笔者使用Python,并且之前接触过Pelican,考虑了一下就选择了最熟悉的Pelican,毕竟它叫Pel I Can...
1.Introduce
- pelican是一个用python生成的静态站点生成器。具有以下特点:
- 支持Markdown和reStructuredText格式;
- 可以使用简单的命令生成文件;
- 具有简单易用的版本控制系统;
- 完全静态,可在任何地方输出;
2.Setup
安装pelican
pip install pelican Markdown
如有印刷格式上的需要,还需要安装typogrify
pip install typogrify
3.Usage
- pelican-quickstart创建站点到/var/www/pelican/,根据脚本提示配置参数
a.站点结构
yourproject/
├── content
│ └── (pages)
├── output
├── develop_server.sh
├── fabfile.py
├── Makefile
├── pelicanconf.py # Main settings file
└── publishconf.py # Settings to use when ready to publish
b.文档内容
- pelican支持三种格式:reStructuredText、markdown以及AsciiDoc
reStructuredText要求文件后缀为.rst,并且源文件格式如下:
My super title
##############
:date: 2010-10-03 10:20
:modified: 2010-10-04 18:40
:tags: thats, awesome
:category: yeah
:slug: my-super-post
:authors: Alexis Metaireau, Conan Doyle
:summary: Short version for index and feeds
This is the content of my super blog post.
Markdown要求文件后缀为.md, .markdown, .mkd, 或 .mdown,并且源文件格式如下:
Title: My super title
Date: 2010-12-03 10:20
Modified: 2010-12-05 19:30
Category: Python
Tags: pelican, publishing
Slug: my-super-post
Authors: Alexis Metaireau, Conan Doyle
Summary: Short version for index and feeds
This is the content of my super blog post.
还支持翻译、语法高亮、内置内容(模板)、从其他站点导入等功能;
c.输出和启动
- 编辑好Markdown或reStructuredText文件后,pelican会将内容转换为静态html格式,输出到output中
pelican /path/to/your/content/ [-s path/to/your/settings.py]
- 启动服务器
cd output
python -m SimpleHTTPServer #python2
python -m http.server #python3
- 打开浏览器http://192.168.1.112:8000/,预览效果;
d.配置主题
Pelican支持大量的开源主题,GitHub上的pelican-themes项目有几十套主题,大部分都带了效果预览图。可以从里面挑一个喜欢的主题样式来使用。还有一个更方便的挑选主题的方式,直接打开pelicanthemes挑选(加载略慢)。一个网页里就列出了几乎所有的主题。该博客使用pelican-bootstrap3主题,并在这套主题的基础上进行了一些定制。选定好喜欢的主题后,从GitHub上下载下来所有的主题,安装主题:
mkdir pelican
cd pelican
git clone https://github.com/getpelican/pelican-themes.git
pelican-themes -i pelican-bootstrap3
然后在pelicanconf.py里通过下面代码指定博客主题:
THEME = 'pelican-bootstrap3'
通常的做法是,选中一个自己喜欢的主题后,会进行一些定制。Pelican使用Jinja2来配置主题。一个主题的典型结构如下:
├── static
│ ├── css
│ └── images
└── templates
├── analytics.html // 这是Google Analytics的代码
├── archives.html // 这个是博客归档页面的模板
├── article.html // 这个是博客正文的显示模板
├── base.html // 这个是所有页面的父类模板,即所有页面都引用这个页面。比如网页导航栏啊之类的,都定义在这里
├── categories.html // 所有博客文章的分类列表
├── category.html // 某个博客分类的文章列表模板
├── index.html // 主页
├── page.html // 分页显示的模板
├── tag.html // 某类标签下的文章列表
└── tags.html // 所有的标签列表页面模板
稍微有点Jinja的知识加上一些HTML和CSS的知识,就可以自己定义主题了。
e.配置插件
插件同主题类似,到github上down下来,虽然大部分插件都是全主题可用的,但是也存在好用与否的问题, 有些插件在原生主题上就需要自己改base.css才能用,所以尽量配套选,避免麻烦.
git clone --recursive https://github.com/getpelican/pelican-plugins
将需要安装的插件添加到pelicanconf.py文件中,新版本将关键字改为PLUFIN_PATHS以及列表的形式。
PLUGIN_PATHS = [u"pelican-plugins"]
PLUGINS = [u"sitemap", u"tag_cloud", u"gzip_cache", u"related_posts", u"tipue_search", u"pelican-toc"]
tag_cloud, related_posts, gzip_cache参考手册设置即可
sitemap
Pelican的sitemap插件可以导出站点地图,Google Webmaster是Google的站长工具,方便Google收录博客:
a. 在pelicanconf.py中添加sitemap,同时别忘了设置SITEURL,否则生成的sitemap.xml不正确
SITEURL = u'https://pelucky.github.io'
SITEMAP = {
"format": "xml",
"priorities": {
"articles": 0.7,
"indexes": 0.5,
"pages": 0.3,
},
"changefreqs": {
"articles": "monthly",
"indexes": "daily",
"pages": "monthly",
}
}
b. 登录Google Webmasters,注册博客并测试sitemap,测试通过后提交,过段时间就可以查看Google已经收录了博客。
-
亦可以选择“Google抓取方式”,手动提交索引;抓取的结果在“抓取统计信息”页面中查看,参考关于我们的统计信息和数据
-
对于sitemap不熟悉的可以参考Google提供的创建和提交站点地图
-
同样可以添加robots.txt用于告知Google抓取的内容,参考了解 robots.txt 文件
tag_cloud
这个应该是必装的,否则右侧tag选项永远显示为空,在pelicanconf.py中添加:
DISPLAY_TAGS_ON_SIDEBAR = True
TAGS_URL = "tags.html"
tag_cloud = True
pelican-toc
添加Table of Contents,即可显示文章的目录,需要自行下载到pelican-plugins,参考pelican-toc,自带的extract_toc没这个方便...
在配置文件中添加:
PLUGINS = ['pelican-toc']
TOC = {
'TOC_HEADERS' : '^h[1-6]', # What headers should be included in the generated toc
# Expected format is a regular expression
'TOC_RUN' : 'true' # Default value for toc generation, if it does not evaluate
# to 'true' no toc will be generated
}
在模板文件中添加,可以添加到文章最上面或(article.html)sidebar处:
{% if article.toc %}
{{article.toc}}
{% endif %}
f.Google Analytics
去Google Analytics申请账号,会要求检验你拥有该站点的所有权,需要下载googlexxxx.html,上传并点击该链接来确认。记下跟踪ID。 在pelicanconf.py添加
GOOGLE_ANALYTICS = u'跟踪ID'
之后即可到Google Analytics的控制台查看访问情况;
g.一键Github
若要一键上传到Github,需要修改Makefile脚本两处地方:
publish:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
......
github: publish
cd $(OUTPUTDIR) ; git add . ; git commit -am 'Update pages' ; git push
以后写完文章在Pelican目录下执行make github就可以一键部署了。
h.取消代码中红框
在使用Markdown的代码块时,如果代码中有汉字或者按规定书写错误的代码,则生成的HTML文件中错误的代码会有红框框住,output/theme/pygment.css文件中定义了该样式,注释或者删除掉。
.err {
border:1px solid #FF0000;
}
由于output中的内容每次都会生成,故需要把模板中的pygment.css进行更换,如果之前使用了
pelican-themes -i pelican-bootstrap
安装,则一般会在如下位置,直接vim修改模板中的pygment.css:
pel@debian:~/pelican$ pelican-themes -p
/usr/local/lib/python2.7/dist-packages/pelican/themes
i.评论系统
在Disqus上申请一个站点,记牢Shortname(不需要加后缀),评论系统加载起来有点慢,国内也可以使用多说。 在pelicanconf.py添加
DISQUS_SITENAME = 'Shortname'
j.插入图片
有两种方法:
- 一种是使用云存储,设置为公开图片,直接链接过来,如Picasa来维护图片,推荐使用云图床;

- 另一种使用本地图片,参考,但Github有图片容量限制。content目录下建立一个 images目录 然后在 pelicanconf.py 中添加:
STATIC_PATHS = ["images"]
在文章中引用图片,路径要设置为本文件与图片文件中的相对路径,如果文件路径变更了,就需要修改图片的相对路径,那个真蠢...可参考:

k.设置域名
待续...
l.站内搜索
站内搜索有两种解决方案,一种是采用Google的站内搜索,另一种是使用静态搜索引擎;
-
Google站内搜索 由于Bootstrap支持Tipue Search,故没怎么折腾Google站内搜索,参考:pelican建站攻略补充(站内搜索,和标签云)
-
Tipue Search静态搜索引擎 原理就是每次生成静态网站的时候,同时会生成一个JSON格式的索引文件,前端加载一个检索入口即可搜索网站内容,比较适合中小型的静态网站;
PLUGINS = [u"tipue_search"]
Tipue Search
DIRECT_TEMPLATES = (('index', 'tags', 'categories', 'archives', 'search',))
SEARCH_URL = '/search'
Tips:
从pelican-plugins下git下来的Tipue Search有bug,搜索出来的URL会显示undefined,参考此处,将Tipue_Search更新至5.0即可,具体更新的方法参考Site search with Tipue for Pelican,要注意查看template/search.html中的路径;
m.从WordPress迁移到Pelican
- 导出WordPress数据;在 WordPress 后台 -> 工具 -> 导出。即可导出并下载包含全部文章、页面、评论、自定义栏目、分类目录和标签的 xml 文件。
- 将xml转成Markdown;使用 exitwp 自动处理xml文件。下载后将导出的 xml 放入 wordpress-xml 目录中,运行 python exitwp.py 即可将 xml 转成 Markdown。
- 需要注意的是转换出的文件注释部分,关于Tags,Category,Date等Meta部分需要按Pelican的形式进行格式调整,以便被Pelican解析,其实还是有点工作量的...
看文档发现,有pelican-import可以直接从wordpress导入,参考
n.URL配置
默认的URL太low了,可以更优雅...但要注意修改后本地图片的相对路径需要该.
打开pelicanconf.py配置文件,添加如下,具体配置请参见官方文档。
ARTICLE_URL = 'pages/{date:%Y}/{date:%m}/{date:%d}/{slug}/'
ARTICLE_SAVE_AS = 'pages/{date:%Y}/{date:%m}/{date:%d}/{slug}/index.html'
PAGE_URL = 'pages/{slug}/'
PAGE_SAVE_AS = 'pages/{slug}/index.html'
o.更换字体
Pelican默认的字体使用了Google的字体服务,会导致加载速度巨慢,更改国内的源或将字体文件放到github上
#static/css/目录下css文件中,例如gumby.css
@import url(//fonts.googleapi.com/css?family=Open+Sans:400,300,600,700);
#替换为
@import url(//fonts.useso.com/css?family=Open+Sans:400,300,600,700);
- 如何创建github-page、git使用就不介绍了...
- 之后的折腾就都来自Pelican docs
- Bootstrap3很值得看,里面介绍了模板支持的功能
- Blog Source code
- 感谢林无知的Nono熊
Comments
comments powered by Disqus