[ 分享 ]github + jekyll 建造免费的个人 blog

  1. 先扯淡几句
    (1) 为什么要搭建个人博客?
    有目标才有去做的动力。这无疑是要解决的第一个问题。
    确实,很多情况下是似乎没有必要,耗费精力。特别如果你和我一样是学生,
    我觉得多学点知识比什么都好。但是也有有利的一面。比如:
    <1> 分享知识,表达思想。有时候分享的过程让你对知识有更深入的理解。当然,
    和 openSUSE 有关的分享建议贴 wiki 和 论坛:),有个公开的平台也可以督促
    自己(这个因人而异)。
    <2> 自身的宣传平台。在《如何成为一名插画师》这本非常著名的小册子中作者
    提出一个非常重要的观点。要趁早的宣传自己。无疑个人网站是一个很好的平台,
    日后可以作为是一份很好的简历。作者也确实这样说了,早点建立自己的网站,展示自己
    的作品,不要放过各种的机会。当然,从事其他行业也可以通过个人网站来宣传自己。
    <3> 学习一些网站的知识。有志成为一个 web 程序员的新手或者业余爱好者,
    这无疑是一个实践的好机会。门槛非常低。可以为以后自己做更加专业的网站打
    打基础。
    <4> 当然,很重要的一点,有个个人博客是很拉风的,比你 QQ 空间买个黄钻什
    么的一定是拉风的多。
    (2)为什么要用 github + jekyll?
    从某种程度上来说,弥补了耗费精力这点不足。用 github + jekll 搭建的环境
    非常省心。更重要的一点,不仅省心而且省钱,这个不用花钱。以我个人来说,
    作为一个穷苦的学生党,花几百RMB,建一个月访问量可能只有个位数的网站,
    不如把钱捐个社区。当然你们省下的钱也可以捐给社区:)
    (3)为什么要写这样的教程?
    说实话,关于 github + jekyll 的教程可以在网上找到很多(讲一些内容的时
    候我可能就直接引用了)。为什么要写这篇。因为没有(我没有发现)在
    openSUSE 下操作非常小白的从注册 github 到生成可以访问网页一条龙的教程。
    所以我觉得可以写写。希望对大家有帮助。

好了,下面开始。

2.正式的教程
(0)基础
当然你要有一台可以上网的电脑装的系统最好的openSUSE:),不需要会 git,学会本文
讲到的几个命令就好了。不用会 ruby。甚至你不需要会用 zypper,因为我会把
命令贴给你(当然这个你还是会的好)。需要先学会本文不会讲到的就是你要会用
markdown,这个非常好学的。半个小时绰绰有余。当然你要会用 html也可以。

你需要安装 git,ruby,ruby-devel。通过 zypper 非常方便就安装了。

sudo zypper in git ruby ruby-devel

(1)创建 github 帐号
建立帐号前先配置一下你的 git。很简单,就是你的名字和邮箱。

然后创建一个 github 的帐号。这个 so easy。登陆 github 网站。(一个帖子不能有太多链接,这个大家找得到的吧?google github 一般
就是第一个)

进去以后注册邮箱验证什么的,和注册论坛没有什么区别。然后比较关键的一步。
github 添加远程仓库。你需要使用 SSH Key,这个可以让你访问远程仓库方便
一点。你总不希望每次提交都要输入密码吧,而且我发现有时候输入密码也会推
送失败。不如用 SSH 来登陆。直接贴一份 图文并茂的教程](远程仓库 - 廖雪峰的官方网站) 。

只要看我上面贴的这章就可以了。十分钟看完搞定。
(2)建立博客并测试
如果你愿意可以看看这篇 非常短的 git 教程](git - the simple guide - no deep shit!) 有个印象也好。不
乐意也没有关系。我们日常用到三个命令就可以了。

git add --all
git commit -m "提交的说明"

这两个命令可以合起来理解就是把你的修改添加到 git 仓库。

git push

提交,这里其实就是发布你的网页

现在让我们开始建立我们的博客了。继续贴传送门。 githubpag

不怕,虽然是英语你看图也应可以懂,这点内容你每个单词查也花不了多少时间
。唯一需要注意的一点是,不要按照上面的教程直接

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

这样你上传的时候会非常麻烦。因为我们已经弄好了 SSH key,所以改成使用 ssh clone 而不
要用 https,这个 SSH 的链接可以在你的 github 上轻松找到。他看上去是这
样的

git@github.com:username/username.github.io

按照上面的内容你应该有了一个写着”Hello World“字样的博客主页了。
你可以通过浏览器在任何时间任何地点访问他。

(3)本地安装 jekyll 并创建真正的网页
为什么要用 jekyll?什么是 jekyll?

你可以这样理解。他就是这样一种东西。你可以用非常方便的方法(比如
markdown)写好文章的内容,然后丢给 jekyll,然后 jekyll 就会帮助你转换
成网页上的东西。

实际上你并不一定要在本地安装 jekyll。你只要按照 jekyll 的规范用任何编
辑器写好东东,然后丢到刚才你建立的仓库中去就可以了。github 会用 jekyll
处理成你可以访问的网页。

但是在本地有 jekyll 这样有几个优点:
<1> 手动创建会很麻烦,jekyll 是可以自动生成符合要求的目录结构的和一些默认的配置文件。
<2> 有了 jekyll 可以本地测试生成的网页。你总不会希望发布了才发现其实你
写的东西是一堆乱码吧。

我们现在来安装 jekyll,首先我们需要安装 ruby 和 ruby-devel。注意一
定要安装 ruby-devel。不然无法通过 gem 安装 jekyll。我发现即使你在 YaST
安装了 Ruby 开发环境,ruby-devel 也不会被自动安装。所以务必要安装好
ruby-devel。

安装玩 ruby-devel 以后要我们还要干一件事情就是换 ruby 的源。默认的实在
是太慢了。我们换成淘宝的源下面的操作你复制粘贴就看可以了。

sudo gem sources -a ruby.taobao.org/
sudo gem sources --remove rubygems.org/

操作完了你可以运行 gem sources -l 看看是不是改好了。改好了他的输出应该
是这样。

*** CURRENT SOURCES ***

http://ruby.taobao.org

确保只有一个源地址。

然后安装 jekyll。这个很简单。
sudo gem install jekyll

还记得上面你看 clone 下来的网页,里面只有一个写着 “hello world” index.html?
现在删掉这个 index.html,保持这个目录是空的(隐藏文件保留不用管它)。使用

jekyll2.0 new username.github.io 

来创建我们的目录。

username.github.io 的名字太难记了。你可以改一个自己喜欢的名字。这个没
有关系。比如 blog-jekyll。那样你就运行

jekyll2.0 new blolg-jekyll

对的,你没有看错,用的就是 jekyll2.0。是没有 jekyll 这个命令的。当然你
可以建立一个链接把 jekyll2.0 链接到 jekyll。不过也没有必要。你在终端输入 jekyll 然后俺 tab 补全
就可以了。其实你只要输入 je 就可以按 tab 补全了。

现在你的 blolg-jekyll 文件夹里面会有很多的文件和文件夹他的目录应该是这
样的:

|-_config.yml
|- index.html
\css
		|-main.css
		|-syntax.css
\_layouts
		|-default.html
		|-post.html
\_posts
		|-*.markdown

现在你要做的事情非常简单。只要去 _posts 目录下创建一个 markdown 文件就
可以了。这里假定你已经会了 mardown。你只要把文章用 markdown 格式写好
放到 _posts 文件里就好了。有几点要注意的。你的 markdown 文件开头需要包
含类似这样的内容。

---
layout: post
title: xxxxxx
---

当然还可以自定义很多东西。那个 layout 就是样式,名字就是_layout 文件夹里存在的样式文件的名字,
title 就是文章的标题。还要注意你的 markdown 文件名必须是 YYYY-MM-DD-文章名.markdown。就是日
期+文章名这种格式。

这样写好你只要用我说过你必须记住的三个 git 命令就可以了

git add --all
git commit -m "提交信息"
git push

就可以了,等上十分钟,你就以在网页上看到你写的内容了。

但是且慢。万一你写错了怎么?当然我们需要本地测试看看结果了。我们可以在
jekyll 目录下这样做。

jekyll2.0 build

构建网页

jekyll2.0 serve

这个时候你会开启一个本地服务。你看到的输出大概是这样的。

根据提示,你可以通过浏览器访问这个地址 0.0.0.0:4000/ 来本地查看
你写的内容。

话说 jekyll 这点非常人性化,就是他会吧本地的生成的文件(_site 里的东东,
你 build 以后会看见这个目录)自动添加到.gitingore 里。不会添加到远程仓
库。

(4)你可能需要继续学习的内容
<1> 更多的 jekyll 的知识](http://jekyllcn.com/) 和更多 git 的知识 ,你也许要定制更加个性的网页。添加新的功能比如
添加图片

<2> html 和 css 的知识。可以让你的网页更加漂亮。w3school 是个很好的去
处。免费学习一些网络知识。
<3> 美工知识,这个就靠积累了。一些色彩排版的常识。
<4> 写作知识。其实我觉得这个才是最重要的。清晰的表达自己的思想。

*3.Emacs 用户的福利(使用 org-mode 来攥写博客)
非 Emacs 用户可以直接跳过了。使用 ReText 来写博客足够省心。没有必要为
了写一个 blolg 来学习 Emacs。他并不会提高很多效率不过有兴趣学习一下
macs 倒是可以的。如果没有兴趣,现在就就可以直接去创建自己的博客,享受
写作分享的乐趣了吧。

##############################################
##############################################
##############################################

好了,剩下的都是 Emacs 用户了吧。恩,我前面说的当然是开玩笑的了。哪里
有比 Emacs + org-mode 更加舒适的写作环境。比它简洁的没有他强大,比他强
大的没有他简洁。 markdown 的功能太弱了,html 又太繁琐。org-mode 的语法
也非常复杂确实。插入代码需要写一大堆东西。但是我们有 YASnippet 这种大
杀器。完全弥补这种不足。

好了废话少说我们开始。首先我们需要把 org-mode 更新到最新。你可以直接去
官网下载或者使用 elpa(大家应该都用过一段时间 Emacs 的吧我就不细讲了)。通过 elpa
升级 org-mode 有个已知 bug。可以通过这种方法来暂时解决。

删除掉已经安装的 org-mode(如果你装过),用 emacs -q 裸奔,然后通过
package-install 安装。

为什么要安装最新的 org-mode 呢?因为中文分词的问题。org-mode 开自动换
行是通过自动添加 /n 实现的。所以输出 html 的时候分行会变成空格。在中文
里是非常难看的。最新的 org-mode 可以解决这个问题。只要在你的配置文件里
添加。

(defadvice org-html-paragraph (before org-html-paragraph-advice
                                      (paragraph contents info) activate)
  "Join consecutive Chinese lines into a single long line without
unwanted space when exporting org-mode to html."
  (let* ((origin-contents (ad-get-arg 1))
         (fix-regexp ":multibyte:]]")
         (fixed-contents
          (replace-regexp-in-string
           (concat
            "\\(" fix-regexp "\\) *\n *\\(" fix-regexp "\\)") "\\1\\2" origin-contents)))

    (ad-set-arg 1 fixed-contents)))

下一步我们让 org-mode 输出 html 到 jekyll 的 _posts 里,jekyll
可以接受 html,但是不要和 markdown 混用,也最好吧 _config.yml 里
markdown 里那一行去掉。当然也可以输出 markdown,但是
<1> 我没有找到去掉中文空格的方法。
<2> 这就好比把高清照片降低像素了。org mode 可以做到的控制比 markdown
要复杂。
好了,下面我们来建立这样一个 org 项目。

(setq org-publish-project-alist
      '(
		("org-blog"
		 :base-extension "org"
		 :base-directory "~/你放 org 文件的地方/"
		 :recursive t
		 :publishing-function org-html-publish-to-html
		 :auto-preamble t
		 :headline-levels 4 
		 :html-extension "html"
		 :publishing-directory "~/你博客的 _posts 位置/"
		 :body-only t ;; Only export section between <body> </body>

)))

注意一定要添加 publishing-function,这和老版的不同。而且注意让
body-only 为 t,这样避免输出的 html 混乱。好了,你现在就可以
在 org 目录里写 org 然后导出到 jekyll 啦。

但是还有一个问题。用 markdown 写作的时候我们必须要添加文件头信息,在
org-mode 里我们也需要。

但是每次都写太繁琐了。而且都是一样的内容。Emacs 自身就有功能可以自动插入这些内容。
但是我使用的是 template.el
他的功能更加强大安装,安装好后在 org 目录下丢一个 TEMPLATE.org.tpl。里面添加:

#+STARTUP: showall indent
#+STARTUP: hidestars
#+BEGIN_HTML
---
layout: default
title: (>>>POINT<<<)
---
#+END_HTML

template.el elpa 里没有,链接上面已经给出了。

enjoy!

补充一:增加语法高亮和 LaTeX 数学公式的支持

如果大家需要书写的是技术博客的话,这两条似乎是少不了的。

其实语法高亮本来就是支持的。如果要本地测试则需要安装 python。

但是如何修改语法高亮的样式呢?具体看这里。

zyzhang.github.io/blog/2012/08/31/highlight-with-Jekyll-and-Pygments/

对 LaTeX 的支持也是必不可少的。这个也非常简单。看这里

blog.drowcoder.me/blog/2012/07/23/latex-in-jekyll/

  • 补充二:Emacs 的写作环境
    经过我几天的实践,发现使用 org-mode 输出 html 的方法有时候会出一些尴尬的错误。似乎只有处理简单的
    情况可以用。所以现在推荐各位 Emacs 用户使用 markdown-mode + yas。你可能需要用 yas 自定义一些模板,
    因为 githubpag 的 markdown 会包含一些特殊的东西(比如语法高亮)。

至于空格的问题,只有舍弃自动缩进了。虽然 Emacs 那个换行符有点丑。。。

blog 打错了打成了 bolg

我曾经也觉得建设 blog 很好。后来发现自己花费精力太多学习比什么都重要。目前已经撤销了 blog。几个朋友的 blog 也没有更新了。

我现在是彻底省心了。blog 再怎么样,感觉很死板,只能一篇一篇的,组织内容不太舒服。我现在直接用 asciidoc 生成纯 HTML 网页,很舒服。另外我感觉其实 Sphinx-doc 很适合做个人网站,结构类似文档和书籍,我感觉比 blog 结构上舒服一些。

blog 程序我倒是更喜欢 pelican 一些。jekyll 用的是 markdown 不太好用。

谢谢提醒,我的渣英语,一疏忽就会这样。经常的 word 打成 world 这种错误。这种错误 Emacs 开了拼写检查也察不出。。。。

还好,我鼓捣了一下发现 markdown-mode 还是蛮舒服的,一些东西不需要手动输入。再用 Yas 做了几个缩略词,感觉也不错。中文空格找了一个 ruby 脚本给解决了。当然用 retext 写也很方便。

jekyll 总的来说还算方便。支持 LaTeX、语法高亮,输出也还美观。不花钱,用一两天时间一个 blog 就可以弄好。以后你只管写就好了。markdown 毕竟有点简陋。但是写写小文章还可以。

就把他当成一个存放自己写的文章的地方。只是这个地方别人随时可以看到。

内容组织可以分类,文章怎么排列可以定制,你要做成 wiki 一样也可以。结构松散也有优势吧。毕竟只是随意记录一些想法,耗费太多精力确实不好。所以用 markdown jekyll,这还是比较省心的。

blog 也可以很多样,这也看人。看北大那位文科生的数学博客,严谨加点随性,我反而觉得后来整理博客出的书没有原来博客好。没有了那种无心插柳。那才死板。

可能是太刻意去做一个博客会觉得死板吧。

放松一点,这不过是 github 上的一个仓库罢了,和你 git 在上面的 vim/emacs 配置文件没有什么两样。也许这样的心态比较好。想写写一点,不想写扔到一边。回头看也许有意外惊喜。

或许吧。我有的事情就是太追求完美了,浪费了很多时间,最后干脆不做了。
总感觉 blog 的框架局限性很大。

markdown 的强大性和 Sphinx、asciidoc 相比实在差太远了。都是 github 给它捧红的。

Jekyll 麻烦的很大一个是我比较反感 RVM,因此尽量原理非官方源提供的一切 ruby 包。

Sphinx 其实也是很方便的。而且有 readthedocs.org 这个网站,可以用钩子和 git 仓库绑定,用起来一点也不比 jekyll 麻烦,但是功能强大不少,而且是按照书的结构组织的。

我看到很多教程也说需要 rvm,但是我发现 openSUSE 下不不要,貌似 openSUSE 下的 ruby 提供多个版本,分别是 Ruby19 Ruby20, 默认的 Ruby 就是 rub20。也可以显式的调用,用 gem 下载下来的 jekyll 会是 jekyll20 这种样子。

也许是 Ruby 已经有改进了吧。rvm 这种东西确实很讨厌,不是论坛里有个帖子是说用了 rvm 装了 Ruby 以后 YaST 挂了么。其实没有必要用 rvm,不过在 openSUSE 下用 Ruby 应该会满舒服吧,毕竟 YaST 用的 Ruby。

用 gem 管理 Ruby 包还可以,可以接受。就像用 R 语言自身管理 R 的包,用 Emacs 自带的 epla 管理 Emacs 的包。这不会把系统弄的很乱。rvm 就非常讨厌了。源里也好像不提供他。

RVM 是我讨厌 ruby 的最主要原因。 因为 RVM 的存在我一看到官方源里没有的 Ruby 程序立刻避而远之。

Python 虽然也有 virtualenv,但是很少用到这个东西,而且看起来也比 rvm 舒服一些。我用了很多 python 包从未需要过 virtualenv。

我觉得 YaST 当时就不该去用 ruby。因为 RVM 的讨厌程度是很高的。我相信很多 Linux 用户都反感此类玩意儿。不过 Mac 用户似乎有不少喜爱和甚至崇拜 RVM 的。超过了我的理解范围。

Python 在这方面比 ruby 要舒服得多。 而且在语法上我也比较喜欢 python,就是 python 的缩进很烦人。 考虑 lua 中。

以前折腾过 jekyll 的,不过后来 Arch 的 ruby 升级到 2.x 之后 jekyll 就不用鸟了… 不是 rb dev 不会搞。

这个好处在于所有的文件都在 git 仓库里,本地数据丢了或者要转移一点不怕。

不过我还是选了似乎更好用的 hexo。我的 blog 在签名里。

sphinx 也能做到所有文件都在 git 仓库里。用 hook 和 rtfd 挂钩即可。不过我现在更喜欢在自己的本地硬盘上慢慢搞,以后再往服务器手动拷贝。

我现在的个人站点也是 github + jekyll 搭建的,之前在百度开放云平台搭建的 b3log 博客,由于不能绑域名了(我的域名没有备案),就不想用了,其实百度开放云平台访问速度真是快。

之前建了一个,用的 Hexo ,觉得太慢了. 维护麻烦.

来自我的 M356 上的 Tapatalk

At least you won’t need to maintain any databases. Nor will you need to maintain any domains.

Yeah ,now i am using wordpress ,but i think the markdown style is better . WP’editor is not easy .

来自我的 M356 上的 Tapatalk

强帖

为什么不用新浪的 Sae 或者 redhat 的 openshift 外加 wordpress 来建站呢?它们都有模板指导安装的,很简单就完成了,不用这么复杂。
如果就是搭建一个博客的话,没必要搞那么麻烦吧?

有很多劣势:

  • 成本
  • 需要管理维护
  • 迁移复杂
  • wordpress 数据不在自己本地,万一出现问题(比如忘记续费、服务商垮了),数据就没了

用 pelican(我不喜欢 jekyll),优势很明显:

  • reStructuredText(我不喜欢 markdown)打起来速度很快
  • 版本控制容易应用
  • 静态 HTML,迁移方便
  • 本地保存数据安全

等等。

另外安装 wordpress 我个人感觉远远比装一个 pelican 要复杂。

  1. sae 免费送云豆,要是有开发者认证,基本免费使用。openshift 是完全免费的。
  2. 如果用 sae 或者 openshift 的话,基本不怎么需要维护,除非你喜欢折腾。
  3. wordpress 导出、导入非常简单。
  4. 至于数据,你可以隔段时间就备份嘛,何必太担心。
  5. 安装问题的话,sae 和 openshift 能提供的已安装好 wordpress 的环境,你所要做的就是写博客。
  6. wordpress 是主流的博客系统,拥有很多好用的插件。部署在云端根本不用担心流畅度的问题。

建议有需要的试一试,你会喜欢的。

对于一个懒人来说,sae 和 openshift 简直太省心啦! :sunglasses:

我不是没用过 wordpress,还真不觉得 wordpress 比 pelican 省心。插件虽多,我一个都不需要用。 隔断时间就备份,那就是麻烦的事情了不是吗? 另外 pelican 的话我用 rst 写文章,全部 vim 编辑很是高效,wordpress 的编辑器就蛋疼很多了。

你用过 pelican 和 github pages 吗? 如果你喜欢简洁够用的风格的话,你会喜欢的。

主流我觉得主流不等于好,在 PHP+ 数据库的 blog 平台里,我个人比较欣赏的是 textpattern。但是这货太强大了,我不需要,我也不需要什么定制,只需要一个简单省心的 blog 的话,我感觉还是静态生成器好用。

写博客嘛,要的就是省心。sae 或 openshift 很容易就安装好 wordpress 了,要做的就是写文章。

wordpress 编辑器对我来说,够用,不用学就可以上手。博客用不着那么多的功能,文字是最重要,基本的形式能出来就足够。

你说的 pelican,我没有用过,查了一下,学习的成本可能比较高。

我主张工具服务于内容,不喜欢折腾。