[git]用pelican搞一个本身的blog(已完成)

pelican

Pelican Static Site Generator, Powered by Python:Pelican是python语言写的静态网站生成器。由于我一直打算用github pages作一个博客,如今已经学会用Hexo在github pages上作博客了。可是我一想:我一个pythoner,干吗不用python写的静态网站生成器。我想应该是网上教程太少,那我今天就来搞一搞。顺便记录下来,整理出一个教程,但愿一切顺利!css


最终效果:blog.xueweihan.comhtml

开始

1.首先用virtualenv建立一个envpython

mkdir blog
cd blog
virtualenv env
source env/bin/activate  #激活环境

2.使用pip安装pelican和markdownjquery

pip install pelican
pip install markdown

3.建立pelican目录结构git

pelican-quickstart
# 根据提示进行设置

> Where do you want to create your new web site? [.]
> What will be the title of this web site? 削微寒
> Who will be the author of this web site? xueweihan
> What will be the default language of this web site? [en] zh
> 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) blog.xueweihan.com
> Do you want to enable article pagination? (Y/n)
> How many articles per page do you want? [10]
> What is your time zone? [Europe/Paris] Asia/Shanghai
> Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n)
> 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) n
> 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)
Done. Your new project is available at /Users/xueweihan/Documents/blog

文件结构以下:程序员

blog/
├── content              # 写的文章放这里
├── output               # 生成的输出文件(发布的内容)
├── develop_server.sh    
├── Makefile             # 方便管理博客的Makefile
├── pelicanconf.py       # 主配置文件
└── publishconf.py

咱们下面只用到我解释的这几个目录和文件,大体有个印象便可github

4.编写文章测试下效果web

Date: 2016-02-28
Title: 测试
Tags: 测试
Slug: test

# pelican
Pelican Static Site Generator, Powered by Python:Pelican是python语言写的静态网站生成器。由于我一直打算用git pages作一个博客,如今已经学会用Hexo在git pages上作博客了。可是我仍是一想:我一个pythoner,干吗不用python写的静态网站生成器。应该是网上教程太少,那我今天就来搞一搞。顺便记录下来,整理出一个教程,但愿一切顺利!

在content目录下建立一个名为:test.md的markdown文件,把上面的那些内容放进去,用来测试效果。浏览器

5.本地查看效果bash

# 在blog目录下执行
pelican content # 根据content中的内容,生成静态网站到output目下

# 在output目录下执行
python -m pelican.server

以上两个命令执行完,没有报错的话就用浏览器打开:127.0.0.1:8000,效果以下:

输入:ctrl + c 中止服务

5.上传到github pages 如今就差最后一步,上传到github pages上面。 一步步的来:

首先在github上建立一个项目,Repository name填写:你的github用户名.github.io 以下图:

而后在output目录依次输入:

git init
git add .
git commit -m "pelican static blog test"
git remote add origin git@github.com:你的github用户名/你的github用户名.github.io.git
# 例如个人就是:git@github.com:521xueweihan/521xueweihan.github.io.git
git push -u origin master

最后访问:http://你的github用户名.github.io/ 例如个人就是:http://521xueweihan.github.io/

页面以下图:

简化发布流程

还记得Makefile文件吗?咱们经过修改这个文件,实现1条指令发布博客到github pages上。

blog目录下的Makefile文件中的内容替换成下面的内容(原Makefile文件的内容都不要)

PY?=python
PELICAN?=pelican
PELICANOPTS=

BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py

DEBUG ?= 0
ifeq ($(DEBUG), 1)
	PELICANOPTS += -D
endif

RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
	PELICANOPTS += --relative-urls
endif

html:
	$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)

clean:
	[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)

regenerate:
	$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)

serve:
ifdef PORT
	cd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT)
else
	cd $(OUTPUTDIR) && $(PY) -m pelican.server
endif

publish:
	$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)

github: publish
	cd $(OUTPUTDIR) ; git add . ;  git commit -m '更新博客' ; git push origin master

更新博客流程

  1. 把写好的markdown格式的文章放到content中,而后在blog目录下
  2. 本地查看效果的话:make html 而后make serve 最后访问:127.0.0.1:8000
  3. 发布到github:make github 完成

定制属于本身的blog

下面的内容算是高级篇了,须要把上面的步骤都完成。想要进一步完美本身的博客的小伙伴

1.独立域名
首先要购买域名,个人实在阿里云上买的,买完以后就须要修改你的域名指向:访问blog.xueweihan.com域名,跳转到你的.github.io。根据你购买域名时候的提示,就能够设置完成了。以后在output目录下,建立CNAME文件。内容就是你购买的域名。由于github pages只容许CNAME中的域名映射。

2.定制样式结构
一步步的来,首先要找到你喜欢的主题pelican主题,下载的时候我推荐Download ZIP会快不少。下载好你的主题,咱们就须要在blog目录下,找到pelicanconf.py文件,它是在生成静态网站时候的配置文件,定制几乎全部的东西都须要经过这个。增添内容以下:

THEME = '你的主题所在目录'
# 例如:THEME = '/Users/root/Documents/blog/tuxlite_tbs'


GITHUB_URL = 'https://github.com/你的github用户名'
# 效果是右上角有个fork me on Github,点击进入你的Github主页


DEFAULT_DATE_FORMAT = '%Y-%m-%d'
# 时间格式


SOCIAL = (('github', 'https://github.com/521xueweihan'),
          ('博客园', 'http://www.cnblogs.com/xueweihan/'))
# 几乎全部的博客主题都有一个地方展现你的社交帐号,这些帐号就写在这里,上面是个人


DISQUS_SITENAME = 'shortname'
# 评论功能,须要在Disqus上申请一个站点,替换shortname

若是有python基础的,能够直接修改主题目录下的template中的模版。已达到你想要的目录结构和内容的呈现。

3.简单的SEO
在output文件中建立rebots.txt,这个文件是一个协议文件,没有不会影响什么。可是有的话,有利于搜索引擎的收录。内容以下,容许全部爬虫,同时不容许爬取theme目录下的内容,和全部的图片。:

User-agent: *
Disallow: /theme/
Disallow: /.gif$
Disallow: /.png$
Disallow: /.jpg$

大多数主题可能是外国人写的,因此他们都支持‘谷歌分析’

GOOGLE_ANALYTICS = '跟踪ID'

而百度的分析就须要手动的在主题目录下的template目录下的base.html中增添百度的分析代码。

4.sitemap是对于爬虫友好的一个文件,它告诉爬虫,网站的更新频率和优先级等。详情

增添插件:

git clone git://github.com/getpelican/pelican-plugins.git

修改pelicanconf.py文件:

PLUGIN_PATH = u"pelican-plugins"
PLUGINS = ["sitemap"]
SITEMAP = {
    "format": "xml",
    "priorities": {
        "articles": 0.7,
        "indexes": 0.5,
        "pages": 0.3,
    },
    "changefreqs": {
        "articles": "monthly",
        "indexes": "daily",
        "pages": "monthly",
    }
}

5.favicon.ico
放在output的根目录下。

6.订阅
由于pelican的库包含了feedgenerator。feedgenerator是用来生成Atom feeds(是包含你博客数据的xml的文件)用于订阅。因此你只须要在pelicanconf.py加入:

FEED_ALL_RSS =  'feeds/all.rss.xml'

博客就会自动生成订阅功能了。

7.关于我
这个就像至关于一个自我介绍的页面,因此就须要在content目录下建立一个pages目录,而后把你要展现的内容放到pages目录下就能够了。

最终效果

个人博客:blog.xueweihan.com

问题

  1. 当删除了一篇博文,可是以我上面所说的方式发布的话。那片文章其实仍是存在于github pages上的。只不过没有在模版中生成连接罢了。这种相似的状况会致使:换主题css丢失等问题。固然若是你清空output目录,而后从新生成网站的话,就没问题。可是清空的话,会致使一切不因该被删的文件也都被删除了,例如:.git和CNAME等文件。因此我就写了一个del.sh,用于删除pelican生成的文件,其余哪些通用文件都不删除。这样暂时能够解决问题。

  2. 原本想要在两台电脑上均可以发布文章,修改完makefile我发现不是刚性需求,同时实现效果很差。最后的解决方案是,把文章写在另外的一个github的项目中,分布式编辑这个项目。最后写文章以前,git pull获取最新的文章,这样就能够同步最新的内容进行修改发布了。

  3. 我遇到的另一个问题,就是pelican-theme上面大多都是国外的主题,有的主题中的jquery.js是用的google的cdn。在国内访问的时候会形成找不到jquery.js对体验和响应时间形成很大的影响。因此,部署完站点后,最好打开浏览器的开发者模式,查看一下各个文件的请求耗时。若是有我上述状况,那么你能够尝试把那个请求耗时过长的静态文件,下载好,放到该主题目录下static中对应的目录内。

  4. 这个其实不是问题,算是一个建议。文章的格式中,加入Slug: test。这个字段的是:用于文章生成url的。不添加这个字段话,默认是拼音的url。可是有时侯拼音是错误的,并且对于搜索引擎很不友好。

参考

本文分享 CNBlog - 削微寒的程序员之路。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。