[git]用pelican搞一個自己的blog(已完成)


pelican

Pelican Static Site Generator, Powered by Python:Pelican是python語言寫的靜態網站生成器。因為我一直打算用github pages做一個博客,現在已經學會用Hexo在github pages上做博客了。但是我一想:我一個pythoner,干嘛不用python寫的靜態網站生成器。我想應該是網上教程太少,那我今天就來搞一搞。順便記錄下來,整理出一個教程,希望一切順利!


最終效果:blog.xueweihan.com

開始

1.首先用virtualenv創建一個env

mkdir 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,效果如下:

輸入: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。但是有時侯拼音是錯誤的,而且對於搜索引擎很不友好。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM