语雀自动部署hexo+GithubPages博客
背景
相信很多人被hexo+github pages实现的blog的发布问题烦恼,在编写完文章之后, 需要我们打开终端,执行 hexo 命令来发布文章。更让人头疼的是若是想插入个表格或者是图片的话,那可费了老劲了,利用 markdown 写表格的效率着实不高,而且引入图片的话更是麻烦,需要手动引入图片到博客项目,而且很难控制图片的大小。。。除去这些不说,hexo写的文章还比较容易丢失,一旦不小心把 hexo 删了,想要恢复就很麻烦了,但是使用语雀自动部署博文就不用担心这个问题,大不了重新同步一遍嘛,哈哈哈!
但是不久前接触到了语雀,并看到开发者文档里有一些非常好用的api,更有webhook的功能,便有了利用语雀来部署hexo搭建的blog的想法。大体思路就是, 当我们发布更新文章时会出发webhook,然后我们在自己搭建的服务里监听这个post请求,一旦监听到这个请求说明有文章的变动了,这时,再根据开发者文档上的api拉取当前的文章信息,根据这些信息生成md文件,然后执行’hexo clean && hexo d -g’来更新我们的博文到github pages。
有了想法,当然撸起袖子加油干了,在测试完webhook后,接下来就是写代码请求文章信息然后创建文件了,但是懒惰的我看到已经有人实现了,就直接借用人家的写好的用好了。yuque-hexo
实现
首先, 在你的云服务器上安装hexo-cli , npm install hexo-cli -g
然后创建一个hexo项目, hexo init blog
创建完项目之后,根据自己的喜好配置下项目的主题,及你要部署的github pages地址(建议写ssh地址),之后将你的云主机的ssh公钥配置到github上,实现免密发布文章,具体配置方法不再赘述。
注:在将云主机公钥配置到github上后,初次发布文章需要运行以下命令
1 | $ git config --global user.name "John Doe" |
- 在hexo配置文件_config.yml里配置部署仓库地址
接下来,在项目根目录下创建package.json及deploy.js文件, 根据我的package.json和deploy.js来编写刚才创建的两个文件的内容。package.json文件需要注意将login写为你的login,repo改为你的仓库的id(注意不能是仓库名,需要id)。deploy.js内容可以和我的完全一样,也可以自己修改下端口(注意主机的防火墙规则开启这个端口哦)。
- package.json
1 | { |
- deploy.js
1 | const koa = require('koa'); |
最后,在项目根目录下执行npm install
安装依赖项。通过deploy.js监听的端口及你的云主机的ip来来确定服务地址,在语雀的知识库设置中设置webhook地址。
还需要注意的一点是需要在高级设置中将你的仓库设置为公开权限。
完成这些之后基本大功告成了。
接下来我们测试下。
在云主机的项目根目录实现我们的deploy.js, pm2 start deploy
, 没安装pm2可以执行以下命令安装
1 | npm install pm2 -g |
之后去你的仓库下新建个文章发布下检测下是否同步更新的你的github pages吧!
如果测试后发现没有实现自动部署,可以执行以下命令,查看错误原因:
1 | npm run deploy |
下面附上我的【配置】
图片大小问题
在语雀插入的图片,更新到我们的 blog 后,会发现显示的图片大小和插入时不一样,这是因为 blog 里的图片是按照原始大小显示的,观察图片路径,会发现其中包含了图片的当前大小以及原始大小信息,类似这个
1 | https://cdn.nlark.com/yuque/0/2019/png/242991/1554799009812-0da6e023-b092-4172-a55d-bd247c79a133.png#align=left&display=inline&height=217&name=image.png&originHeight=678&originWidth=678&size=18409&status=done&width=217 |
然后我们可以自己写 js,使用正则把大小信息取出来,并设置到图片上,具体 js 代码如下:
1 | var images = document.querySelectorAll('img'); |
将这段代码贴到页面最后的 script 标签里,会发现照片大小和我们所期望的一样了。