1. 前言
《Hexo本地搜索加速》一文中,给 search.xml 文件配置了 jsdelivr CDN。但是,jsdelivr CDN 目前国内已经无法访问了,只能另外寻找一个替代。
可选的替代包括:
配置方法可以参考hexo-theme-next/commit/2ff6c11,但是,这些替代CDN,国内也无法访问。找来找去,最终锁定了七牛,一直用它作为图床,其实用做 search.xml 文件的存储仓库,也很合适。
本文就来学习一下使用七牛作为 search.xml 存储仓库的方法。
2. 准备工作
2.1. 安装配置hexo环境
参考文档《Hexo环境搭建2021年8月版》,安装配置hexo环境。
执行 hexo g
命令,在 public 目录中生成要部署的静态文件,其中包含 search.xml 。
2.2. 获取七牛api key
访问七牛密钥管理页面,创建一个密钥对(AccessKey/SecretKey)。
2.3. 安装七牛依赖
1
| npm install qiniu --save
|
3. 上传 search.xml
参考文档:对象存储 - Node.js SDK
1、实现上传脚本 upload-qiniu.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| const qiniu = require('qiniu'); const fs = require('fs');
const accessKey = '您的七牛Access Key'; const secretKey = '您的七牛Secret Key'; const bucketName = '您的存储空间名称'; const key = '上传的图片在七牛中的存储路径/文件名';
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
const config = new qiniu.conf.Config(); config.zone = qiniu.zone.Zone_z0;
const formUploader = new qiniu.form_up.FormUploader(config); const putExtra = new qiniu.form_up.PutExtra();
const uploadImage = () => { const localFile = './path/to/your/local/image.jpg'; const readStream = fs.createReadStream(localFile);
const options = { scope: `${bucketName}:${key}`, force: true, }; const putPolicy = new qiniu.rs.PutPolicy(options); const uploadToken = putPolicy.uploadToken(mac);
formUploader.putStream(uploadToken, key, readStream, putExtra, (respErr, respBody, respInfo) => { if (respErr) { throw respErr; } if (respInfo.statusCode === 200) { console.log('上传成功', respBody); } else { console.log('上传失败', respInfo.statusCode, respBody); } }); };
uploadImage();
|
2、测试上传脚本
上传成功后出现提示:
1
| 上传成功 { hash: 'FkYxkyrsSytBGvgYgEvPs28lVI40', key: 'doc/search.xml' }
|
4. 主题中配置使用七牛CDN
Next主题中,配置使用七牛CDN中的 search.xml,具体配置方法参考hexo-theme-next/commit/2ff6c11
5. 整合到自动部署
参考《Hexo配置GitHub Actions自动构建发布》,配置自动部署。