[git]用pelican搞一个自己的blog(已完成)
2016-03-07 10:44
288 查看
pelican
Pelican Static Site Generator, Powered by Python:Pelican是python语言写的静态网站生成器。因为我一直打算用github pages做一个博客,现在已经学会用Hexo在github pages上做博客了。但是我一想:我一个pythoner,干嘛不用python写的静态网站生成器。我想应该是网上教程太少,那我今天就来搞一搞。顺便记录下来,整理出一个教程,希望一切顺利!开始
1.首先用virtualenv创建一个envmkdir blog cd blog virtualenv env source env/bin/activate #激活环境
2.使用pip安装pelican和markdown
pip install pelican pip install markdown
3.创建pelican目录结构
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
我们下面只用到我解释的这几个目录和文件,大致有个印象即可
4.编写文章测试下效果
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.本地查看效果
# 在blog目录下执行 pelican content # 根据content中的内容,生成静态网站到output目下 # 在output目录下执行 python -m pelican.server
以上两个命令执行完,没有报错的话就用浏览器打开:127.0.0.1:8000,效果如下:
![](http://7xqirw.com1.z0.glb.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202016-02-28%20%E4%B8%8B%E5%8D%885.18.31.png)
输入:
ctrl + c停止服务
5.上传到github pages 现在就差最后一步,上传到github pages上面。 一步步的来:
首先在github上创建一个项目,
Repository name填写:你的github用户名.github.io 如下图:
![](http://7xqirw.com1.z0.glb.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202016-02-28%20%E4%B8%8B%E5%8D%885.25.05.png)
然后在
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/
页面如下图:
![](http://7xqirw.com1.z0.glb.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202016-02-28%20%E4%B8%8B%E5%8D%885.42.10.png)
简化发布流程
还记得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
更新博客流程
把写好的markdown格式的文章放到content中,然后在
blog目录下
本地查看效果的话:
make html然后
make serve最后访问:127.0.0.1:8000
发布到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问题
当删除了一篇博文,但是以我上面所说的方式发布的话。那片文章其实还是存在于github pages上的。只不过没有在模版中生成链接罢了。这种类似的情况会导致:换主题css丢失等问题。当然如果你清空output目录,然后重新生成网站的话,就没问题。但是清空的话,会导致一切不因该被删的文件也都被删除了,例如:.git和CNAME等文件。所以我就写了一个
del.sh,用于删除pelican生成的文件,其他哪些通用文件都不删除。这样暂时可以解决问题。
本来想要在两台电脑上都可以发布文章,修改完makefile我发现不是刚性需求,同时实现效果不好。最后的解决方案是,把文章写在另外的一个github的项目中,分布式编辑这个项目。最后写文章之前,
git pull获取最新的文章,这样就可以同步最新的内容进行修改发布了。
我遇到的另外一个问题,就是pelican-theme上面大多都是国外的主题,有的主题中的jquery.js是用的google的cdn。在国内访问的时候会造成找不到jquery.js对体验和响应时间造成很大的影响。所以,部署完站点后,最好打开浏览器的开发者模式,查看一下各个文件的请求耗时。如果有我上述情况,那么你可以尝试把那个请求耗时过长的静态文件,下载好,放到该主题目录下
static中对应的目录内。
这个其实不是问题,算是一个建议。文章的格式中,加入
Slug: test。这个字段的是:用于文章生成url的。不添加这个字段话,默认是拼音的url。但是有时侯拼音是错误的,而且对于搜索引擎很不友好。
参考
lizherui的博客pelican官方文档
pelican中文文档(不全)
Pelican搭建静态博客
相关文章推荐
- dfs算法在非图结构中的运用
- haproxy 关闭ssl 3.0 加密
- 科维PLC运行时系统ProConOS embedded CLR 2.2 特定应用
- Vert.x 3学习笔记---14( Web篇 )
- MFS的MASTER启动出现错误
- FAQ 前端面试大杂烩3
- 【Maven】安装Jar包到本地仓库,多个仓库可以指定具体哪个仓库。
- boost-同步-锁选项
- Query cache(高速查询缓冲池)
- 浅表拷贝vs深度拷贝
- 【ShancoLove】带你看蓝桥杯——算法训练Torry的困惑(基本型)
- LeetCode : 4Sum [java]
- Spring4.xx出现无法解析xml文件
- LeetCode 35. Search Insert Position
- 一个优化程序效率的调试小技巧
- oracle insert into 多个value
- peugeot 308 5 doors
- SQLite 查询或更新上一条插入的数据
- uboot基本命令详解
- ContextMenu.iOS