使用pelican+git+码云pages建立静态markdown博客全过程

来源:互联网 发布:xalharnet软件下载 编辑:程序博客网 时间:2024/06/06 03:34
  • 软件需求目录
  • 使用工具
  • 命令
  • 静态目录
  • 写博文
  • 发布博客
  • 博客功能拓展
  • 尾声

软件需求目录

  • pelican
  • python-markdown
    *

使用工具

  • python(我用的是2.7的最新版,会把下面的工具都带上)
  • easy_install
  • pip

命令

  • 安装必要程序

    pip install pelican markdown

NOTE

注意,有时候,还会使用工具 virtualenv
具体用途,请自行查阅相关资料,不过基本不用python进行大型开发也就基本用不上这个。

  • 创建目录

在你要放置博客基本框架的位置,建立一个文件夹。
直接手工建立就好。

  • 快速开始

在文件夹中,可以使用命令

pelican-quickstart

进行快速设置建立一些基本的文件。
会问一系列问题,比如博客网址啊,作者名字啊之类的,根据真实情况填写即可,这些问题只是用来生成配置文件的,后面可以通过修改配置文件来手动修改这些设置。

结果会生成一个目录,大体如下:

.├── content     # 这个就是放博客内容目录,这个目录及子目录下的所有md和rst文件将会被转成html文件├── output      # 这个是从content目录生成的html目标文件的存放目录├── develop_server.sh   #这个是用来在本地运行一个服务器来实时查看生成的html文档的脚本├── fabfile.py  # 这个是使用Python的fabric来实现文件上传的工具,即Deploy工具├── Makefile    # 这个是使用是用来生成网站内容并上传的工具。├── pelicanconf.py      # 这个是本地开发时的配置文件└── publishconf.py      # 这个是发布时的配置文件

其中,由于我们是使用git来进行内容更新,所以基本使用的就是下面这些文件及文件夹

├── content     # 这个就是放博客内容目录,这个目录及子目录下的所有md和rst文件将会被转成html文件├── output      # 这个是从content目录生成的html目标文件的存放目录├── develop_server.sh   #这个是用来在本地运行一个服务器来实时查看生成的html文档的脚本├── pelicanconf.py      # 这个是本地开发时的配置文件
  • 个性化配置

经过之前的设置,出来的pelicanconf.py文件内容已经有了雏形,但是对于进一步的个性化,是远远不够的,还需要我们继续添加修改内容。

至于能添加哪些内容,移步 文档

关于日后自行添加个性选项要注意

原本的内容都是这样:

AUTHOR = u'果子'

要注意,等号左边为全部大写的字母

如果感兴趣可以看我的使用nest主题的 pelicanconf.py1

关于publishconf.py 与 Makefile

我没有使用过,具体请自己查阅文档。
我的使用,就没用到。

  • 配置主题,插件

当前查看效果的方式

可以使用本地预览。
即:先在 根目录 下使用

pelican contentcd outputpython -m pelican.server

然后打开 http://localhost:8000 查看效果

Pelican支持大量的开源主题,GitHub上的 pelican-themes 项目有几十套主题,大部分都带了效果预览图。可以从里面挑一个你喜欢的主题样式来使用。还有一个更方便的挑选主题的方式,直接打开www.pelicanthemes.com 挑选吧。一个网页里就列出了几乎所有的主题。我的博客是使用 nest 主题,并在这套主题的基础上进行了一些定制。选定好喜欢的主题后,从GitHub上下载下来所有的主题:

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

我直接将其解压成了 根目录 下的pelican-themes文件夹,所以下文中的主题目录用的就是这个。要注意,有些主题,这个仓库里是不包含的,只有一个空文件夹,就像nest,想要时到github上去搜索就好。

然后在 pelicanconf.py 配置文件里添加或修改 THEME项为 nest

THEME = "nest"

(我使用了几个主题,觉得还是nest的汉化还是很方便的,作者很贴心的将参数剥离出来)

Pelican 一开始是将插件内置的, 但是新版本 Pelican将插件隔离了出来, 所以要到github上 克隆一份新的插件,执行

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

内容放在 根目录 下pelican-plugins文件夹下。

现在博客目录就新添了一个 pelican-plugins 目录,以配置sitemap插件为例, sitemap插件可以生成 sitemap.xml 供搜索引擎使用。
在pelicanconf.py中修改添加:

# 插件,render_math 提供数学公式的显示
# PluginPLUGIN_PATHS = ['pelican-plugins']PLUGINS = [ 'sitemap', 'render_math']# SitemapSITEMAP = { "format": "xml", "priorities": { "articles": 0.7, "indexes": 0.5, "pages": 0.3, }, "changefreqs": { "articles": "monthly", "indexes": "daily", "pages": "monthly", }}

最后执行

pelican content

就会在output中生成相关的html文件

静态目录

PATH = 'content'PAGE_PATHS = ['pages']ARTICLE_PATHS = ['articles']STATIC_PATHS = ['images', 'extra/robots.txt', 'extra/favicon.ico', 'extra/logo.svg', 'charity']EXTRA_PATH_METADATA = {    'extra/robots.txt': {'path': 'robots.txt'},    'extra/favicon.ico': {'path': 'favicon.ico'},    'extra/logo.svg': {'path': 'logo.svg'},    'charity/404.html': {'path': '404.html'}}

注意这部分设置,在content下放置着写博客要用到的一些内容,因为毕竟是 content -> output 内容的转换。所以尤其要注意这里的设置。这里有博文,图片,一些有些主题会用到的文档,图标,头像甚至是404页面都有放置在对应的文件目录下。这些目录是可以自己设置的,但是尽量是归好类。

关于静态目录:

A list of directories (relative to PATH) in which to look for static files. Such files will be copied to the output directory without modification. Articles, pages, and other content source files will normally be skipped, so it is safe for a directory to appear both here and in PAGE_PATHS or ARTICLE_PATHS. Pelican`s default settings include the “images” directory here.

写博文

pelican写博文,需要在md文档最前面加上元数据,下面是个例子,具体用哪些数据,还得看主题的代码上怎么设定,在主题的readme.md文件中若有增加,一般有提示,一般的如下例:

Title: winsows效率之bat文件1Date: 2017-02-18 17:07:19Category: 效率Tags: batSlug: bat1Author: lartStatus: draft

Status: draft 会让文章不显示,默认为草稿。撰写完文章,需要发布时,需要把这行元数据去掉。否则文章不会出现在博客主页。只会在drafts下看得到:

你的网址/drafts

“你的网址”指提交的网站,或者本地预览时的 http://localhost:8000/
使用上面的网址就可以看到。

元数据后要与文本内容空一行以表示元数据的结束。

发布博客

要发布在网上,一般的会使用代码托管网站的page服务。我所知道的有三个站点提供:

码云CodingGitHub

相比之下,感觉码云稍快一些,但是Coding有提供https协议。而github不多说。大家自己选择。我用的是码云。

申请账号,创建项目,使用pages,码云文档做的不错,直接 过去看 就好。

这里甚至提到了如何使用404页面。实际上就是放置到output目录下。

一切准备就绪后,可以在使用过命令 pelican content 后, 进入output,使用git。

git initgit add .git commit -m "pelican static blog test"git remote add origin https://git.oschina.net/p_lart/p_lart.git
# 我的仓库地址就是:git@git.oschina.net:p_lart/p_lart.gitgit push -u origin master

要是运行这个后出现:

To ...(地址) ! [rejected]        master -> master (non-fast-forward)error: failed to push some refs to 'https://github.com/LarT2P/pelican-nest-blog.git'hint: Updates were rejected because the tip of your current branch is behindhint: its remote counterpart. Integrate the remote changes (e.g.hint: 'git pull ...') before pushing again.hint: See the 'Note about fast-forwards' in 'git push --help' for details.

可以尝试使用命令:

git push -u origin master -f

由于我是用的是windows,现在的博文推送方式有点麻烦,可以写bat文件简化流程。
由于安装git后,实际上是可以在cmd中使用的。于是有:

文件之本地预览:

@eche off@title 本地预览pelican博客echo 进入文件夹rem 这是我的content所在目录cd /d D:\git clone\BLOG\lart\lartecho 执行pelican contentpelican contentecho 进入outputcd /d outputecho 启动本地服务器python -m pelican.serverecho 结束...echo 请前往 http://localhost:8000/ 查看pause

文件之推送博文:

@echo off@title bat交互执行git命令echo 进入文件夹cd /d D:\git clone\BLOG\lart\lartecho 执行pelican contentpelican contentecho 执行gitcd /d outputgit add .git commit -m "update"git push origin masterecho done...pause

直接使用这两个批处理就可以完成相应的任务。
之后查看即可。

博客功能拓展

评论功能。
pelican支持

DISQUS_SITENAME = ""GOOGLE_ANALYTICS = ""

disqus 谷歌分析

国内可以换成(我所用的)友言或者多说,以及百度统计。

具体如何置换,直接在文件夹中搜索 上面的两个字符串

(我用的是sublime,文件夹中搜索,从搜索结果,进入对应文件中,修改你所用的主题的相应的代码块。这里只需要将对应标签下的内容进行置换就好)

至于用来置换的内容,见下:

以友言(这里有分享按钮以及评论系统还有推荐系统的代码都可以尝试)为例:

获取代码 ->

选择平台:通用代码 ->

那个代码复制好,粘贴到对应的 DISQUS_SITENAME 所在的主题里的模板文件中,nest主题是有个单独的文件,直接修改其中内容,if 语句中的内容不要改,相当于就是用原本的DISQUS的文件调用关系,使用我们的新内容。 ->

置换完成后,在pelicanconf文件中 DISQUS_SITENAME = "" 的 “” 里写点字符串,不要为空,这样就可以运行代码了。我是把该改的都改了,所以我的配置文件中有点不同。

同样的。百度统计 也是一样的。

注册时,必要的信息是要准确的。

进入 ->
管理 ->
代码获取 ->
按说明内容进行安装。

至于代码放置的方式,类似上面的,就不多说。这个相当于就是提供一个访问统计的一个后台,在博客网站页面上也看不出变化,但是在百度统计的我们的管理系统中,我们可以看到很多有用的数据。

尾声

至此,我的这几天的工作已经结束,虽然似乎没有太多的难度,但是对于我这样一个新手而言,却处处遇到困难。

这些内容也只是用到了pelican文档中不多的页面,所以可见,它的可塑空间还很大,大家可以积极改动尝试。

提示

pelican 使用markdown写博客,python-markdown的语法支持比常规的要丰富一点,所以可以看一下我的另一篇博文,那博文要是用在一般的markdown网站上,有些格式就显示不正常。

python-markdown


#!/usr/bin/env python# -*- coding: utf-8 -*- #from __future__ import unicode_literals# Site settingsAUTHOR = u'果子'AUTHOR_EMAIL = u'1304992155@qq.com'SITENAME = u'果园'SITEURL = 'http://p_lart.oschina.io'DEFAULT_DATE_FORMAT = ('%Y-%m-%d')TIMEZONE = 'Asia/Shanghai'DEFAULT_LANG = u'zh'DEFAULT_METADATA = ()DELETE_OUTPUT_DIRECTORY = False# BlogrollLINKS = (    ('果园', 'http://lart.coding.me'),)#######可以改动社交链接# Social widgetSOCIAL = (    ('码云(p_lart)', 'https://git.oschina.net/p_lart'),    ('Coding(lart)', 'https://coding.net/u/lart'),)# 几乎所有的博客主题都有一个地方展示你的社交账号,这些账号就写在这里,上面是我的# A list of tuples (Title, URL) for additional menu items to appear at the beginning of the main menu.MENUITEMS = ()# Content pathPATH = 'content'PAGE_PATHS = ['pages']ARTICLE_PATHS = ['articles']STATIC_PATHS = ['images', 'extra/robots.txt', 'extra/favicon.ico', 'extra/logo.svg', 'charity']EXTRA_PATH_METADATA = {    'extra/robots.txt': {'path': 'robots.txt'},    'extra/favicon.ico': {'path': 'favicon.ico'},    'extra/logo.svg': {'path': 'logo.svg'},    'charity/404.html': {'path': '404.html'}}ARTICLE_URL = ('articles/{slug}.html')ARTICLE_SAVE_AS = ('articles/{slug}.html')PAGE_LANG_SAVE_AS = False# FeedFEED_DOMAIN = SITEURLFEED_ALL_ATOM = 'feeds/all.atom.xml'CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'TRANSLATION_FEED_ATOM = None# 每页博文数目DEFAULT_PAGINATION = 5# markdown设置MARKDOWN = {    'extension_configs': {        'markdown.extensions.extra': {},        'markdown.extensions.admonition': {},        'markdown.extensions.codehilite': {'css_class': 'highlight'},        'markdown.extensions.meta': {},        'markdown.extensions.nl2br': {},        'markdown.extensions.sane_lists': {},        'markdown.extensions.smarty':{},        'markdown.extensions.toc': {},        'markdown.extensions.wikilinks': {},    },    'output_format': 'html5',}# 评论系统,我是用的是友言# CommentsUY = "Comments"# 我用的是百度统计# AnalyticsBAIDU = "Baidu"# 插件,render_math 提供数学公式的显示# PluginPLUGIN_PATHS = ['pelican-plugins']PLUGINS = [ 'sitemap', 'render_math']# SitemapSITEMAP = {    "format": "xml",    "priorities": {        "articles": 0.7,        "indexes": 0.5,        "pages": 0.3,    },    "changefreqs": {        "articles": "monthly",        "indexes": "daily",        "pages": "monthly",    }}# Can be useful in development, but set to False when you're ready to publishRELATIVE_URLS = False# 下面的就是nest主题的配置了,我把一些页面上的英文都简单汉化了。有的主题没有提供类似这样的参数,想改的去主题文件夹中更改。# NEST TemplateTHEME = 'pelican-themes/nest'SITESUBTITLE = u'我的 果子'# Minified CSSNEST_CSS_MINIFY = True# Add items to top menu before pagesMENUITEMS = [('果园', '/'),('类别','/categories.html')]# Add header background image from content/images : 'background.jpg'NEST_HEADER_IMAGES = 'background.jpg'NEST_HEADER_LOGO = '/images/logo.png'# FooterNEST_SITEMAP_COLUMN_TITLE = u'目录'NEST_SITEMAP_MENU = [('归档', '/archives.html'),('标签','/tags.html'), ('作者','/authors.html')]NEST_SITEMAP_ATOM_LINK = u'Atom Feed'NEST_SITEMAP_RSS_LINK = u'RSS Feed'NEST_SOCIAL_COLUMN_TITLE = u'社交'NEST_LINKS_COLUMN_TITLE = u'链接'NEST_COPYRIGHT = u'© 果园 2017'# Footer optionalNEST_FOOTER_HTML = ''# index.htmlNEST_INDEX_HEAD_TITLE = u'果园'NEST_INDEX_HEADER_TITLE = u'林间果几颗'NEST_INDEX_HEADER_SUBTITLE = u'一篇篇博客,就像一粒粒果子,从思想最深处,逐渐结出'NEST_INDEX_CONTENT_TITLE = u'旧果'# archives.htmlNEST_ARCHIVES_HEAD_TITLE = u'归档'NEST_ARCHIVES_HEAD_DESCRIPTION = u'上传归档'NEST_ARCHIVES_HEADER_TITLE = u'归档'NEST_ARCHIVES_HEADER_SUBTITLE = u'收集起来的一篇篇博客,一粒粒果子,都是时间的见证'NEST_ARCHIVES_CONTENT_TITLE = u'归档'# article.htmlNEST_ARTICLE_HEADER_BY = u'作者 'NEST_ARTICLE_HEADER_MODIFIED = u'修改于 'NEST_ARTICLE_HEADER_IN = u'归类于 '# author.htmlNEST_AUTHOR_HEAD_TITLE = u'上传自 'NEST_AUTHOR_HEAD_DESCRIPTION = u'上传自 'NEST_AUTHOR_HEADER_SUBTITLE = u'上传归档'NEST_AUTHOR_CONTENT_TITLE = u'上传'# authors.htmlNEST_AUTHORS_HEAD_TITLE = u'作者'NEST_AUTHORS_HEAD_DESCRIPTION = u'作者'NEST_AUTHORS_HEADER_TITLE = u'作者'NEST_AUTHORS_HEADER_SUBTITLE = u'根据作者归档'# categories.htmlNEST_CATEGORIES_HEAD_TITLE = u'类别'NEST_CATEGORIES_HEAD_DESCRIPTION = u'根据类别归档'NEST_CATEGORIES_HEADER_TITLE = u'类别'NEST_CATEGORIES_HEADER_SUBTITLE = u'根据类别归档'# category.htmlNEST_CATEGORY_HEAD_TITLE = u'类别归档'NEST_CATEGORY_HEAD_DESCRIPTION = u'类别归档'NEST_CATEGORY_HEADER_TITLE = u'类别'NEST_CATEGORY_HEADER_SUBTITLE = u'类别归档'# pagination.htmlNEST_PAGINATION_PREVIOUS = u'上一页'NEST_PAGINATION_NEXT = u'下一页'# period_archives.htmlNEST_PERIOD_ARCHIVES_HEAD_TITLE = u'归档于'NEST_PERIOD_ARCHIVES_HEAD_DESCRIPTION = u'归档于'NEST_PERIOD_ARCHIVES_HEADER_TITLE = u'归档'NEST_PERIOD_ARCHIVES_HEADER_SUBTITLE = u'归档于'NEST_PERIOD_ARCHIVES_CONTENT_TITLE = u'归档于'# tag.htmlNEST_TAG_HEAD_TITLE = u'标签归档'NEST_TAG_HEAD_DESCRIPTION = u'标签归档'NEST_TAG_HEADER_TITLE = u'标签'NEST_TAG_HEADER_SUBTITLE = u'标签归档'# tags.htmlNEST_TAGS_HEAD_TITLE = u'标签'NEST_TAGS_HEAD_DESCRIPTION = u'标签'NEST_TAGS_HEADER_TITLE = u'标签'NEST_TAGS_HEADER_SUBTITLE = u'根据标签归档'NEST_TAGS_CONTENT_TITLE = u'标签'NEST_TAGS_CONTENT_LIST = u' 被标注'

  1. 见上: ↩

0 0