zoukankan      html  css  js  c++  java
  • [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。但是有时侯拼音是错误的,而且对于搜索引擎很不友好。

    参考

  • 相关阅读:
    公用表表达式(CTE)的递归调用
    c# 如何让tooltip显示文字换行
    实战 SQL Server 2008 数据库误删除数据的恢复
    SQL SERVER数据库中 是否可以对视图进行修改删除
    asp.net中实现文件批量上传
    sql server 2008学习2 文件和文件组
    sql server 2008学习3 表组织和索引组织
    sql server 2008学习4 设计索引的建议
    sql server 2008学习10 存储过程
    .net 调用 sql server 自定义函数,并输出返回值
  • 原文地址:https://www.cnblogs.com/xueweihan/p/5249715.html
Copyright © 2011-2022 走看看