Pelican+Github博客搭建詳細教程

来源:http://www.cnblogs.com/cciejh/archive/2016/02/04/blog_building.html
-Advertisement-
Play Games

Git是一個開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。GitHub可以托管各種git庫的站點。通過GitHub Pages生成的靜態站點,可以免費托管、自定義主題、並且自製博客界面。


操作系統:Mac OS / Linux
工具集:
1.Pelican——基於Python的靜態網頁生成器
2.馬克飛象——Evernote出的Markdown文本編輯器
3.GoDaddy——功能變數名稱供應商
4.DNSPod——提供免費功能變數名稱解析註冊服務
5.Github Pages——Github為每個註冊用戶提供300M的站點空間
6.Python——Pelican工具需要Python運行環境
7.Google Analytics——谷歌站點數據監測分析工具
8.Google Custom Search——谷歌自定義搜索引擎可用作站內搜索工具
9.Google Webmasters——谷歌站長工具
10.Disqus——用來提供博客評論功能
11.Sitemap——站點地圖,供谷歌,百度等搜索引擎收錄
12.七牛雲存儲——靜態資源管理,上傳自動生成網盤直鏈

最終效果展示:歡迎訪問我的博客http://www.hao-jiang.com


一、使用Github Pages創建個人博客頁面


Git是一個開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。GitHub可以托管各種git庫的站點。通過GitHub Pages生成的靜態站點,可以免費托管、自定義主題、並且自製網頁界面。

1.首先到Github進行賬號註冊:https://github.com/
2.註冊後登錄Github,右上角點擊“Creat a new repo”,跳轉到新頁面後填寫相關內容,註意版本庫名使用'username.github.io'的格式,這裡將username替換成自己的用戶名即可。
3.設置和選擇好頁面模板後就可以生成然後發佈新網頁了。
4.創建SSH密鑰並上傳到Github。

*以上內容都很簡單,有問題可以參照:
關於Github註冊登錄:通過GitHub創建個人技術博客圖文詳解1
關於Github頁面生成:通過GitHub創建個人技術博客圖文詳解2
關於SSH認證:Windows/Mac下使用SSH密鑰連接Github
官方文檔:Github官方文檔在這裡


二、安裝Python、Pelican和Markdown


Pelican是一套開源的使用Python編寫的博客靜態生成, 可以添加文章和和創建頁面, 可以使用MarkDown reStructuredText 和 AsiiDoc 的格式來抒寫, 同時使用 Disqus評論系統, 支持 RSS和Atom輸出, 插件, 主題, 代碼高亮等功能, 採用Jajin2模板引擎, 可以很容易的更改模板。

1.安裝Python。最新的Mac OS 一般都自帶Python環境。在終端輸入"python"即可確認Python版本。如有需要可以到官網安裝:http://www.python.org/

2.安裝Pelican。可以從github克隆最新的代碼安裝, 並且建議在virtualenv下使用。首先建立 virtualenv(Python虛擬環境):

virtualenv pelican      # 創建
cd pelican
sh bin/activate            # 激活虛擬環境

從github克隆最新代碼安裝Pelican:

git clone git://github.com/getpelican/pelican.git          # 下載代碼
cd pelican
python setup.py install

3.安裝Markdown:

pip install markdown


三、創建博客骨架


接下來將通過初始化Pelican設置來生成一個基本的博客框架。

1.搭建博客目錄:

mkdir blog
cd blog
pelican-quickstart

2.根據提示一步步輸入相應的配置項,不知道如何設置的接受預設即可,後續可以通過編輯pelicanconf.py文件更改配置。完成後將會在根目錄生成以下文件:

.
|-- content                # 所有文章放於此目錄
│   └── (pages)            # 存放手工創建的靜態頁面
|-- develop_server.sh      # 用於開啟測試伺服器
|-- Makefile               # 方便管理博客的Makefile
|-- output                 # 靜態生成文件
|-- pelicanconf.py         # 配置文件
|-- publishconf.py         # 配置文件

3.進入output文件夾,把自己剛剛建好的username.github.io版本庫clone下來,註意這裡以及後文中的username要替換成自己的Github用戶名:

cd output
git clone https://github.com/username/username.github.io.git

4.設置一鍵上傳部署到Github。打開根目錄下的Makefile文件,修改以下三個地方:

 OUTPUTDIR=$(BASEDIR)/output/username.github.io    
 publish:    
 $(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)    
 github: publish    
 cd OUTPUTDIR ; git add . ;  git commit -am 'your comments' ; git push    

5.設置完後,以後寫完文章就可以通過在blog根目錄下執行“make github”進行一鍵部署了。


四、通過Markdown試寫博文並上傳Github發佈


Markdown是當下非常流行的一種文本編輯語法,支持HTML轉換,書寫博文排版也方便快捷。

1.寫一篇文章:用馬克飛象編輯器用Markdown語法來寫一篇文章保存為.md格式放在content目錄下。寫完後,執行以下命令,即可在本機http://127.0.0.1:8000看到效果。

make publish
make serve

2.創建一個頁面:這裡以創建 About頁面為例。在content目錄創建pages子目錄:

mkdir content/pages

*然後創建About.md並填入下麵內容:

title: About Me        
date: 2013-04-18       

About me content

*註意上面title和date是.md文件的重要參數,需要寫在文檔開頭。比如:

Title: Pelican+Github
Date: 2014-10-07 22:20
Modified: 2014-10-07 23:04
Tags: python, pelican
Slug: build-blog-system-by-pelican
Authors: Joey Huang
Summary: blablablablablablablabla...
Status: draft

相關介紹請參見官方文檔:http://pelican-zh.readthedocs.org/en/latest/zh-cn/ 。完成後同樣可以在本機http://127.0.0.1:8000看效果。

3.創建導航目錄項:Menu Item設置。在你的博客中,可設置相應的菜單項,菜單項是通過pelicanconf.py設置的,具體如下所示:

MENUITEMS = (("ITEM1","http://github.com"),
             ("ITEM2",URL),
            ......)


五、安裝主題


這裡以主題bootstrap2為例,同樣還在blog目錄下:

git clone https://github.com/getpelican/pelican-themes.git
cd pelican-themes
pelican-themes -i bootstrap2

對應在在pelicanconf.py中添加主題選擇條目:

THEME = 'bootstrap2'


六、安裝第三方評論系統Disqus


在Disqus上申請一個站點,記住shortname。 在pelicanconf.py添加:

DISQUS_SITENAME = Shortname


七、添加Google Analytics


去Google Analytics申請賬號並通過驗證,記下跟蹤ID(Track ID), 在pelicanconf.py添加:

GOOGLE_ANALYTICS = '跟蹤ID'


八、添加Google Webmasters和百度站長收錄


為了讓博客被Google更好的收錄,比如手動讓Googlebot抓取、提交Robots、更新Sitemap等等。

1.在Google Webmasters上註冊並通過驗證。

2.添加sitemap插件。還是到/blog目錄下執行:

cd ~/blog
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",
    }
}

3.將make github命令後在output目錄下生成的sitemap文件上傳到Google Webmasters。

4.對於百度。它是宣稱支持sitemap的,但是網上相關問題一大堆,要麼格式不對要麼就是抓取失敗,要麼突然不開放支持。在幾次嘗試失敗以後,我是通過添加JavaScript代碼來自動推送網站鏈接的。具體是在主題模板(base.html)面最後添加代碼:

<script>
(function(){
    var bp = document.createElement('script');
    bp.src = '//push.zhanzhang.baidu.com/push.js';
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(bp, s);
})();
</script>

*我還是比較推崇這種方法的,因為比sitemap方法被抓取收錄的時間短很多。谷歌的sitemap是xml格式。


九、添加谷歌/百度站內搜索


谷歌站內搜索
1.修改主題。找到這個主題的templates文件夾中的base.html,在<div class="nav-collapse">的最後,添加以下內容:

<form class="navbar-search pull-right" action="/search.html">
    <input type="text" class="search-query" placeholder="Search" name="q" id="s">
</form>

2.創建search.html。之後,在output目錄下,新建一個名為search.html的文件,寫入下麵的內容,其中需要你自己修改的是google站內搜索的ID號,需要自己在google站內搜索的網站上自己申請。

<html lang="zh_CN">
<head>
<meta charset="utf-8">
<title>站內搜索</title>
</head>
  <body>
<style>
#search-box {
    position: relative;
    width: 50%;
    margin: 0;
    padding: 1em;
}

#search-form {
    height: 30px;
    border: 1px solid #999;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    border-radius: 5px;
    background-color: #fff;
    overflow: hidden;
}

#search-text {
    font-size: 14px;
    color: #ddd;
    border-width: 0;
    background: transparent;
}

#search-box input[type="text"] {
    width: 90%;
    padding: 4px 0 12px 1em;
    color: #333;
    outline: none;
}
</style>
<div id='search-box'>
  <form action='/search.html' id='search-form' method='get' target='_top'>
    <input id='search-text' name='q' placeholder='Search' type='text'/>
  </form>
</div>
<div id="cse" style="width: 100%;">Loading</div>
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript"> 
  google.load('search', '1', {language : 'zh-CN', style : google.loader.themes.V2_DEFAULT});
  google.setOnLoadCallback(function() {
    var customSearchOptions = {};  var customSearchControl = new google.search.CustomSearchControl(
      '012191777864628038963:**********<!寫入你申請的google站內搜索的ID號>)', customSearchOptions);
    customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
    var options = new google.search.DrawOptions();
    options.enableSearchResultsOnly(); 
    customSearchControl.draw('cse', options);
    function parseParamsFromUrl() {
      var params = {};
      var parts = window.location.search.substr(1).split('\x26');
      for (var i = 0; i < parts.length; i++) {
        var keyValuePair = parts[i].split('=');
        var key = decodeURIComponent(keyValuePair[0]);
        params[key] = keyValuePair[1] ?
            decodeURIComponent(keyValuePair[1].replace(/\+/g, ' ')) :
            keyValuePair[1];
      }
      return params;
    }

    var urlParams = parseParamsFromUrl();
    var queryParamName = "q";
    if (urlParams[queryParamName]) {
      customSearchControl.execute(urlParams[queryParamName]);
    }
  }, true);
</script>
</body>
</html>

3.將GOOGLE_CUSTOM_SEARCH_SIDEBAR = "001578481551708017171:axpo6yvtdyg" 添加到pelicanconf.py文件。註意, 引號里的那一串字元是之前申請的自定義搜索引擎的id。
4.最後發佈後就可以看到搜索框了。
***

百度站內搜索
1.在百度站長平臺中註冊一個賬號,之後添加網站,按照提示驗證網站。之後左側其他工具中找到站內搜索,按照提示填寫基本信息,選擇搜索框樣式,之後點擊查看代碼,複製其中內容,留用。
2.同樣在base.html的這個<div class="nav-collapse">的最後,新建一個div,剛纔註冊最後複製的代碼粘貼到這個div中:

<div class="navbar-search pull-right">
    <script>  
        <!略>
    </script>
</div>

3.發佈驗證。


十、添加Tags側邊欄


在其他一些pelican主題中,看到有標簽雲,想到Tags的鏈接可能比Categories的鏈接更有用,通過更改主題,添加了側欄中紅框內的Tags鏈接框。

1.還是找到base.html,找到categories部分:

{% if categories %}
<div class="well" style="padding: 8px 0; background-color: #FBFBFB;">
<ul class="nav nav-list">
    <li class="nav-header"> 
    Categories
    </li>

    {% for cat, null in categories %}
    <li><a href="{{ SITEURL }}/{{ cat.url }}">{{ cat }}</a></li>
    {% endfor %}                   
</ul>
</div>
{% endif %}

2.在這段後面添加:

{% if tags %}
<div class="well" style="padding: 8px 0; background-color: #FBFBFB;">
<ul class="nav nav-list">
    <li class="nav-header"> 
    Tags
    </li>

{% for name, tag in tags %}
    <li><a href="{{ SITEURL }}/{{ name.url }}">{{ name }}</a></li>
{% endfor %}
</ul>
</div>
{% endif %}

3.保存,重新發佈網頁驗證。


十一、插入視頻


其實很簡單, 只需要把html代碼放進markdown源文件就行了! 而視頻的html代碼在視頻網站上一般都會提供。複製下來放進源文件即可。


十二、拷貝靜態文件


如果我們定義靜態的文件,該如何將它在每次生成的時候拷貝到 output 目錄呢,我們以網站logo圖片sitelogo.ico為例,在我們的 content/extra 下放置網站的靜態資源文件:sitelogo.ico,在pelicanconf.py更改或添加 FILES_TO_COPY項:

FILES_TO_COPY = (
    ("extra/sitelogo.ico", "sitelogo.ico"),
)

這樣在每次生成html的時候都會把 content/extra下的 sitelogo.ico 拷貝到 output目錄下。


十三、資源目錄管理


使用目錄名作為文章的分類名

USE_FOLDER_AS_CATEGORY = True

使用文件名作為文章或頁面的slug(url)

FILENAME_METADATA = '(?P<slug>.*)'

頁面的顯示路徑和保存路徑,推薦下麵的方式

ARTICLE_URL = '{category}/{slug}.html'
ARTICLE_SAVE_AS = ARTICLE_URL
PAGE_URL = '{slug}.html'
PAGE_SAVE_AS = PAGE_URL
CATEGORY_URL = '{slug}/index.html'
CATEGORY_SAVE_AS = CATEGORY_URL
TAG_URL = 'tag/{slug}.html'
TAG_SAVE_AS = TAG_URL
TAGS_SAVE_AS = 'tag/index.html' 


十四、指定文章或頁面URL


在需要指定URL的文章或者頁面中包括兩個元數據url與save_as,例如:

url: pages/url/
save_as: pages/url/index.html

*這個代碼指定了本篇文章的url為pages/url/index.html

根據上面很容易推斷如何將一篇文章設置為網站的主頁,如下代碼即可實現將 content/pages/home.md設為主頁:

Title: [www.yanyulin.info](http://www.yanyulin.info)
Date: 2014-01-08
URL:
save_as: index.html

*另外還可以通過template:關鍵字來指定要使用的模板。


十五、獨立功能變數名稱設置
詳見:http://www.jianshu.com/p/252b542b1abf


Godaddy上購買專屬功能變數名稱,用dnspod進行動態功能變數名稱解析,步驟如下:

步驟1:修改Godaddy中的NameServers的兩個地址為dnspod的DNS地址:

f1g1ns1.dnspod.net
f1g1ns2.dnspod.net

步驟2:在Dnspod中添加一條A記錄,指向Github URL

username.github.io

步驟3:在Pelican主目錄,即上面創建的blog/output/username.github.io目錄,添加CNAME文件,在文件中添加你的獨立功能變數名稱。

*註意這裡的CNAME建議放在第十二步提到的content目錄下的靜態子目錄content/extra下,併在配置文件中添加相關條目。


十六、相關文章、上下文導航


1.打開pelicanconf.py,定義插件目錄和啟用插件:

#載入plugins
PLUGIN_PATH = "plugins"
PLUGINS = ["sitemap","neighbors","related_posts"]
#sitemap
SITEMAP = {
    'format': 'xml',
    'priorities': {
        'articles': 0.7,
        'indexes': 0.8,
        'pages': 0.5
    },
    'changefreqs': {
        'articles': 'monthly',
        'indexes': 'daily',
        'pages': 'monthly'
    }
}
#相關文章
RELATED_POSTS_MAX = 10

2.鄰居導航,在主題模版中調用如下代碼,可根據自己的情況修改:

   <div class="pagination">
      <ul>
      {% if article.prev_article %}
        <li class="prev"><a href="{{ SITEURL }}/{{ article.prev_article.url}}">← Previous</a></li>
        {% else %}
        <li class="prev"><a href="/">← Previous</a></li>
        {% endif %}
        <li><a href="/archives.html">Archive</a></li>
        {% if article.next_article %}
        <li class="next"><a href="{{ SITEURL }}/{{ article.next_article.url}}">Next →</a></li>
        {% else %}
        <li class="next"><a href="/">Next →</a></li>
        {% endif %}
      </ul>
    </div>

3.相關文章:

{% if article.related_posts %}
    <h4>Related Articles</h4>
    <ul>
    {% for related_post in article.related_posts %}
        <li><a href="{{ SITEURL }}/{{ related_post.url }}">{{ related_post.title }}</a></li>
    {% endfor %}
    </ul>
{% endif %} 




十七、最後,一些比較占空間的資源文件(圖片、媒體等)可以用七牛來進行存儲管理

相關文章:使用Pelican在Github(國外)和Gitcafe(國內)同步托管博客
本文原文地址:http://www.hao-jiang.com/pages/web-development/blogbuilding
感興趣的朋友也可以直接到我的Github把代碼Fork下來參考定製:https://github.com/Heriam
有具體問題歡迎到本文原文下方進行留言。




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 獲取【下載地址】 QQ: 313596790 【免費支持更新】支持三大資料庫 mysql oracle sqlsever 更專業、更強悍、適合不同用戶群體A 代碼生成器(開發利器); 增刪改查的處理類,service層,mybatis的xml,SQL( mysql 和oracle)腳本, jsp頁面
  • 觀察者模式 定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新。 觀察者模式需要實現兩個介面。observable(可觀察者)和observer(觀察者)。 observable定義了三個方法:register、remove、notify observe
  • 設計目標 儘量快的處理命令和事件,保證吞吐量; 處理完一個命令後不需要等待命令產生的事件持久化完成就能處理下一個命令,從而保證領域內的業務邏輯處理不依賴於持久化IO,實現真正的in-memory; 保證命令、事件處理的順序性,先來的先處理,先產生的先處理; 保證一個聚合根的事件只有一個線程在持久化,
  • 獲取【下載地址】 QQ: 313596790 【免費支持更新】支持三大資料庫 mysql oracle sqlsever 更專業、更強悍、適合不同用戶群體A 代碼生成器(開發利器); 增刪改查的處理類,service層,mybatis的xml,SQL( mysql 和oracle)腳本, jsp頁面
  • 最近做iOS開發的過程中, 發現要涉及到JS和原生OC(Swift)的交互, 作為一個Developer, 本著剋服一切問題的原則, 開始學習HTML, 在這裡記錄下自己的學習筆記, 方便以後的複習, 和新手初學的參考. HTML不同於過去學過的各種面向對象語言, 函數式語言, 它不像其他語言有明確
  • 最近家裡雜事較多,自學時間實在少的可憐,所以都在空閑時間看看老外寫的內容,學習之外順便翻譯分享~等學習的時間充足些再寫寫自己的一些學習內容和知識點分析(最近有在接觸的:複習(C#,SQL)、(學習)TypeScript,(基礎操作)MongoDB。TypeScript之後入手AngularJs 2.
  • 分為linear-gradient(線性漸變)和radial-gradient(徑向漸變)。 1.線性漸變在Mozilla 下應用 語法:-moz-linear-gradient( [<point> || <angle>,]? <stop>, <stop> [, <stop>]* ) 參數;共三個參
  • 昨天由於需要,寫了第一個需要ajax的程式,之前只是看過相關介紹,沒想到這麼有用,記錄一下,如有錯誤,還希望大家提出$(document).ready(function () {//獲取url中名字為vid的值 var params = window.location.search; //獲取url
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...