搭建 github 博客之旅 (Part 2)
在第一部分,我们介绍了如何搭建一个免费博客并部署在 Github
上面,但是我们还有很多可以优化(更懒)的地方,例如:
那么,话不多说,开始正题。
自动化部署-CI/CD
简介
我们简述一下我们目前的部署流程:
在 writing 编写文章, 编写完成后,运行
$ hexo g & d
长篇文章写好之后,这点操作没什么太大负担,但是如果进行小调整的话每次都要输这些命令,那就很麻烦了。 那么我们思考一下,写完文章后输入命令发布, 命令是不变的,那么我们这里肯定可以自动化。 那么,关键问题是如何确定文章写完了?毕竟不可能每次写一半,或者写一点就自动发布,我们就需要一个自动发布触发点。git
比较好想,我们触发点使用push
或者 分支更新即可。 看起来很简单,如何实现呢? 这时候就可以祭出我们的利器了 -Travis Ci
!
CI/CD 是什么?
这里自动部署,用到了一个概念 CI/CD (持续集成/持续部署)
。
简单来说,就是让开发部署自动化,我们设置一个流程,对每次发布后的代码都进行相同的操作(比如:运行测试之类,当然测试完成后,我们也可以自动合并或者自动部署)。
这里,我们的项目比较简单,我们做到自动部署即可。让我们管理博客更加轻松。
wiki解释: 在软件工程中,CI / CD或CICD通常是指持续集成与持续交付或持续部署的组合实践。在企业沟通的上下文中,CI / CD还可以指代企业标识和企业设计的整个过程。
Travis Ci 安装
简介
Travis 是什么
Travis CI是在软件开发领域中的一个在线的,分布式的持续集成服务,用来构建及测试在GitHub托管的代码。这个软件的代码同时也是开源的,可以在GitHub上下载到,尽管开发者当前并不推荐在闭源项目中单独使用它
简单的说,就是针对 GitHub
的 CI
,也就是我们要的 CI
工具了,你应该也在很多仓库看到过这个工具,一般就叫 traviscibot
。
like this:
安装
-
a. 把
Travis CI
添加到你的GitHub
账户中。打开 Travis CI 安装页面。 选择免费安装(只适合于开源项目)
-
b. 配置
Travis CI
权限。前往
GitHub
的 Applications settings,配置Travis CI
权限,使其能够访问你的repository
。你应该会被重定向到
Travis CI
的页面。如果没有,请 手动前往。在浏览器新建一个标签页,前往 GitHub 新建 Personal Access Token,只勾选
repo
的权限并保存。Token
生成后请复制并保存好。> 回到
Travis CI
,前往你的repository
的设置页面,在 Environment Variables 下新建一个环境变量,Name 为GH_TOKEN
,Value 为刚才你在 GitHub 生成的 Token。确保 DISPLAY VALUE IN BUILD LOG 保持 不被勾选 避免你的 Token 泄漏。点击Add
保存。 设置页面在这里进: -
c. 编写自动部署脚本
在根目录新建一个
.travis.yml
的文件:sudo: false
language: node_js node_js: - 10 # use nodejs v10 LTS cache: npm install: - cd docs && npm i
限制使用 travis 的分支
branches: only: - writing script: - hexo clean - hexo generate # generate static files deploy: provider: pages skip-cleanup: true github-token: $GH_TOKEN target-branch: master # 目标分支 keep-history: true on: branch: writing # 在哪个分支运行脚本 local-dir: docs/public # 部署的文件夹
这样在我们的自动部署就差不多完成了,我们将配置好的文件 `push` 上去。稍等片刻,就能看到自动部署详情了(可以到 `Travis CI` 中看详细日志)。
在我们的 `master` 分支页面就能看到机器人了~
> 
## 更换主题
默认主题的 `hexo` 比较单调,一点都不炫酷。自然,换肤的需求就诞生了。到现在,`hexo` 也有了很多炫酷的主题可选,在这里,我推荐一个 `Material Design` 风格的主题 [`flud`](https://hexo.fluid-dev.com/docs/guide/#%E4%B8%BB%E9%A2%98%E7%AE%80%E4%BB%8B)
当然也有很多其他主题可选,在[这里](https://hexo.io/themes/)可以看,使用方式基本一致,依葫芦画瓢即可。
### 安装 flud
下载 [最新 release 版本](https://github.com/fluid-dev/hexo-theme-fluid/releases),`master` 分支无法保证稳定。
下载后解压到 `themes` 目录下并重命名为 `fluid`。
结果如下图:

### 更换主题
更换主题也很简单,我们更改 `hexo` 配置文件即可。
打开 `docs/_config.yml` (即博客目录下的该配置文件),更改下面的配置:
theme: fluid # 指定主题
language: zh-CN # 指定语言,可不改
这样我们重新运行
```hexo s```
就能看到我们新的主题了!参考效果如下:
> 
整个操作也很简单,但是需要定制化操作的话,看[官方文档](https://hexo.fluid-dev.com/docs/guide)即可~非常详细。
## 性能优化
由于我们的带宽是有限的,那么如果传递的资源太大,响应就会很慢。大家可以测试一下,**更换一下** `banner` 图片,**部署**后再次访问,就会发现很慢很慢。这也非常影响用户体验。
那么如何解决呢?
很明显,我们至少有两种解决办法:
- ~~a. 加带宽~~ (什么?加带宽?那是不可能的,服务器都是白嫖的,还想我加带宽???)
- b. 减少从**自身**服务器传输的数据量(注意加粗部分)
这里我们可以再分出两种思路
- **1. 减少自身服务器传输的数据大小(例如: 文本文件数据,图片数据之类)**
- **2. 将数据放到其他地方,远程获取(例如: CDN,文件服务器,图床等等)**
那么,我们就简单介绍一下这两种方法,顺便对我们的博客网站进行优化。
### 文件压缩
#### a. 文本文件压缩
这个我们列举一种方式,用压缩插件完成即可。
- 安装插件 `hexo-all-minifier`
npm install hexo-all-minifier —save
> mac 用户可能需要安装其他东西
`brew install libtool automake autoconf nasm`
- 开启插件
在博客配置文件中加入
all_minifier: true
我们在运行 `hexo g` 或者部署即可看到效果,`js,css` 等文件都被压缩了。
> 压缩详细配置可参考文档:
[hexo_all_minifier](https://github.com/chenzhutian/hexo-all-minifier)
### 图片压缩以及存储
#### 图片压缩
我们的文件压缩了,大一点图片怎么办呢?(比如图片就有:1M, 这样我们网站加载也会很慢)
当然图片也可以直接通过 `js` 来压缩,但是压缩品质可能不太好。我们换一种服务,[tinyjpg](https://tinyjpg.com/)
使用也很简单,把要压缩的图片放上去,压缩后下载回来即可,我们就不阐述了。
#### 图片存储
那么图片有了,我们应该把图片放哪里呢?放本地?不大好,毕竟**带宽很慢,也浪费资源。**
这里我们推荐一种通用方式,`CDN or 图床 or 文件存储服务之类`。这里我们选用**图床**,其他的都大同小异。
图床有很多可以选择的,因为图片比较少,我就推荐一个我目前使用的图床。[MS](https://sm.ms/)
> 图床是什么?
简单的说就是一个专门用来放图片的地方,图片在图床服务的服务器。
好处是?
图片在别的服务器,当然就不会占用我们服务器的带宽,有些图床还支持 `CDN` 速度能更快。
另外,图片管理也更方便,平时的图片都可以存上面(非隐私图片)。
使用那就很简单了,我们把图片上传到图床即可。上传之后大致可以得到如图效果:
> 
常用的链接一般就这两个~一个是绝对链接,一个是 `Markdown` 语法的,复制到 `md` 文件中就能看到效果了。
综上,合理**压缩和利用图床**等存储服务,能**极大的提升我们的博客响应速度**。降低服务器压力~将用户体验提升到极致。(当然任何服务都可以酌情应用该方案,不止博客!)
### 小插曲
**ちょっと待って,不对不对,你这不是套我嘛?浏览者的用户体验提升了,但是写作者的用户体验没提升呀,还要传来传去,跳来跳去,多麻烦。**
没错!这个问题,我们当然也能优化!怎么做?
**等下回咯**(逃,不要打我
到这里结束了嘛?当然没有,我们再加一点其他的小插件。
## icon 生成
不知道大家发现没有,我博客的 `icon` 变了!!
**5分钟**搞定的。
How to do?
来试试我们的神奇的[网站](https://favicon.io), 网站比较简单,专门用来做 `icon`, 怎么使用网站就不介绍了,我们介绍一下如何替换自己网站的 `icon`。
我们主要需要这个文件:
favicon.png
在网站生成的`压缩包`中可以找到。
我们把它放入和 `_posts` 文件夹同级的 `img` 文件夹中即可。
大概如下图:
├── _post ├── img | ├── favicon.png
就是这么简单~
## 流程图支持
为了增强文章的表达力,我们有时候也会在文章中加入一些**流程图**就像这样:
<div class="mermaid">
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
</div>
那么如何做呢?只需要 **4步**:
#### 1. 安装 `hexo-filter-mermaid-diagrams` 插件
npm i hexo-filter-mermaid-diagrams # or yarn install hexo-filter-mermaid-diagrams
#### 2. 配置 `ejs`
因为我们的流程图之类主要在文章中使用,所以我们只给文章页面配置该功能。
找到该文件 `post.ejs`:
├── themes | ├── fluid # 你的使用的主题的文件夹 | ├── layout | ├── post.ejs
在文件末尾加上以下代码:
```ejs
<!-- Mermaid -->
<% if (page.mermaid && theme.post.mermaid.enable) { %>
<script src="<%- url_for(theme.post.mermaid.cdn) %>"></script>
<script>
if (window.mermaid) {
mermaid.initialize(<%- JSON.stringify(theme.post.mermaid.options) %>);
}
</script>
<% } %>
在主题配置文件的 post
配置中,大概这个位置:
加入以下代码:
mermaid: ## mermaid url https://github.com/knsv/mermaid
enable: true # default true
specific: false
cdn: https://cdn.jsdelivr.net/npm/mermaid@7/dist/mermaid.min.js
options: # find more api options from https://github.com/knsv/mermaid/blob/master/src/mermaidAPI.js
theme: forest
简单的性能优化:
由于不是每篇文章都要流程图之类以及该功能需要加载额外的 js
文件,所以我们设置了一个开关,来让文章决定是否开启加载。
3. 开启 mermaid 渲染
主要要在文章文件 xxx.md
的顶部加上:
mermaid: true
这样我们的这篇文章就会加载渲染流程图需要的 js
文件, 如果不设置,文章就不会加载相关 js
文件。
md
文件的参考头部如下:
--- title: 从零开始搭建Github博客(其二) tags: [github_pages, hexo] category: [blog] date: 2020-04-09 10:28:39 mermaid: true ---
4. 在文章中加入流程图语法
完成上面的设置之后,就完成了大半了,但是我们的 md
文件中中还没有流程图语法。
流程图语法也比较简单,md
文件中的任意位置加入以下代码即可:
<div class="mermaid">
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
</div>
这样就更能增强文章的表达力了~赶快试一试吧!
utterances
评论支持
评论支持比较简单,参考这篇文章就行。 评论支持
下面部分请根据自己的主题及参考代码酌情设置!!!!
但是开启评论的话参考 post.ejs
部分,具体代码如下(主要是第一行):
<% if(page.comments && theme.post.comments.enable) { %>
<!-- Comments -->
<div class="comments" id="comments">
<% var type = '_partial/comments/' + theme.post.comments.type %>
<%- partial(type) %>
</div>
<% } %>
由上面代码可得,如果要开启评论还需要在每篇文章的头部加上
comments: true
才会开启,不是很方便,所以我们做一下粒度控制。
粒度控制
主要是方便我们开启全局都允许评论,忽略文章头部的设置。因为大多数文章都是开启评论,小部分可能需要关闭评论,所以我们就用来用代码控制这小部分情况。
1. 在主题配置文件中的 post.comments
中加入一个粒度开关 postCheck
:
post:
...
comments:
...
postCheck: false
2. 更改 post.ejs
配置
更改参考如下:
<% if((!theme.post.comments.postCheck || page.comments) && theme.post.comments.enable) { %>
这样,当我们设置 postCheck: false
时,所有文章都会开启评论。
而当我们设置 postCheck: true
同时如果文章头部设置了: comments: false
时,该篇文章就会禁用评论功能了~
增加看板娘
就是我的博客右下角那 萌小子 实现也很简单,参考 这里即可
有一点需要注意:可以将官方的两种配置混合使用
增加永久链接
因为目前我们的文章链接不是固定的,所以分享给别人的时候链接会失效,所以有了这个插件,就可以固定住我们的文章链接了。 安装模块:
npm install hexo-abbrlink --save
更改配置:
全局搜索 permalink
,然后更改为
permalink: posts/:abbrlink/
# 下面的为需要添加的
abbrlink:
alg: crc32 # support crc16(default) and crc32
rep: hex # Represent (the generated link could be presented in hex or dec value)
具体作用可以参看文档
开启测试: 命令行界面输入
hexo clean # 这部比较关键
hexo s # 重启服务
就可以看到我们的网站链接都变成了固定的短链接了。
可能遇到的情况是文章没有生成短链接,那是由于文章头部加了 layout: xxx
,删除该配置即可。
下一章混入:音乐播放器
WAITING TO SET next part
参考资料: hexo 文档 fluid 文档 hexo_all_minifier 文档 hexo-filter-mermaid-diagrams 评论支持 固定链接
评论区