博客搭建——Pelican

1、简介

我一直建议每个开发者都要有写博客记笔记的习惯,一来可以沉淀知识,二来可以帮助别人,我使用过很多博客平台,也用Python开发过博客系统,就这么个东西折腾好几年,直到我用Pelican之前,一直找不到理想的产品。

Pelican 是基于Python实现的开源静态博客系统,所谓静态博客系统就是无需数据库,每一篇文章会事先渲染成HTML静态文件,访问速度非常快。由于选用了响应式网页设计的主题,所以在手机上的浏览效果也相当赞。

2、特征

Perlican是用Python实现的一个静态网站生成器,支持reStructuredText或Markdown。它支持以下功能:

  • 博客文章和静态网页。
  • 支持评论。评论是通过第三方服务Disqus支持的。即评论数据保存在第三方服务器上。
  • 主题支持。
  • 把博客文章生成PDF格式文档。
  • 多语言博客支持,如可以用英文和中文写同一篇博客。不同语言访问者访问相应语言的博文。
  • 支持Atom/RSS订阅。
  • 博文中代码高亮支持。
  • 博客搬家支持(WordPress, Dotclear, 或RSS feeds)。
  • 支持插件,如Twiter, Google Analytics等。

3、为什么选择Pelican

首先排除掉WordPress之类的CMS系统。因为我不想要数据库,我只需要一个轻量级的静态网站生成器。我的博客使用Markdown编写,且保存在GitHub上。我想要的,只是用Markdown写完博客之后,git commit + git push即可直接发布到博客网站上。

  • 使用Python实现。由于最近在学习Python,我可以阅读源码并按照我的需求来改造Pelican使之完全符合我的需求。下次学习Ruby,用jekyll再折腾一遍。因为Jekyll是用Ruby实现的。且GitHub Pages的后台就是用Jekyll,到时可直接用GitHub Pages实现个人博客。
  • 足够轻量级。总的代码量才1MB多。安装也方便。
  • 有一堆现成的主题可以使用。这对我这种非专业前端的开发者来说,省了不少事。
  • 文档齐全。
  • 开发活动活跃。GitHub上代码提交活跃。上面文章里介绍的很多博客系统基本上都2+年前就停止更新了。

最后两点对使用任何开源工具来说都是很重要的,只有开发活跃,社区资源多,文档齐全,遇到问题的时候才能较快地得到解决。

4、Pelican安装与配置

创建虚拟环境并升级pip

[root@10-60-249-255 ~]# python3 -m venv myenv
[root@10-60-249-255 ~]# source myenv/bin/activate
(myenv) [root@10-60-249-255 ~]# pip install --upgrade pip
 

创建博客项目

(myenv) [root@10-60-249-255 ~]# mkdir ~/blogs
(myenv) [root@10-60-249-255 ~]# cd ~/blogs
#生成配置文件(后面都可以通过修改配置文件来手动修改这些设置)
(myenv) [root@10-60-249-255 blogs]# pelican-quickstart
Welcome to pelican-quickstart v3.4.0.

This script will help you create a new Pelican-based website.

Please answer the following questions so this script can generate the files
needed by Pelican.

> Where do you want to create your new web site? [.]
> What will be the title of this web site? huqi
> Who will be the author of this web site? huqi
> What will be the default language of this web site? [en]
> Do you want to specify a URL prefix? e.g., http://example.com   (Y/n)
> What is your URL prefix? (see above example; no trailing slash) http://w7.lovezyyhq.top
> Do you want to enable article pagination? (Y/n) Y
> How many articles per page do you want? [10]
> Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n) Y
> Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n)
> Do you want to upload your website using FTP? (y/N) N
> Do you want to upload your website using SSH? (y/N) y
> What is the hostname of your SSH server? [localhost] w7.lovezyyhq.top
> What is the port of your SSH server? [22]
> What is your username on that server? [root] centos
> Where do you want to put your web site on that server? [/var/www] /home/centos/blogs
> Do you want to upload your website using Dropbox? (y/N) N
> Do you want to upload your website using S3? (y/N) N
> Do you want to upload your website using Rackspace Cloud Files? (y/N) N
> Do you want to upload your website using GitHub Pages? (y/N) N
Done. Your new project is available at /home/huqi/lab/blogs

<!–其中第14行的`http://w7.lovezyyhq.top`以及第21行的`w7.lovezyyhq.top`是我的域名,如果你只是在本机试验,可以填localhost。–>

配置pelicanconf.py和publishconf.py

(myenv) [root@10-60-249-255 blogs]# vim pelicanconf.py 
AUTHOR = 'Hu Qi'
SITENAME = 'w7.lovezyyhq.top'
SITEURL = 'http://w7.lovezyyhq.top'
DISQUS_SITENAME = 'huqi'

PATH = 'content'

TIMEZONE = 'Asia/Shanghai'

DEFAULT_LANG = 'zh'

# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None

# Blogroll
LINKS = (('Pelican', 'https://getpelican.com/'),
        ('Python.org', 'https://www.python.org/'),
        ('Jinja2', 'https://palletsprojects.com/p/jinja/'),
        ('You can modify those links in your config file', '#'),)

# Social widget
SOCIAL = (('You can add links in your config file', '#'),
        ('Another social link', '#'),)

DEFAULT_PAGINATION = 10
MD_EXTENSIONS = [
       "extra",
       "toc",
       "headerid",
       "meta",
       "sane_lists",
       "smarty",
       "wikilinks",
       "admonition",
       "codehilite(guess_lang=False,pygments_style=emacs,noclasses=True)"]

CNZZ_ANALYTICS = True
MONTH_ARCHIVE_SAVE_AS = 'posts/{date:%Y}/{date:%m}/index.html'
THEME = "themes/foundation-default-colours"
# Uncomment following line if you want document-relative URLs when developing
#RELATIVE_URLS = True
  • 第2行:的SITENAME是博客网站的名称,可以是任何字符。
  • 第3行:是博客网站的网址,这个字段在本地开发和发布版本是不一样的,本地直接填localhost即可,发布版本里需要填博客网址。
  • 第4行:我使用了Disqus作为我的评论系统,Disqus也是YC毕业生。启用Disqus评论系统非常简单,在官网上注册一个Disqus帐户,然后把帐户名填在DISQUS_SITENAME值里即可启用。我的Disqus帐号刚好也是kamidox。
  • 第29-38行:这里是配置Markdown扩展,用来支持代码高亮。并且使用Emacs风格的代码高亮。
  • 第40行:由于GFW的存在,我把Google Analize换成了国内的CNZZ统计。
  • 第42行:我的博客使用了foundation-default-colours这套主题。

5、配置主题

挑选主题

(myenv) [root@10-60-249-255 blogs]# mkdir ~/pelican
(myenv) [root@10-60-249-255 pelican]# cd ~/pelican
(myenv) [root@10-60-249-255 pelican]# git clone https://github.com/getpelican/pelican-themes.git
(myenv) [root@10-60-249-255 pelican]# cp -rp pelican-themes ~/blogs/
(myenv) [root@10-60-249-255 pelican]# cd ~/blogs/
(myenv) [root@10-60-249-255 blogs]# mv pelican-themes themes

pelicanconf.pypublishconf.py里通过下面代码指定博客主题

THEME = "themes/foundation-default-colours"

主题的典型结构

(myenv) [root@10-60-249-255 themes]# tree foundation-default-colours
├── static
│   ├── css
│   └── images
└── templates
  ├── analytics_cnzz.html // 这个是我添加的使用cnzz的统计服务的代码
  ├── analytics.html     // 这是Google Analytics的代码
  ├── archives.html       // 这个是博客归档页面的模板
  ├── article.html       // 这个是博客正文的显示模板
  ├── base.html           // 这个是所有页面的父类模板,即所有页面都引用这个页面。比如网页导航栏啊之类的,都定义在这里
  ├── categories.html     // 所有博客文章的分类列表
  ├── category.html       // 某个博客分类的文章列表模板
  ├── index.html         // 主页
  ├── page.html           // 分页显示的模板
  ├── tag.html           // 某类标签下的文章列表
  └── tags.html           // 所有的标签列表页面模板

撰写博客

#在`content`目录下新建一个xxx.md,使用Makedown语法直接撰写文档即可
(myenv) [root@10-60-249-255 content]# vim xxx.md
Title: 使用Pelican搭建博客系统
Date: 2014-10-07 22:20
Modified: 2014-10-07 23:04
Tags: python, pelican
Slug: build-blog-system-by-pelican
Authors: Joey Huang
Summary: 本文介绍了Pelican的特性;选择Pelican的理由以及从头安装配置,搭建出一个可运行的独立博客系统。
Status: draft
  • 第5行:Slug是文档的唯一标识,生成html时,会直接使用这个值当html的文件名。所以,不同博客文章这个值需要保证唯一性,否则生成html时会报错。
  • 第8行:这个表示本文是草稿。比如我们一篇博客经常不是一次性写完的,写了一半暂不想让读者看到,或者写完想让别人帮忙审查一下,就可以加这一行标识。这样Pelican在处理时,这篇文章也会生成html,但不会放在博客的主页及分类索引里,这样普通的读者一般看不到这个文章。有这个标识的文章生成时放在output/drafts目录下,你就可以通过分享url的方式让你的co-worker帮你review你的文章。

<!–我们可以在content目录下任意建子目录来组织管理博客文章。由于我们在设置文件里指定这个值USE_FOLDER_AS_CATEGORY = True,这样这些目录名称就自动变成博文分类的目录了。–>

6、预览博客文章

#启动预览服务器
(myenv) [root@10-60-249-255 blogs]# make devserver

这条命令会自动使用pelicanconf.py的配置文件来生成html网页,同时在本地的8000端口上启动一个http服务器,供你预览文章。在浏览器里输入http://w7.lovezyyhq.top:8000来实时预览效果。

图片

7、停止预览服务

#在博客项目根目录上运行`make stopserver`来停止这个预览服务以及数据监控功能
(myenv) [root@10-60-249-255 blogs]# make stopserver

8、配置Nginx

安装Nginx

(myenv) [root@10-60-249-255 blogs]# yum install nginx

编辑配置文件

(myenv) [root@10-60-249-255 blogs]# vim /etc/nginx/nginx.conf
server {
listen 80 default_server;
server_name w7.lovezyyhq.top;
root /home/centos/blogs;

location / {
  index index.html;
}
}
  • 第3行:这个是服务器地址。这里使用本机作为测试服务器就填localhost,如果是配置服务器,就要填服务器的域名。比如我的服务器上,这行是配置成w7.lovezyyhq.top。
  • 第4行:这个设置成博客文章的根目录。这个使用本机作为测试服务器,所以直接填博客项目的output目录。如果是在服务器上,我是直接配置成/home/centos/blogs。

重启一下Nginx服务

(myenv) [root@10-60-249-255 blogs]# sudo service nginx resart

声明:文中观点不代表本站立场。本文传送门:http://eyangzhen.com/414793.html

(0)
联系我们
联系我们
分享本页
返回顶部