[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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索