在折腾个人博客的时间里,一直有个非常困扰我的事情,就是图床。这些年来,我也经历了很多次的 博客图床转移,从七牛云图床 -> 新浪图床 -> Gitee -> SM.MS。
目前我很多图片都是放在 SM.MS 这个图床上,有些直接在语雀里写的文章,是直接上传到语雀的图床。而在 我与 Gitee 开源审核事件 发生后,我就一直有个念头就是在自己的服务器上搭建一个自己的图床。
前阵子,我在少数派上看到这样一篇文章:从零开始搭建你的免费图床系统 (Cloudflare R2 + WebP Cloud + PicGo) ,感觉是我想要的东西。
Cloudflare R2 存储
我按照文章里的教程注册了 Cloudflare 账号,创建了一个 R2 存储桶,并且将我之前 lixiaoyu.life 这个域名的 DNS 服务商从 DNSPOD 改为 Cloudflare,这样可以给图床设置一个自己域名的公网链接。整个过程已经过去一段时间,当时没有记录操作步骤,所以这里就一笔带过了(操作教程可以看参考资料里的文章)。
Cloudflare 的 R2 读取数据不收费,只需支付存储费用和对数据执行操作的费用,免费套餐每月有 10GB 存储和 100 万次写操作,对于个人使用足够了。
在 Cloudflare 中复制访问 R2 存储的 API Token,用于 PicGo 上传图片。
PicGo + S3 插件
下载安装好 PicGo,它默认支持几种图床,但不包含 Cloudflare R2,不过没关系,PicGo 也有非常丰富的插件生态,可以下载一个 S3 插件:

将 API Token 等信息配置在 Amazon S3 插件中。就可以通过 PicGo 将图床上传到 Cloudflare 的图床中了。
一个比较有意思的事是,当时我在用 PicGo 搜索 S3 插件时,发现插件列表是一片空白,所以我在 Github 上给作者提交了一个 Issue(Bug: 插件设置页无法搜索到插件)。没想到作者竟然非常快速地回复我了,他排查下来是 npm 接口返回的 JSON 数据结构变了导致解析失败,然后很快修改了代码发布了一个新的 Beta 版本出来,而且在这个 Issue 下,还有很多其他人也评论遇到这个问题,这种参与开源项目的感觉还挺好玩的。
PicGo 图片压缩插件 Compression
现在我们已经有了图床了,但图床的存储是有限的,最好是能把图片压缩一下再上传,之前我都是用一个本地软件压缩完再发给 PicGo 上传,效率特别低,后面我想到,这个 PicGo 插件这么强大,应该会有图片压缩的插件的呀。搜索了一番,果然是有的,比如 compress, compress-next。
但我实际使用时,好像都下载不下来,后面看到一篇文章,推荐了另一个 PicGo 图片压缩插件 Compression。我实际测试下来确实可用。

Obsidian Image auto upload 插件
这部分在之前的 Obsidian 图床 也提到了。在 Obsidian 里安装一个 Image auto upload 插件,就可以实现在 Obsidian 里粘贴图片,自动通过 PicGo 上传到我的图床,这个过程简直如德芙一般丝滑。