Hexo生成静态文件自动托管于七牛云

最近电脑出问题,重新做了系统。大家都知道唐建鹏博客是依托 Hexo 搭建在七牛云上的。由于重新安装 Hexo ,上传七牛云的时候遇到了点问题,导致上传失败检查后解决问题。将过程记录下来,以便大家参考。

在 Hexo 目录下安装 hexo-qiniu-sync :
npm install hexo-qiniu-sync --save

下载安装 qshell :https://developer.qiniu.com/kodo/tools/1302/qshell

查看是否安装完成:

qshell -v QShell/v2.4.1

配置 AccessKey/SecretKey:

qshell account AccessKey SecretKey

配置同步文件,保存为 qupload.conf 存放在根目录:

1
2
3
4
5
6
7
8
{
"src_dir": "H:\\My Blog\\blog\\public", //修改为你生成静态文件的文件夹位置
"bucket": "bokedddd", //修改为你储存空间的名称
"check_exists": true,
"check_hash": true,
"overwrite": true,
"rescan_local": true
}

七牛官方文档:

overwrite 这个参数设置为 true 的时候,覆盖操作会在两种情况下发生:
(1)本地文件的最后修改时间发生了改变(认为该文件内容已变化),并且在设置了 rescan_local 为 true 的情况下;
(2)当开启了 check_exists 选项,发现空间已存在同名文件,而且在 check_hash 或者 check_size 发现文件内容 hash 或者大小不同的情况下
总之,当本地文件发生改动的时候,如果你希望将改动后的文件覆盖空间已有的文件,那么请设置 overwrite 为 true,否则默认情况下,不会去覆盖,因为这个操作很危险。

这时就可以上传七牛云了:

qshell qupload 10 qupload.conf

这里使用的qupload,10代表线程数,qupload.conf是刚写的配置文件。执行后就会打印出同步的文件, 然后访问你的空间域名就可以了。

自动化

为了更好的偷懒我们可以再做一些功能的添加。

在根目录新建一个 qiniu 的文件夹,在里面创建一个 qiniu.json :

1
2
3
4
5
6
7
8
{
"src_dir": "H:\\My Blog\\blog\\public", //修改为你生成静态文件的文件夹位置
"bucket": "bokedddd", //修改为你储存空间的名称
"check_exists": true,
"check_hash": true,
"overwrite": true,
"rescan_local": true
}

根目录创建 sh , publish.sh :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env bash
# 清除缓存
hexo clean
# 构建静态文件
hexo g
# 上传到七牛,并导出 覆盖文件列表
qshell qupload --overwrite-list ./qiniu/overwrite.txt ./qiniu/qiniu.json
# 将 覆盖文件列表 文件处理成 刷新文件列表 文件
# https://stackoverflow.com/questions/2610115/why-is-sed-not-recognizing-t-as-a-tab
TAB=$'\t'
sed '' ./qiniu/overwrite.txt | sed -E 's/.+'"${TAB}"'/https:\/\/tangjianpeng.com\//g' > ./qiniu/refreshlist.txt
# 将 index.html 结尾的 url 转换成 / 结尾的格式
sed -n '/index\.html/p' ./qiniu/refreshlist.txt | sed -E 's/index\.html//g' > ./qiniu/paths.txt
# 批量刷新已覆盖文件的 CDN 链接
qshell cdnrefresh -i ./qiniu/refreshlist.txt
qshell cdnrefresh -i ./qiniu/paths.txt
# 批量预取已覆盖文件的 CDN 链接
qshell cdnprefetch -i ./qiniu/refreshlist.txt
qshell cdnprefetch -i ./qiniu/paths.txt

下次写完文章就可以直接./publish.sh了,自动生成静态文件然后上传到七牛空间。