通过 GitLab CI 实现 Hexo 持续部署 & 设置 Https 域名

GitLab的持续部署容易解决, 主旨是设置Https 域名

部署

在本地部署成功,并hexo s都没有问题后,就可以开始线上(GitLab)部署啦

设定.gitignore

  • 首先在Repository根目录下编辑.gitignore,排除不需要上传的内容:
1
2
3
4
5
6
7
8
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
package-lock.json

如果采用 `next` 主题的话,则需要到`/themes/next/.gitnore`进行微调,同时删除`.git`文件夹,否则忽略

打开/themes/next/.gitnore可以看到,next只保留了自身所需的基本套件,会忽略掉其他个人自定义部分,当gitlab自动部署时,因缺少这些套件,会导致渲染出现各种故障,如背景空白等

  • 编辑/themes/next/.gitnore
1
2
3
4
5
6
7
8
9
.....
# Ignore optional external libraries
# source/lib/*
.....
!source/lib/font-awesome/*
!source/lib/fancybox/*
!source/lib/jquery/
!source/lib/needsharebutton/*
.....

套件位于`/themes/next/source/lib`,首先删除各套件下`.git`文件夹,其次按需添加即可,前面要加`!`,表示不省略

设定.gitlab-ci.yml

Repository 的根目录下新建一个 .gitlab-ci.yml 你就可以实现 GitLab 的 CI 平台执行自动部署。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
image: node:v11.0.0

pages:

script:
- npm install hexo-cli -g
- npm install
- hexo d

artifacts:
paths:
- public

cache:
paths:
- node_modules
key: project

only:
- master

在 gitlab 上新建 project

推送 HEXO Repository

首先

在 根目录下,配置文件_config.yml中,把deploy下推送到github的相关内容注释掉。
OR
在 根目录下.gitlab-ci.yml中,去掉hexo d命令
gitlab 自动构建,所以不需要重新部署,不然报错

Repository 的根目录下,运行如下命令

1
2
3
4
5
$ git init 
$ git remote add origin git@gitlab.com:aefgijn/aefgijn.gitlab.io.git
$ git add .
$ git commit -m "init blog"
$ git push -u origin master

这一步最大的坑,就是各`.git`文件夹必须删除干净,不然会导致推送失败

自定义域名

  • project -> Setting -> Pages页面中可以通过New Domain来自定义域名

如果你的域名不支持`HTTPS`请不要勾选`Force domain with SSL...`

这里我们将其勾选上,接着添加支持HTTPS的域名,步骤如下:

本文所用SSL证书的验证方式均为DNS(推荐)

Symantec (阿里云)SSL 证书

Symantec(赛门铁克)是信息安全领域全球领先的解决方案提供商,全球最大的信息安全厂商和服务商,最权威的数字证书颁发机构,为企业、个人用户和服务供应商提供广泛的内容和网络安全解决方案, 帮助个人和企业确保信息的安全性、可用性和完整性。 Symantec SSL 数字证书,以及更多安全辅助功能,将网站的安全性和信任度提升到全新水平。

  • 首先,申请证书

  • 验证

  • 在阿里云域名云解析处,填上相应项的内容

  • 稍等一会,证书申请成功,已签发,将其下载到本地,一个压缩包,包含private.keyfull_chain.pem这两个文件

  • 开始配置自己的域名,拷贝秘钥到相应的条目内

  • 配置完秘钥后,需要进行验证。复制Verification status里面的内容到阿里云进行域名云解析


  • 再回到gitlab页面点击验证,成功后如图所示

  • 最后,回到pages页面,就可以看到添加成功的域名鸟

  • 现在可以打开自己的网站,看看证书状态了,有效期一年

Let’s Encrypt SSL 证书

Let's Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS,目前Facebook等大公司开始加入赞助行列。Let’s Encrypt已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被Mozilla、Google、Microsoft和Apple等主流的浏览器所信任,你只需要在Web 服务器证书链中配置交叉签名,浏览器客户端会自动处理好其它的一切,Let’s Encrypt安装简单,未来大规模采用可能性非常大。

  • 同上,大同小异
  • 首先,又来申请一个证书,填上自己的域名

  • 输入一个邮箱,好方便接受续期邮件,如图所示勾选上后开始创建

  • 生成了2条需要解析的TXT记录

  • 接着进行 DNS 验证,同上,去阿里云进行域名云解析

  • 再回来点击验证,生成了相关证书信息

  • 下载证书,一个压缩包,包含private.keyfull_chain.pem这两个文件
  • 后续,同上,这里略过
  • 这个证书的有效期为90天,快到期时会有邮件提示,也是一个不错的选择哦