基于GitLab Pages部署Hexo博客
引言
之前我的博客都是部署在GitHub Pages上的,但是后来因为GitHub Education到期,私有仓库无法使用GitHub Pages,而GitLab Pages则是可以的,所以就想把博客迁移到GitLab Pages上。与GitHub 相比,GitLab Pages的部署要麻烦一些,因而做个记录。
基本方案
部署的基本方案如下:
- 使用Hexo的
hexo generate
离线生成静态网页内容,然后使用hexo deploy
推送到GitLab的私有仓库; - 在GitLab的私有仓库创建Pages,使用nginx提供Web服务;
- 使用Cloudflare提供DNS和缓存功能,并配置自定义域名。
具体如下。
GitLab上的设置
与GitHub类似,GitLab Pages可以创建项目的,也可以创建个人账户的,因为是个人博客,所以选择创建个人账户的Pages。具体步骤如下:
-
创建项目
username.gitlab.io
,对应的URL 为http(s)://username.gitlab.io
; -
上传Hexo生成的静态内容。
-
编写
.gitlab-ci.yml
文件,具体内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15image: nginx:latest # 使用nginx提供静态页面服务
# 通过gitlab的pages功能实现静态网站功能。
pages:
stage: deploy
script: # GitLab Pages制定从public文件夹读取内容
- mkdir .public
- cp -r * .public
- mv .public public
- mv public/nginx.conf /etc/nginx/nginx.conf # nginx的配置文件
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH -
配置自定义域名,在左侧边栏的Deploy > Pages 选择New Domain,然后可以看到DNS记录和证书信息:
需要注意的是,在配置自定义域名时,如果勾选GItLab Pages下的Use unique domain,自定义域名会跳转到GitLab生成的域名,自定义域名的意义就大打折扣了。但是如果不用unique domain,而是用project pages,那么root url就会是 .gitlab.io/projectname ,那么Hexo的配置也要相应改变。
-
修改Pages的可见性,由于我使用的是私有仓库,但是Pages的可见性需要设置为Everyone
-
查看Pipeline的运行情况
注意:需要先提交静态内容再运行Pipeline,为了方便起见,.gitlab-ci.yml直接在hexo文件中添加。
Hexo的修改
为了方便部署,我直接在Hexo的源文件中做了修改,具体如下:
-
在
source
文件夹下增加.gitlab-ci.yml
文件,内容如前所示; -
在
source
文件夹下增加nginx.conf
文件,内容如下:1
2
3
4
5
6
7server {
listen 80;
location / {
root public;
index index.html;
}
} -
修改Hexo的
_config.yml
,具体包括:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 跳过对.gitlab-ci.yml的渲染
skip_render:
- .gitlab-ci.yml
# 包含隐藏文件.gitlab-ci.yml
include:
- .gitlab-ci.yml
# 部署设置
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: [email protected]:username/username.gitlab.io.git
branch: master
ignore_hidden: false
修改后,运行hexo d -g
,就会将生成的静态文件上传到指定项目,即username.gitlab.io
。
Cloudflare的设置
Cloudflare的设置相对简单,就是在DNS记录中,添加前面在GitLab Pages的New Domain下生成的记录,具体如下:
添加后,回到GitLab Pages下面验证即可。
需要注意的是,对于上面的A记录,GItLab Pages还提到了用ALIAS
或者CNAME
,不过也有博客提到用A
会更可靠。
如果GItLab的Pipeline能够运行成功,理论上应该就成功了。
总结
以上就是使用GitLab Pages + Hexo + Cloudflare部署个人博客的过程,感觉速度比GItHub Pages要快一些,是一个值得考虑的选择。