Hello Github

"Hello World, Hello Blog"

Posted by Jc on May 29, 2016

“Yeah It’s on. ”

前言

Jc 的 Blog 就这么开通了。

跳过废话,直接看技术实现

2016 年, 总算有个地方可以好好写点东西了。

作为一个程序员, Blog 这种轮子要是挂在大众博客程序上就太没意思了。一是觉得大部分 Blog 服务都太丑,二是觉得不能随便定制不好玩。之前因为太懒没有折腾,结果就一直连个写 Blog 的地儿都没有。


正文

接下来说说搭建这个博客的技术细节。

正好之前就有关注过 GitHub Pages + Jekyll 快速 Building Blog 的技术方案,非常轻松时尚。

其优点非常明显:

  • Markdown 带来的优雅写作体验
  • 非常熟悉的 Git workflow ,Git Commit 即 Blog Post
  • 利用 GitHub Pages 的域名和免费无限空间,不用自己折腾主机
    • 如果需要自定义域名,也只需要简单改改 DNS 加个 CNAME 就好了
  • Jekyll 的自定制非常容易,基本就是个模版引擎

配置git环境

下面介绍一下我自己的Ubuntu 16.04.2 LTS系统配置环境的流程:

1、安装git命令

jc@host:~$ sudo apt-get install git

2、安装完成之后进行用户配置

jc@host:~$ git config --global user.name "wangjiachun"
jc@host:~$ git config --global user.email "your_email@example.com"

3、生成新的SSH密钥并将其添加到ssh代理

参考: Generating a new SSH key and adding it to the ssh-agent

通过以下命令开始生成秘钥的流程,并通知Github的email

jc@host:~$ ssh-keygen -t rsa -b 4096 -C “your_email@example.com”

之后会有下面的提示设置秘钥存储目录和输入秘钥的密码

Enter file in which the key is (/Users/you/.ssh/id_rsa): [Hit enter]
Key has comment '/home/wangjc/.ssh/id_rsa'
Enter new passphrase (empty for no passphrase): [Type new passphrase]
Enter same passphrase again: [One more time for luck]
Your identification has been saved with the new passphrase.

4、把生成的SSH key的公钥加入到Github账户中

公钥和私钥存储在同一目录下,默认是~/.ssh/id_rsa.pub。 复制该文件的全部内容到Github账户下的SSH and GPG keys的New SSH key,并同时添加秘钥所在主机的描述

参考github官方文档的教程

5、从远程服务器上拷贝库

选择需要拷贝的库并打开下图所示的复制框,复制文本框内的内容为远程目录地址

然后就可以把远程库内的文件下载到本地,在终端输入

jc@host:~$ git clone git@github.com:username/username.github.io

如果配置了SSH key的密钥,这里需要验证输入。到此就完成了基本git环境的建立。下面介绍如何对本地库进行操作并同步到服务器上。

同步本地代码库

1、本地编写或修改代码

2、提交代码到缓存区,如果只修改了一个文件,就只需要提交这个文件名字,如果修改了多个文件,一个一个地提交会比较慢, 就可以直接提交所有文件,add命令把待提交的文件暂存到本地缓存中等待提交

jc@host:~$ git add <filename> # 提交一个文件
jc@host:~$ git add --all # 提交所有文件

3、文件add到缓存之后并没有与远程服务器建立连接,使用commit命令来提交最后一次add的结果

jc@host:~$ git commit -m "代码提交信息"

4、以上都只是在本地的离线操作,相当于准备好了修改后的代码,只等一个命令下达就可以同步到远程服务器上, 这个命令是长这样婶的

jc@host:~$ git push origin master

这里可以把 master 换成你想要推送的任何分支。 至此完成了基本的版本同步过程。 git - 简明指南详细清晰的介绍了本地库和远程库连接的工作原理。 了解了代码的同步和提交过程,下面就是建立本地编译环境

建立本地编译调试环境

  本地编译调试环境支持linux和windows两种,以下内容以ubuntu为例介绍如何建立调试环境,windows下需要安装同样的几个软件包,就不一一介绍,具体方法可以参考 building static sites with jekyll github pages

  配置好git环境,并了解了同步代码库的流程之后,就可以通过username.github.io发布、维护和查看自己的博客文章。但是,如果每次有更新, 或者想看看新发布文章的样式如何,都要去提交到github服务器,然后打开浏览器。这个过程是很繁琐并且费时的,下面介绍如何建立本地 编译环境。建立了本地环境之后,我们可以在本地浏览器预览文章被发布之后的样子,即快速又方便。

  为了建立一个良好稳定的本地编译环境,需要安装nodejs, rvm, ruby, gem, github-pages, jekyll,看到这么多需要安装的包一开始是有点头大的, 幸好我已经踩过了一些坑,下面我一步一步介绍如何安装。实际上,这些包是有依赖关系的我们的终极目的是为了安装jekyll,jekyll是是一个简单的博客形态的静态站点生产机器。它有一个模版目录,其中包含原始文本格式的文档,通过一个转换器(如 Markdown)和我们的 Liquid 渲染器转化成一个完整的可发布的静态网站,你可以发布在任何你喜爱的服务器上。Jekyll 也可以运行在 GitHub Page 上,也就是说,你可以使用 GitHub 的服务来搭建你的项目页面、博客或者网站,而且是完全免费的。听不懂没关系,只需要知道我们用它来把原始的博客文本从markdown形式转换到到浏览器中就可以了。 jekyll是基于ruby的,而rvm是ruby的版本管理器,gem是Ruby 社区的 Gem 托管服务,可以方便快捷地安装、管理ruby及其组件。有了gem这个神器, 就可以一键安装github-pages和jekyll了。先来安装rvm,官网介绍的安装方法是这样的

jc@host:~$ curl -sSL https://get.rvm.io | bash -s stable --ruby

  由于国内网络某些不可描述的原因,这其中的链接经常访问不过,如果你用这种方法成功安装了,那恭喜你!可以跳过这块继续安装其他工具。 对于安装不了的同学,介绍一种来自大熊猫猪·侯佩的巧妙方法 linux下安装ruby版本管理器RVM

  有了rvm之后就可以轻松的安装ruby,这里注意一点,github pages为了使版本统一在2017年升级Jekyll3.0,并强制使用rouge语法高亮。而jekyll3.0以上的版本要求 ruby必须是2.0以上的,所以我们安装ruby时要装一个至少2.0的版本。同时list命令查看系统已安装的所有ruby版本,显式应用某个版本的ruby用use命令, 建议只安装一个版本的ruby即可

jc@host:~$ rvm install 2.3
jc@host:~$ rvm list
rvm rubies

=* ruby-2.3.3 [ x86_64 ]

# => - current
# =* - current && default
#  * - default
jc@host:~$ rvm use 2.3

  之后安装gem,为了防止网络问题,还是直接从官网下载安装包,链接在这里RubyGems,下载TGZ文件到本地目录并解压安装。 或者直接本地下载。安装好gem后更新一下版本,

jc@host:~$ cd ~/Downloads
jc@host:~$ wget https://rubygems.org/rubygems/rubygems-2.6.12.tgz
jc@host:~$ tar zxvf rubygems-2.6.12.tgz
jc@host:~$ cd rubygems-2.6.12
jc@host:~$ ruby setup.rb
jc@host:~$ gem update --system

安装好gem之后可以直接安装jekyll,这里先安装github-pages,因为jekyll的页面信息依赖于github-pages

jc@host:~$ gem install github-pages
jc@host:~$ gem install jekyll

安装jekyll的过程,如果出错,可能是因为网络原因,建议使用淘宝的源来下载,感谢大熊猫侯佩的贡献。

而nodejs是相对独立的安装包,通过npm来安装

jc@host:~$ npm install node

至此就完成了所有包的安装。使用-v,检查一下版本安装是否正确吧。可以参考一下我的安装

本地调试博客可以使用输入命令,然后在浏览器窗口输入 localhost:4000 就可以预览文章了

jc@host:~$ cd wangjiachun.github.io
jc@host:~$ jekyll serve --watch

这里是几个编辑markdown文档的精巧小工具

使用sublime编辑文章

下面介绍的是如何在本地编辑文章,更方便的编辑博客。看了上面这么多建站流程,应该会有点累了,如果不想继续阅读,这部分可以留待以后阅读。

在ubuntu上安装sublime

  sublime是一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件。ubuntu上安装sublime的过程比较简单。

  到Sublime Text官方网站上下载64位的安装包sublime-text_build-3059_amd64.deb,下载后双击安装即可。安装好之后,通过命令subl即可打开程序,此时已经可以编写代码了。

在windows上远程连接服务器的sublime

  我平时比较喜欢用windows编辑文件,所以给有同样习惯的coders分享一下如何在windows下用sublime远程编辑服务器端的文件的链接。

关于本篇博客

  大的 Jekyll 主题上直接 fork 了 Hux Blog(这个主题也相当有名,就不多赘述了。)

  在整个搭建博客的过程磕磕绊绊,还把ubuntu桌面弄没了一次( sudo apt-get upgrade 命令还是少用为妙) 这里简单介绍一下github,它是一个免费的开源项目托管工具,而不是一个编译器,我刚开始使用他的时候到处找可以编译代码的地方无果, 最后看了一些博客才知道git只是一个存放项目的reposities.

  对于github上的各种具体功能网上介绍比较多,这里就不做介绍了.参考某知乎er的介绍怎样使用 GitHub?

  对于算法工程师来说,这个模板相对来说是比较省时省力的,个人博客可以做的好看又不用费心看一些html和css的东西.

## 参考github教程

总结

对于这次艰难的建站之旅来说,主要是有这么两点收获.

第一 做项目也好,写代码也好,任何事做之前需要明确目标,知道自己在干什么.

  经常有这种事发生:计划今天去北京大学参加一场别开生面的讲座,从宿舍出发,等公交时突然口渴,就去买个西瓜解解渴,买完西瓜从超市出来看到学院路有一个大明星在露天表演,于是过去看了一小时,刚准备走,发现没带公交卡,时间也到了中午索性就下午再去,回去吃个饭,睡个午觉,一不小心睡到了下午5点,想想明天再去吧当别人问我你今天干了什么的时候,我哑口无言.

这个小段子虽然冗长但是比较有代表性,一部分人经常会被各种其他的诱惑和欲望所干扰,导致自己的目标发生了转移,最后想做的事情都没有做好,我们需要对自己负责,是要对自己的每一个行为的后果,发生的动机,以及这个行为在长期和短期目标中的价值多少有一个合理的认识.

第二 对于自己不会的东西要善于从网上寻找对应的方法,有些路绕不过去,就换个思路,不要钻牛角尖。比如我想在原来的系统上重新建立本地环境,发现许多已安装的包 发生了break,就想着怎么修复他们。更快速的方法是,直接卸载掉,然后重新安装。

2016.5.29 by Jc

2017.5.20 updated