换成 Hugo 后一直很头疼博客的部署耗时,基本上的用时是 5-6 分钟:

build 和 upload 是最耗时间的。

build 这一步在我本地其实只需要 1-2s,在 GitHub Actions 中跑 workflow 因为没有 cache 所以 build 和 upload 都很慢。 所以很早就萌生还是需要图床的想法了。

好多年前使用过七牛云的存储,当时我还没有买域名,它还提供免费的 URL 所以觉得很好用,还给它充值过 50 块还是 200 块。(没有用完,当做慈善了吧) 某一年开始它不提供长期免费的 URL 了,还要求绑定已经备案的域名,单纯域名也就算了,还要备案,于是さよなら。 当时觉得好像也没有几张图,也没有很满意的免费或低价图床(当时或现在流行的新浪、腾讯云、阿里云、又拍云等等,全都不喜欢),所以长期都没有设置图床,都是直接放在 GitHub 仓库里。

疫情前后,发生了很多很多事,审查太疯狂,我也开始了备份自己的豆瓣信息,标记的条目在 Notion 上存了表格,现在也同步到 NeoDB 上,写了教程。 我在豆瓣也写过很多日记,也已经把它们全部下载下来放到这个博客里了,因为很多是游记,所以有很多很多图片,博客的图片量瞬间上来了。 仓库变得非常臃肿,终于又到了需要使用图床的时刻了。

早先就已经在用 Cloudflare 的 DNS 做解析了,近几年 Cloudflare 的功能都做得很好,看到过很多人夸。 这次就没啥特别要选择的,直接搜索教程了,搜索的时候才知道免费额度有 10G,是真的很够用了的感觉。现在博客里已有的图片是大概 420MB 而已。

简单来说,步骤就是:

  1. 填入信用卡信息,开通 CF R2 存储功能,超过免费额度才需要付费
  2. 创建 bucket,我是取名叫 blog,这个 bucket 专门放博客里用到的图片
  3. 然后需要给 bucket 添加自定义的域名,这里我直接设的自己买的域名的二级域名 static.zhuzi.dev。一级域名也是让 CF 管理的,所以设置二级域名 CF 会自动添加一条 CNAME 记录
  4. 给当前 bucket 设置允许公开访问。到这个地方,存储功能就算开通设置好了,网页上直接拖拽一个图片上传,就可以获取图片链接了。
  5. 创建 R2 API Token,保存一下 Access Key ID & Secret Access Key & endpoint 用于之后的上传
  6. 安装+配置了一下 rclone
  7. 在本地整理了一下图片的文件夹,用 rclone 直接把整个文件夹上传到了 R2 bucket 里: rclone sync -P . r2:blog 上传 1847 张图片花了 14m19.7s
  8. 直接 vscode 里全局搜索并 Replace All 把所有图片的地址替换成 https://static.zhuzi.dev/ 的前缀
  9. 把所有图片从 git 里移除,commit + push

这样捣鼓了一圈之后,仓库本身体积马上减轻 99%,部署时间马上减少到 30-40s。

再新增图片的时候,可以继续用 rclone,也可以和很多博客推荐的一样用 PicGo (搭配 S3 插件)当上传工具

参考: