Linux下用Hexo搭建博客小记

Talk is cheap. Show me the code.

第一篇,权当练手+测试

Hexo简介

Hexo是一个基于Node.js的静态博客软件,可用Linux/Windows/Mac部署,也可直接托管在Github上,简单易学。
用hexo写博客的步骤是:

  1. 在本地用markdown语法写一篇文章;
  2. 在本地生成静态网页,并启动本地server调试
  3. 调试完成后,由于Github Pages可以解析静态页面,因此直接上传到gitpages就可以。

安装Hexo

下面的过程基于Debian 4.13.4-2,其他系统的安装类似,也可以从官方文档找到。

安装Git:

$ sudo apt-get install git-core

安装Node.js:

$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

注意这里不需要sudo,直接用普通用户即可。

装完nvm之后,重启终端并安装Node.js:

nvm install stable

安装Hexo:

npm install -g hexo-cli

初始化Hexo

  1. 本地新建一个目录如blog
  2. 进入该目录,执行hexo init
  3. 运行npm install
  4. 最后运行hexo generate && hexo server (或者简写为hexo g && hexo s),会在http://localhost:4000启动一个本地服务器供调试。
  5. 如果http://localhost:4000可以正常访问显示“Hello World”,说明搭建成功啦!

部署到Github Pages

首先需要确保拥有一个github账号,并按照Github Pages文档创建一个repository。
该repository的名称有严格规定:<username>.github.io
如我的用户名是guolianghan,对应的repository名称就是guolianghan.github.io。

为了将来免密码登录,需要把本机的公钥(~/.ssh/id_rsa.pub)复制到github上,然后用如下命令测试:

$ ssh -T [email protected]

输入yes,如果看到”You’ve successfully authenticated”字样,就说明ssh公钥上传成功了。

接下来修改blog目录中的_config.yml配置文件,找到deploy字段,修改为(用户名改为自己的):

1
2
3
4
deploy:
type: git
repository: [email protected]:<username>/<username>.github.io.git
branch: master

然后执行下述命令生成并推送到github:

$ npm install hexo-deployer-git -save && hexo g && hexo d

以后https://<username>.github.io就可以作为博客地址了。默认就有HTTPS小绿锁,很赞!

绑定自己的域名

比起Github默认的域名来说,自己申请的域名还是用起来更舒心一些。
要使用自己的域名,方法主要有两种:

  1. 用dnspod作为权威域名服务器,添加一条DNS的CNAME记录指向https://<username>.github.io。这个方案的优点是DNSPOD公司性能优化得好,国内访问快;但HTTPS协议限制了,如果请求的HOST和服务器证书的DNS名称不匹配,就不能建立起https连接。因此本方案的缺点是没法上https,让人总感觉有些不够放心;
  2. 用Cloudflare CDN。Cloudflare可以做HTTPS反向代理,并且可以配置为Flexible SSL模式(仅client和Cloudflare之间用https连接,Cloudflare和Server之间用http),或者Full SSL模式(前后端都是用https连接)。所以这个方案的优点是可以上https,缺点是国内的DNS延时会有100多ms,另外你需要信任Cloudflare的服务,因此可当做短期方案;
  3. 用自己的VPS,使用Let’s Encrypt上HTTPS证书,配置反向代理。如果能找到延时小的VPS,这个方案是最理想的,完全可控,安全性最高,可以当做长期方案。

目前我暂时用的是第二种方案。用Cloudflare绑定域名的方法如下:

  1. 注册cloudflare账号,在DNS页面->Cloudflare Nameservers,找到为本域名服务的NS域名;
  2. 在域名提供商处,将自己的域名的NS记录指向上述的两个NS地址,大概需要几个小时生效;
  3. 在Cloudflare页面->DNS->DNS Records,添加三条记录:两条A记录分别指向192.168.252.153和192.168.252.154(Github Pages的地址,目前不支持IPv6),另一条CNAME记录重命名为<username>.github.io。

用Cloudflare开启HTTPS的方法:

  1. 在Cloudflare->Crypto页面,SSL选择flexible SSL/Full SSL,稍等一会才会生效;
  2. 在Cloudflare->Crypto页面,Always use HTTPS打开;
  3. http重定向到https: Cloudflare->Page Rules,添加两条规则:
  4. 加入HSTS的Preload List。
    • 在Cloudflare->Crypto页面, 开启HSTS,Max-Age设置为12个月,其他选项都打开
    • 访问HSTS Preload List的官方网站,将本域名检查并收录。大概需要几天时间才能审核通过。

上述步骤之后,https和重定向功能会持续一段时间不稳定,可能出现不跳转https,可能会出现证书不匹配等错误。不用担心,不用提issue,大概过2天之后,就完全稳定下来了。

参考文章

https://www.jianshu.com/p/973e718e3096
https://g2ex.github.io/2015/10/14/Hexo-with-SSL-Hosted-on-Github-Page/
https://www.jianshu.com/p/caa80c7ad45c