Fork me on GitHub

windows下用Pelican+GitHub搭建静态博客

一、使用GitHub Pages创建个人博客页面

  1. 首先到GitHub进行账号注册:https://github.com/
  2. 创建新仓库,不用新建readme.md,注意仓库名使用username.github.io的格式,这里username改成自己的用户名。
  3. 创建SSH密钥并上传到GitHub。

二、安装Python、Pelican、Markdown和make

  1. 安装Python。

  2. 安装Pelican。建议在虚拟环境virtualenv下使用。

    • 安装virtualenv(可选)

      pip install virtualenv
      
    • 为了使用virtualenv更方便,可以借助 virtualenvwrapper(可选)

      pip install virtualenvwrapper-win
      

      配置虚拟环境目录,默认创建的虚拟环境位于C:\Users\username\下,可以通过环境变量 WORKON_HOME 来定制。

      通过计算机-->属性-->高级系统设置-->环境变量-->系统变量中新建“变量名”:WORKON_HOME变量值你自定义的路径

    • 创建并激活虚拟环境(可选)

      mkvirtualenv pelican
      

      常用命令:

      # 激活虚拟环境
      workon {虚拟环境目录}
      # 停止虚拟环境
      deactivate
      # 进入虚拟环境目录
      cdvirtualenv
      # 列出所有虚拟环境
      lsvirtualenv
      # 检查虚拟环境是否激活(其他方法也可)
      pip list
      
    • 安装pelican

      pip install pelican
      
  3. 安装markdown

    pip install markdown
    
  4. 安装make并设置好环境变量下载地址

三、创建博客骨架

  1. 搭建博客目录(若使用虚拟环境必须在激活虚拟环境前提下执行下列命令,blog文件夹不需要在虚拟环境文件夹下):

    mkdir blog
    cd blog
    pelican-quickstart
    

    quickstart并非必须,如果想要使用非默认主题,可以下载对应主题的demo,解压至博客目录,然后按照下面的步骤修改相应的Makefile和pelicanconf.py即可,主题和插件下载建议使用git clone命令,方便以后更新。 2. 根据提示一步步输入相应的配置项,不知道如何设置的接受默认即可,后续可以通过编辑pelicanconf.py文件更改配置。完成后将会在根目录生成以下文件:

    .
    |-- content                # 所有文章放于此目录
       └── (pages)            # 存放手工创建的静态页面
    |-- develop_server.sh      # 用于开启测试服务器
    |-- Makefile               # 方便管理博客的Makefile
    |-- output                 # 静态生成文件
    |-- plugins                # 插件(自己另外下载)
    |-- themes                 # 主题(自己另外下载)
    |-- pelicanconf.py         # 配置文件
    |-- publishconf.py         # 配置文件
    
  2. 进入output文件夹,把自己刚刚建好的username.github.io版本库clone下来,注意使用SSH方式,这里以及后文中的username要替换成自己的GitHub用户名:

    cd output
    git clone git@github.com:username/username.github.io.git
    
  3. 设置一键上传部署到GitHub。打开根目录下的Makefile文件,修改以下三个地方,设置完后,以后写完文章就可以通过在blog根目录下执行make github进行一键部署了。

    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
    

四、通过Markdown试写博文并上传GitHub发布

  1. 创建一个页面:这里以创建 About页面为例。在content目录创建pages子目录:

    mkdir content/pages
    

    然后创建About.md并填入下面内容(一定要有title):

    title: About Me        
    date: 2013-04-18
    
    About me content
    

    相关介绍请参见官方文档。

  2. 创建导航目录项:Menu Item设置。在你的博客中,可设置相应的菜单项,菜单项是通过pelicanconf.py设置的,具体如下所示:

    MENUITEMS = (("ITEM1","http://github.com"),
                 ("ITEM2",URL),
                ......)
    
  3. 在Makefile目录下执行以下命令,即可在本机http://127.0.0.1:8000看到效果。

    make publish
    make serve
    

五、安装主题

主题下载好后,对应在在pelicanconf.py中添加主题选择条目,主题下载地址,这里我选用的是fresh主题。

THEME = '主题目录(相对或绝对路径)'

推荐主题:elegantpelican-bootstrap3fresh

六、添加第三方评论系统

由于Disqus需要翻墙,而国内又没有什么比较好的第三方评论系统,网上搜了一堆,最后决定用github issues来实现。本来想用gitment的,但是不知道哪里配置问题,无法初始化issue,然后用的是gitalk,界面也比gitment好看。

  • gitalk

    直接到theme--tempaltes下,参考gitalk配置,新建gitalk.html,这里我稍微配置了个环境变量GITALK_OWNER。而且我的repo没有选择博客文件所在仓库,而是另外建了一个仓库,注意createIssueManually最好设置为true,这样文章发表之后在评论处点击初始化就可以自动生成一个issue,当然每篇文章都要点一下。

    {% if GITALK_OWNER %}
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css">
    <script src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js"></script>
    <div id="gitalk-container"></div>
    <script>
        var gitalk_owner = '{{ GITALK_OWNER }}';
    
        var gitalk = new Gitalk({
          clientID: 'a61......',
          clientSecret: '38c......',
          repo: 'comments',
          owner: gitalk_owner,
          admin: [gitalk_owner],
          distractionFreeMode: false,  // Facebook-like distraction free mode
          createIssueManually: true
        })
    
        gitalk.render('gitalk-container')
    </script>
    {% endif %}
    

    然后打开article.html,找到{% if DISQUS_SITENAME %}这行,从这之后开始修改:

    {% if COMMENT %}
    <div class="comments">
      <h2>Comments</h2>
        {% include 'gitalk.html' %}
    </div>
    {% endif %}
    

    第一行这里不用disqus,所以改成{% if COMMENT %},主要就是加了这么一行{% include 'gitalk.html' %}。记得在pelicanconf.py文件中要配置COMMENT = TrueGITALK_OWNER

  • disqus

    这个配置相对简单。首先到disqus注册账号;create a new site,记住你填的shortname;然后选择新建的siteInstalling Disqus,下一步下一步把代码复制出来;然后在theme--tempaltes下,新建disqus.html,把刚才代码粘贴进去去掉注释,增加头部{% if DISQUS_SITENAME %}尾部{% endif %}DISQUS_SITENAME变量,最后就变成这样:

    {% if DISQUS_SITENAME %}
    <div id="disqus_thread"></div>
    <script type="text/javascript">
        var disqus_shortname = '{{ DISQUS_SITENAME }}';
    
        (function() { // DON'T EDIT BELOW THIS LINE
        var d = document, s = d.createElement('script');
        s.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';;
        s.setAttribute('data-timestamp', +new Date());
        (d.head || d.body).appendChild(s);
        })();
    </script>
    <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
    {% endif %}
    

    然后修改article.html,同gitalk一样,在<h2>Comments</h2>后加上一行{% include 'disqus.html' %}。最后只需在pelicanconf.py文件中配置DISQUS_SITENAME = 'shortname'即可启用disqus。

七、添加Webmaster

为了让博客能在网上被搜索到,需要搜索引擎将网站收录,所以要添加Webmaster。这里我添加了Google和Bing收录,因为GitHub屏蔽了百度网站爬虫,所以除非你搭建在自己的服务器上,否则是没办法添加百度收录的。

下面以Bing收录为例,首先打开Bing网站管理员工具,用Microsoft账号登录,都是中文界面,按照说明添加网站并验证通过。

然后准备sitemap,到博客主目录下,执行:

git clone git://github.com/getpelican/pelican-plugins.git

在pelicanconf.py里配置如下:

PLUGIN_PATHS = ['pelican-plugins',]
PLUGINS = ["sitemap"]
SITEMAP = {
    "format": "xml",
    "priorities": {
        "articles": 0.7,
        "indexes": 0.5,
        "pages": 0.3,
    },
    "changefreqs": {
        "articles": "monthly",
        "indexes": "daily",
        "pages": "monthly",
    }
}

然后make html在output目录下可以看到已经生成了网站的sitemap;make github后,提交网站sitemap地址到到Bing Webmaster:https://username.github.io/sitemap.xml

八、添加站内搜索

这一步必须建立在第七步前提下,否则是搜不到东西的。以添加Bing站内搜索为例:

  • 打开Bing Custom Search,选择New Instance;
  • 然后在Definition Editor下添加自己的网站,添加好后,可以在右侧尝试搜索一下(前提是第七步,不知道为什么我在Bing上已经能搜索到自己的网站了,然而站内搜索始终搜不到内容,换成Google就没有问题,但是Google要fq,流程上都差不多,所以这里以Bing为例);
  • 第三步API EndPointQuery为自定义API名称可以任意,Subscription Key可以选择申请一个免费的Issue free trial key,注意要申请Custom Search API,填完之后记得Call一下,看看返回值是否正确,有问题检查你的key;
  • 第四步Hosted UI下选择搜索框的样式,填入第三步的key。保存之后将下面的代码复制出来,粘贴到任意你想添加搜索框的地方。因为fresh主题自带Google站内搜索,所以这里我取了个巧,直接套用Google的CSS。

添加Google站内搜索就更简单,到Google站内搜索网站上申请一个ID,调整好样式后将ID添加到pelicanconf.py即可:

GOOGLE_CUSTOM_SEARCH_SIDEBAR = "your ID"

九、添加分享按钮

fresh主题自带ShareThis分享功能,申请账号并将ShareThis Pub Key添加到pelicanconf.py中就可以使用,具体参考官方文档。添加第三方的跟添加其他插件类似。

SHARETHIS_PUB_KEY = 'your ShareThis Pub Key'

添加了分享按钮之后,网站加载速度变得很慢,所以最后我把这个功能关掉了,本来也用不上。对我来说,必要的功能有,其他越简单越好。

十、最重要的事

为了看起来完美,所以加了第十条。不过这确实也是最重要的,我觉得应该关心博客的内容而不是样式。

PS:更新补丁

参考文章

Comments