在Gitlab上使用hexo搭建个人博客

0x01

Github不好吗?

目前网上有很多利用github pages和hexo搭建个人博客的教程,但是github目前拒绝了百度蜘蛛的爬取,因此如果希望自己的博客能够被百度收录,就需要采用一些别的方法托管。之前网上有一些利用coding.net进行托管共百度爬取的方法,但是最近coding.net进行了改版,在打开托管的个人pages时会强行加入一个5s的等待跳转页面,导致百度的蜘蛛无法正确爬取到博客的内容。因此,这篇文章将手把手教你如何用gitlab托管你的博客,实现让百度可以爬取你的博客内容。其次连接速度也是个大问题,电信对github的http/https协议有明显的限速,通过下面克隆仓库的方式就能对比出来:

1
2
$ git clone https://github.com/letsencrypt/letsencrypt
$ git clone [email protected]:letsencrypt/letsencrypt

ps:前者使用https协议,后者使用ssh协议。


0x02

安装必要环境

前面的文章也提到过了,这里不赘述,无非就是npmnodejshexo

配置git也不多说了,都是老司机了呗。

1
2
3
4
5
$ mkdir blog
$ cd blog
$ hexo init
$ npm install
$ hexo server

访问http://localhost:4000/看是否正常

注册Gitlab账号

Gitlab

1.创建仓库yourname.gitlab.io (类似github)

2.添加ssh-key

1
2
$ ssh-keygen
$ cat ./ssh/id_rsa.pub

将得到的公钥添加到这里


0x03

添加.gitlab-ci.yml文件

利用gitlab部署你的博客和github最大不同在于,在github上部署博客需要先在本地生成各种页面文件,然后再推送到github上就可以直接访问了。而使用gitlab则需要在服务器端完成生成和部署两个阶段,应该需要在项目的根目录下添加一个.gitlab-ci.yml文件用来指导服务器如何处理你提交的源文件。(比github还高大上有木有?)一个完整可用的.gitlab-ci.yml如下,其中把hexo默认的公式渲染引擎替换为了pandoc,使用了最新版node(hexo不能全局安装,不知道为什么),同时添加了生成站点地图的功能和RSS订阅功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
before_script:
- apt-get update -qq && apt-get install -y -qq pandoc
image: node:latest
pages:
cache:
paths:
- node_modules/
script:
- npm install hexo-cli --save
- npm install
- npm uninstall hexo-renderer-marked --save
- npm install hexo-renderer-pandoc --save
- npm install hexo-generator-feed --save
- npm install hexo-generator-sitemap --save
- ./node_modules/hexo/bin/hexo g
artifacts:
paths:
- public
only:
- master

修改站点配置文件和更换主题

站点配置文件位于hexo根目录下的_config.yml

主题按themes/theme-name存放

ps:若主题来自github请删除目录下的.git文件夹

接下来git五步走

1
2
3
4
5
$ git init
$ git remote add origin [email protected]:yourname/yourname.gitlab.io.git
$ git add .
$ git commit -m "init blog"
$ git push -u origin master

这样你的博客就成功上传到gitlab上了,但需要稍等片刻,等服务器按照.gitlab-ci.yml文件的设定执行完操作后才能看到你的页面上线

ps:登录项目页面可以查看部署进度

最后访问https://yourname.gitlab.io 就能看到你的博客了!

接下来每次更新完博客就三步走

1
2
3
$ git add .
$ git commit -m "yourmesage"
$ git push

如果嫌麻烦可以写个shell脚本

1
2
3
4
#!/bin/bash
git add .
git commit -m "`date "+%Y-%m-%d %H:%M:%S"`" #以时间作为更新说明
git push