在Github Pages上搭建Hexo博客
名词解释
- CI/CD: 持续集成 (CI) 和持续部署 (CD)
实现的效果
搭建Hexo博客,源文件推送到开发仓库(可以是私有仓库),生成的静态文件则推送到GitHub Pages,访问username.github.io
即可看到效果。
准备工作
环境参考
开发环境为
Windows
本地Git版本:
version 2.33.0.windows.2
Node版本:
v14.17.6
官方建议:安装最新版本的
Hexo
,以及 推荐的 Node.js 版本。
本地安装并启动Hexo
执行命令
执行命令,然后打开浏览器,输入http://localhost:4000
查看效果
1 | npm install hexo-cli -g |
配置参考及目录结构
有能力的建议参考英文文档,中文文档更新不及时,有些教程已经过时或有误。
1 | |── node_modules // 外部依赖 |
.gitignore
文件配置参考,用于配置Git忽略版本管理的文件或文件夹:
1 | .DS_Store # 用于控制一个文件夹的显示方式(列表、图标、分栏和CoverFlow)和背景图标等 |
推送源代码并部署到GitHub Pages
建议采用第一种方案,搞定了后发布文章会变得极为简单,可以专注于文章的编写。
以下两种方案均支持源代码推送到私有仓库中,生成的静态文章则推送到username.github.io
仓库中。
GItHub Actions - CI/CD
GitHub Actions持续集成服务方案 - 推荐使用此方案
在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。
因此只需要往源文件仓库
push
更新源文件,GitHub Actions 监控到 push 操作时,就自动拉取源代码并执行hexo clean
、hexo g -d
指令,完成博文发布。GitHub Actions官方文档: https://docs.github.com/cn/actions/quickstart
注意,项目默认的Action文件是 .github/workflows/分支名称.yml
,如:.github/workflows/main.yml
,如果项目中包含该文件,则会在push代码后自动执行workflows。
这里我们直接使用sma11black开发好的GitHub Actions脚本,请先看此教程。
新建源代码仓库和GitHub Pages仓库
在
GitHub
上新建源代码仓库((可以是私有仓库,GitHub允许用户免费持有一个私有仓库)GitHub Pages
仓库名称必须为:username.github.io
,如:hormones.github.io
生成SSH Key
在cmd下输入ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "你的邮箱"
生成公钥和私钥,生成的公钥与私钥位于当前用户家目录的.ssh
文件夹中(可在cmd下输入echo %USERPROFILE%
查看当前系统用户目录),私钥文件名为id_rsa
,公钥文件名为id_rsa.pub
将生成的私钥作为私有仓库下Settings > Secrets
下的一个名叫 DEPLOY_KEY
的 Secret
。注意:需要复制私钥中的整个内容。Secret 相当于一个变量,可以使私有变量不公开。
将生成的公钥作为公有仓库下 Settings > Deploy Keys
的 Deploy Key。Deploy Keys 中的公钥针对于当前仓库。
为什么要用 SSH Key?
- SSH Key,是一对密匙:公钥+私钥,用于加密本地仓库和远程仓库的传输内容。是非对称加密,可公钥加密、私钥解密;或私钥加密、公钥解密。
- 使用 GitHub Actions 是借助 GitHub 提供的环境,跟本地环境一样,也需要有私钥。当 GitHub Action 执行
hexo g -d
时,用私钥 DEPLOY_KEY 加密,GitHub 用网站文件仓库的 Deploy Key 进行验证。
新建GitHub Actions配置文件
如果源代码分支名为main
,则新建配置文件.github\workflows\main.yml
,内容如下:
1 | # 用于Guthub Actions持续集成 |
Hexo设置
- 安装 hexo-deployer-git:
npm install hexo-deployer-git --save
- 修改配置文件
.config.yml
1 | deploy: |
提交代码
提交代码后,将会触发Gtihub Actions
,此时可以去GitHub
上查看效果
1 | # 先初始化用户名和邮箱 |
访问usernme.github.io
查看效果
手动构建并推送
这种方案很原始很low,建议使用持续集成服务方案(其实持续集成服务就是程序自动帮你做了一些指令操作而已,时间多的可以先尝试一次手动构建,可以加深对持续集成服务的理解,然后再替换成CI/CD)
上传源代码到仓库
在
GitHub
上新建源代码仓库((可以是私有仓库,GitHub允许用户免费持有一个私有仓库)cmd到工作目录下,输入以下命令后,刷新GitHub,即可看到上传的文件
1 | # 先初始化用户名和邮箱 |
手动构建静态文件并上传到GitHub Pages
在GitHub上新建公有仓库
注意:公有仓库名称必须为:
username.github.io
,如:hormones.github.io
安装
hexo-deployer-git
npm install --save hexo-deployer-git
在
_config.yml
配置如下:1
2
3
4
5
6deploy:
type: git
# example, https://github.com/hexojs/hexojs.github.io
repo: https://github.com/<username>/<project>
branch: [branch] # 分支名称
message: [message] # 提交到GitHub Pages的注释,可选配置,可以注释掉运行
hexo clean && hexo deploy
。访问
username.github.io
查看效果
拉取源代码到新的工作目录
有时候需要在另外一台电脑上写博客并发布,因此需要拉取仓库中代码下来。
1 | # cmd到工作空间下,执行以下命令(无需提前创建项目目录,会自动生成) |
SEO优化
生成 sitemap 站点地图
站点地图是一种文件,您可以通过该文件列出您网站上的网页,从而将您网站内容的组织架构告知 Google 等搜索引擎。搜索引擎网页抓取工具会读取此文件,以便更加智能地抓取您的网站。
先安装谷歌的插件:npm install hexo-generator-sitemap --save
在博客根目录的_config.yml
中改url为你的站点地址并添加代码:
1 | # URL |
发布到博客后可以通过https://username.github.io/sitemap.xml
查看该文件。
添加 robots.txt
robots.txt
是搜索引擎蜘蛛协议,告诉引擎哪些要收录,哪些禁止收录。
source
文件夹下新建robots.txt
,内容如下:
1 | User-agent: * |
hexo-abbrlink 链接持久化
大家知道Hexo
默认的链接是http://xxx.yyy.com/2018/07/14/hello-world
这种类型的,这源于站点目录下的配置_config.yml
里的配置:permalink: :year/:month/:day/:title/
,这种默认配置的缺点就是一般文件名是中文,导致url链接里有中文出现,这会造成很多问题,如使用gitment,也不利于 SEO,另外年月日都会有分隔符。
hexo-abbrlink
这个插件,只要不修改md文件的abbrlink
的值, url就永久不会改变。如此md文件名和文件内容也可以随便改了。后面的层级更短,这样也有利于SEO优化。
安装:npm install hexo-abbrlink --save
_config.yml
配置:
1 | permalink: post/:abbrlink.html |
参考链接
在Github Pages上搭建Hexo博客