主要讲如何把本地的Hexo转移到Github上并设置自动部署和在线编辑。
博客源码迁移到Github
配置Git
应该都配置了吧,不过还是再写一遍
git config --global user.name 你的Github用户名 |
然后打开Github的Settings-SSH and GPG keys,添加一个新的SSH Key,把~/.ssh/id_rsa.pub里的内容填key那一栏,保存。
配置完后可以用
ssh -T git@github.com |
来测试配置是否成功,如果出现
Hi XXX! You’ve successfully authenticated
就是成功了。
编写GitHub action脚本
自动部署的原理是利用GitHub action执行我们平时修改博文后手动执行的生成和部署命令。GitHub action可以在检测到源码更改后自动重新部署,而且每月免费额度对于写博客来说非常充裕。我们只需要把脚本放在仓库根目录/.github/workflows就能被检测到并自动执行
首先我们需要再生成一个ssh key用于在action自动部署时部署到博客静态网页所在的仓库(一般为用户名.github.io)
ssh-keygen -f github-deploy-key |
接着在博客源码仓库的设置-Secrets and variables → actions → New repository secret,添加一个,名称为HEXO_DEPLOY_PRI,内容填刚刚生成的github-deploy-key的内容。
然后在博客静态网页的仓库的设置Deploy keys 添加一个新的,内容为github-deploy-key.pub的内容
这里的action secret相当于action执行时的环境变量,我们用来保存部署要用的私钥,而deploy key是只对一个仓库有权限的密钥,我们用来在action部署到静态网页仓库
在Hexo文件夹/.github/workflows/下创建deploy.yml,内容如下
name: Deploy hexo blog |
如果你使用第三方主题,不用在action时再安装一次主题
推送博客源码到Github仓库
在Github上新建一个仓库用于存放博客源码。
进入Hexo所在的文件夹
git init |
注意git默认的分支是master,而github仓库的默认分支为main。可以用以下命令把git的默认分支修改为main
git config --global init.defaultBranch main |
现在,你可以去博客源码仓库的actions查看部署进度,我的一般26s左右就完成了。
打开博客网站看看是否正常。
博客在线编辑
虽然源码存到Github后可以在线修改源文件了,但是每次写都要手动输frontend,日期要自己改,图片要自己上传后再粘贴URL还是很麻烦。目前用于在线编辑Hexo的项目用的比较多的是Hexo admin、Hexon、ESHEXON、QEXO。其中前三个都已经停更几年甚至归档了。Hexon还不错,可惜完全没适配手机端,体验很糟,但是如果有电脑我为什么不用typora、obsidian这些软件呢?
所以最终选择了Qexo。
官方部署教程
这里补充几点:
- 在生成Github Token这一步一定要选Classic不然配置Qexo时会报错。
- 在创建vercel存储库这一步没有直接的Postgres选项,我选的是下方market space中的Neon,而且Neon的服务器地址中正好有教程中提到的Washington, D.C., USA (East) - iad1。其他操作和教程一样,没有出现错误,可以正常使用。
- Vercel项目分配的默认域名在大陆访问不了,可以在设置-Domains添加自己的域名实现国内访问
- 如果遇到编辑界面一直加载不出来,在设置里把cdn改为unpkg即可。
(可选)配置smms图床
在https://smms.app/home/apitoken 生成一个token
在Qexo设置按下面填:
- 图床类型:
远程API
- API 地址:
https://sm.ms/api/v2/upload
- POST 参数名:
smfile
- JSON 路径:
data.url
- 自定义请求头:
{"Authorization":"上面生成的token"}
- 删除 API:删除api在官方文档内没有填,不过实测这样填可以正常删除图片,只不过操作输出信息有一大堆
data.delete
上传图片报错及解决方案:
JSONDecodeError('Expecting value: line 1 column 18 (char 17)')
请检查自定义请求头里是不是出现了空格KeyError('data')
是不是没填写自定义请求头?
总结
- 功能丰富得多,如说说、修改配置文件、图床等等。
- 对移动端有适配,体验相比Hexon提升巨大
- 加载速度慢
参考文章