Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。本文记录了使用 Hexo 创建个人博客并使用GitHub Actions一键发布到 GitHub pages 和 阿里云ECS上的全过程。
什么是 Hexo?
Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
安装
安装前提
安装 Hexo 前,请先确保您的电脑上已经安装了下列应用程序:
注: 如果您的电脑未安装 Node 或者 Git,请先安装后再阅读下面内容
安装 Hexo
使用 npm:
1 | $ npm install -g hexo-cli |
使用 yarn:
1 | $ yarn global add hexo-cli |
建站
安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。
1 | $ hexo init <folder> |
新建完成后,指定文件夹的目录如下:
1 | . |
_config.yml
网站的 配置 信息,您可以在此配置大部分的参数。
scaffolds
模版 文件夹。当您新建文章时,Hexo 会根据 scaffold 来建立文件。
source
资源文件夹是存放用户资源的地方。除 _posts 文件夹之外,开头命名为 _ (下划线)的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被拷贝过去
themes
主题 文件夹。Hexo 会根据主题来生成静态页面。
常用命令
new
新建一篇文章
1 | $ hexo new [layout] <title> |
generate
生成静态文件。
1 | $ hexo generate |
publish
发表草稿。
1 | $ hexo publish [layout] <filename> |
server
启动服务器。默认情况下,访问网址为: http://localhost:4000/。
1 | $ hexo server |
deploy
部署网站。
1 | $ hexo deploy |
clean
清除缓存文件 (db.json) 和已生成的静态文件 (public)。
在某些情况(尤其是更换主题后),如果发现您对站点的更改无论如何也不生效,您可能需要运行该命令。
1 | $ hexo clean |
list
列出网站资料。
1 | $ hexo list <type> |
注: 更多命令见官网
部署 GitHub pages
如果您只是想部署到GitHub Actions上,那么可以直接用这节的方法。如果还想部署到阿里云等私人服务器上,那么可以跳过这步,直接看下一节。
新建 GitHub 项目
打开 GitHub 点击右上角的new repository
然后在下图所示中,输入项目名称(后面一定要加.github.io 后缀),勾选 readme 初始化,点击完成创建
安装 hexo-deployer-git。
1 | $ npm install hexo-deployer-git --save |
修改_config.yml 配置
1 | deploy: |
执行命令
执行 hexo deploy 将生成的文件部署到上一步配置的仓库对应的分支上去。
1 | hexo clean && hexo deploy |
至此,已经实现了个人博客的搭建并完成了一键发布到GitHub Pages的功能,如果只需要发布到GitHub Pages,那么至此已经可以愉快地写文章了。
但是由于总所周知的原因,GitHub在国内的访问速度总是时好时坏,不够畅快。
那么如果你手里恰好有闲置的云服务器,那么接下去就更进一步吧!🙂
GitHub Actions登场
GitHub Actions 是 GitHub 于2018年10月推出的持续集成服务。功能非常强大,具体的基础用法不赘述,可以参阅阮一峰老师的教程。
这里主要介绍如何配置GitHub Actions实现自动部署功能。
创建workflow 文件
GitHub Actions 的配置文件叫做 workflow 文件, 存放在代码仓库的.github/workflows目录。
新建.github/workflows/deploy.yml, 具体配置如下:
1 | name: Hexo build and deploy |
配置参数说明
- ALIYUN_SERVER_HOST: 阿里云服务器公网IP;
- ALIYUN_SERVER_ACCESS_TOKEN:阿里云.ssh下的私钥(id_rsa);
- 如果未生成过,可以执行如下命令:
1
ssh-keygen -m PEM -t rsa -b 4096
- 把公钥复制一份到authorized_keys中:
1
2cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
- 如果未生成过,可以执行如下命令:
- ACCESS_TOKEN: GitHub 密钥, 按照官方文档生成一个秘钥。
以上三个参数都保存到自己仓库->settings->Secrets里面:
构建结果
将整个仓库推送到GitHub,GitHub 发现了 workflow 文件以后,就会自动运行。
至此,我们已经将博客部署到GitHub Actions和阿里云上了。阿里云上我们可以使用Nginx托管静态资源:
1 | server { |
一切大功告成!收工😄