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
文件結構以下:github
blog/ ├── content # 寫的文章放這裏 ├── output # 生成的輸出文件(發佈的內容) ├── develop_server.sh ├── Makefile # 方便管理博客的Makefile ├── pelicanconf.py # 主配置文件 └── publishconf.py
咱們下面只用到我解釋的這幾個目錄和文件,大體有個印象便可web
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文件,把上面的那些內容放進去,用來測試效果。bash
5.本地查看效果markdown
# 在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
更新博客流程
blog
目錄下make html
而後make serve
最後訪問:127.0.0.1:8000make github
完成下面的內容算是高級篇了,須要把上面的步驟都完成。想要進一步完美本身的博客的小夥伴
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。可是有時侯拼音是錯誤的,並且對於搜索引擎很不友好。