主要讲如何把本地的Hexo转移到Github上并设置自动部署和在线编辑。

博客源码迁移到Github

配置Git

应该都配置了吧,不过还是再写一遍

git config --global user.name 你的Github用户名
git config --global user.email 你的Github账户注册用的邮箱
ssh-keygen -t rsa -C "你的邮箱"

然后打开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

on:
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x]

steps:
- uses: actions/checkout@v4

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}

- name: Configuration environment
env:
HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" | tr -d '\r' > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name "Github用户名"
git config --global user.email "邮箱"
- name: Install dependencies
run: |
npm i -g hexo-cli
npm ci
- name: Deploy hexo
run: |
hexo clean
hexo d -g

如果你使用第三方主题,不用在action时再安装一次主题

推送博客源码到Github仓库

在Github上新建一个仓库用于存放博客源码。
进入Hexo所在的文件夹

git init
git remote add origin git@github.com:用户名/仓库名.git
git add .
git commit -m '备注信息随便填'
git push -u origin 分支名

注意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。
官方部署教程
这里补充几点:

  1. 在生成Github Token这一步一定要选Classic不然配置Qexo时会报错。
  2. 在创建vercel存储库这一步没有直接的Postgres选项,我选的是下方market space中的Neon,而且Neon的服务器地址中正好有教程中提到的Washington, D.C., USA (East) - iad1。其他操作和教程一样,没有出现错误,可以正常使用。
  3. Vercel项目分配的默认域名在大陆访问不了,可以在设置-Domains添加自己的域名实现国内访问
  4. 如果遇到编辑界面一直加载不出来,在设置里把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:
    data.delete
    删除api在官方文档内没有填,不过实测这样填可以正常删除图片,只不过操作输出信息有一大堆

上传图片报错及解决方案:

  • JSONDecodeError('Expecting value: line 1 column 18 (char 17)')
    请检查自定义请求头里是不是出现了空格
  • KeyError('data')是不是没填写自定义请求头?

总结

  1. 功能丰富得多,如说说、修改配置文件、图床等等。
  2. 对移动端有适配,体验相比Hexon提升巨大
  3. 加载速度慢

参考文章