前言
博客有第三方平台,也可以自建,比较早的有博客园、CSDN,近几年新兴的也比较多诸如:WordPress、segmentFault、简书、掘金、知乎专栏、Github Page、Coding Pages、Gitee等等。
这次我要说的就是 Github Page + Hexo 搭建个人博客的方式!Github Page 是 Github 提供的一种免费的静态网页托管服务(免费空间有限制,但是足够用了),可以用来托管博客、项目官网等静态网页。支持 Jekyll、Hugo、Hexo 编译静态资源,这次我们的主角就是 Hexo 了,具体的内容下面在文章内介绍。
准备环境
准备 node 和 git 环境。 Hexo 是基于 Node.js 驱动的一款博客框架,首先安装 Node.js,简单的说 Node.js 就是运行在服务端的 JavaScript。然后安装Git,Git是一个分布式版本控制系统,用于项目的版本控制管理,作者是 Linux 之父。
两个工具不同的平台安装方法有所不一样,可自行了解按步骤安装,这里不详述了。安装成功后打开git bash(Windows)或者终端(Mac),下方中将统一称为命令行。在命令行中输入相应命令验证是否成功,如果成功会有相应的版本号。
1 | git version |
安装Hexo
如果以上环境准备好了就可以使用 npm 开始安装 Hexo 了。也可查看 Hexo 的详细文档。在命令行输入执行以下命令:
1 | npm install -g hexo-cli |
安装 Hexo 完成后,再执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。
1 | hexo init myBlog |
新建完成后,指定文件夹的目录如下:
1 | . |
好了,如果上面的命令都没报错的话,就恭喜了,运行 hexo s
命令,其中 s 是 server
的缩写,在浏览器中输入 http://localhost:4000 回车就可以预览效果了。
部署Github Pages
新建仓库
首先如果你还没有 Github 账号的先注册一个,注册过程略。
Github上 new repository 创建新仓库。Github 仅能使用一个同名仓库的代码托管一个静态站点,仓库名称必须是用户名.github.io。打开仓库创建一个 index.html
文件,并随意先写点内容,比如 Hello World
, 打开 http://你的用户名.github.io 站点,可看到预览效果。
配置SSH
要使用 git 工具首先要配置一下SSH key
,为部署本地博客到 Github 做准备。
打开命令行输入 cd ~/.ssh
如果没报错或者提示什么的说明就是以前生成过的,直接使用 cat ~/.ssh/id_rsa.pub
命令就是可以查看本机上的 SSH key 了。
1 | cat ~/.ssh/id_rsa.pub |
如果之前没有创建,则执行以下命令全局配置一下本地账户:
1 | git config --global user.name "用户名" |
然后开始生成密钥 SSH key
1 | ssh-keygen -t rsa -C '上面的邮箱' |
按照提示回车,即可生成 ssh key
。通过查看 ~/.ssh/id_rsa.pub
文件内容,获取到你的 SSH key
。首次使用还需要确认并添加主机到本机SSH可信列表。若返回 Hi xxx! You've successfully authenticated, but GitHub does not provide shell access
. 内容,则证明添加成功。
1 | ssh -T git@github.com |
到这还没完,还要登录 Github 上添加刚刚生成的 SSH key
。 创建一个新的 SSH key
, 标题随便,key
就填刚才生成那个,确认创建,搞定!!这样在你的 SSH keys
列表里就会看到你刚刚添加的密钥。
部署Hexo
此时,本地和 Github 的工作做得差不了,是时候把它们两个连接起来了。你也可以查看官网的部署教程。先不着急,部署之前还需要修改配置和安装部署插件。
第一:打开项目根目录下的 _config.yml
配置文件配置参数。
1 | # Deployment |
同时部署到多个仓库
1 | deploy: |
第二:要安装一个部署插件 hexo-deployer-git
。
1 | npm install hexo-deployer-git --save |
最后执行以下命令就可以部署上传啦,以下 g 是 generate
缩写,d 是 deploy
缩写:
1 | hexo g -d |
hexo generate
,生成的静态内容在 public 文件夹内。hexo clean
,执行此操作会删除 public 文件夹中的内容。 hexo 命令组合
1 | hexo clean && hexo g -s,就是清除、生成、启动 |
写作
博客搭好了,就开始写文章了,这里简单介绍一下,详细的文档可以看 hexo 官网。新建文章,输入以下命令即可
1 | hexo new <title> |
此时在source_posts文件夹中便会多出一个文档 “title.md
“。如果要删除,直接在此文件夹下删除对应的文件即可。在支持Markdown编辑器输入文章内容。再执行一下以下命令:
1 | hexo clean # 清除生成内容 |
部署前最好能先执行一下 hexo clean
命令,清除缓存文件 (db.json) 和已生成的静态文件 (public)。在某些情况(尤其是更换主题后),如果发现您对站点的更改无论如何也不生效,您可能需要运行该命令。
另外,如果你的文章暂时不发布可以先保存在草稿里面。生成草稿的方法和文章差不多 hexo new draft "文章标题"
,生成后会在 /source/_drafts
里看到你的草稿文章。当你想发布时只要执行 publish
命令即可发布到博客。
1 | hexo publish [layout] <filename> |
绑定域名
hexo d
部署后每次需要重新改域名,为解决这个问题,需在 /source
的目录中创建一个文件,命名为 CNAME
(无后缀文件格式),里边的内容写你的域名。只写域名即可。例如www.xxx.com
,不需要添加http(s)://
。
如果是多个值的配置,在博客根目录的配置文件中找到skip_render
字段,添加值'CNAME'
,这里我并未配置。
1 | skip_render: |
Hexo升级
全局升级
hexo-cli
,先hexo version
查看当前版本,然后npm i hexo-cli -g
,再次hexo version
查看是否升级成功。使用
npm install -g npm-check
和npm-check
,检查系统中的插件是否有升级的,可以看到自己前面都安装了那些插件使用
npm install -g npm-upgrade
和npm-upgrade
,升级系统中的插件。使用
npm update -g
和npm update --save
。
注意 Hexo 版本有较大变化时,升级后可能会出现很多问题,升级前做好相关备份。
Github Actions自动部署
准备工作
Github新建一个私有仓库,专门用来存放Hexo博客源文件。获取一个 GitHub Personal Access Token
用来推送构建好的文件到我们的 GitHub Pages 仓库。源文件:
1 | . |
点开博客备份仓库上方的 Settings,点到左侧的 Secrets 项,添加四个秘密环境变量 GH_REPO
、GH_USER
、GH_MAIL
、GH_TOKEN
,值分别填写自己的 GitHub Pages 仓库地址(不包含 https:// )、用户名、邮箱和刚刚申请到的 GitHub Personal Access Token
。
准备工作做好后就可以开始编写 GitHub Actions 配置文件了,这里对 Hexo 博客编译部署的步骤进行拆分讲解。
触发条件和运行环境
我们设置在 master 分支上发生 push
操作时触发构建,使用最新的 Ubuntu 系统作为编译部署的环境,同时设置一个全局环境变量将时区修改为 Asia/Shanghai 同步时区,具体的配置内容如下
1 | name: Blog deploy |
建立工作环境
上面的大前提确定后就可以来开始建立我们的工作环境了(注: 后续所有步骤的配置都是接在上面 steps 块下的,不要弄混了层级关系)。
首先检出代码,设置一下 node 环境,我们这里使用 12.x 版本的 node.js :
1 | - name: Checkout codes |
然后设置一下缓存目录以避免每次都要重新下载,从而加快构建速度(官方不建议直接缓存 node_modules
目录,所以这里设置的是 npm 的下载缓存目录 ~/.npm
,这样后面仍需要使用 npm install
来安装依赖)。这里使用的是 package-lock.json
文件的 hash 值来标识缓存是否可以命中:
1 | - name: Cache node modules |
最后就是安装依赖了,这个根据自己的需要操作就行,可使用 gulp
任务来压缩 Hexo 生成的文件,所以这里除了 hexo-cli
还全局安装了 gulp
:
1 | - name: Install dependencies |
生成部署文件
这一步简单点 hexo g
就行了,我这里多加了一步执行 gulp
任务的操作(将其放在两个 step 中而不是一次性执行是为了方便在日志中看到每个操作消耗的时间):
1 | - name: Generate files |
部署博客
我们先将 GitHub Pages 仓库克隆过来(这里克隆到新建 deploy_git
文件夹内),将其中的 .git
目录移到存放部署文件的 public 目录中(为了保留 GitHub Pages 仓库的提交历史),然后进入 public
目录设置一下提交用户名和邮箱,add
所有文件并提交,最后利用保存在秘密环境变量中的 GitHub Personal Access Token
推送到 GitHub Pages 仓库中就可以了:
1 | - name: Deploy blog |
完整配置文件
这里我并没使用 gulp 任务来压缩 Hexo 生成的文件, 不用执行执行 gulp 任务。
1 | name: Blog deploy |
Hexo配置
标签外挂
标签外挂的使用需要主题支持此功能,不然其他主题无效,且会报错。我这里使用的主题经过修改后可使用。
note提示块
note提示块提供了simple、modern、flat、disabled四个样式,不可以同时混合样式使用,可在主题目录下_config.yml
文件选择样式。
1 | note: |
这里以 style: flat
为例演示, 在文章使用方法如下:
1 | {% note default %} |
默认块标签
基本块标签
成功块标签
提示块标签
警告块标签
危险块标签
tabs标签卡
Unique name
最好写上,不然编译时会提示,基本使用方法如下:
1 | {% tabs Unique name, [index] %} |
1 | {% tabs 宗师%} |
示例效果
沧海一声笑
多情剑客无情剑
金庸(1924年3月10日—2018年10月30日),本名查良镛,生于浙江省海宁市,1948年移居香港。当代武侠小说作家、新闻学家、企业家、政治评论家、社会活动家,被誉为“香港四大才子”之一,与古龙、梁羽生、温瑞安并称为中国武侠小说四大宗师。
桃花影落飞神剑,碧海潮生按玉箫。
相思无用,惟别而已。别期若有定,千般煎熬又何如?莫道黯然销魂,何处柳暗花明?
红颜弹指老,刹那芳华,与其天涯思君,恋恋不舍,莫若相忘于江湖..
坑爹
尼玛
你妹
button按钮
可参考示例代码的使用,基本使用方法如下:
1 | {% btn [url],[text],[icon],[color] [style] [layout] [position] [size] %} |
示例代码
1 | Github website {% btn 'https://github.com/',Github %} |
演示效果如下,并不代表上面的示例代码。
github github github github github github github