腾讯云对象存储COS自建图床并配置Obsidian自动上传

博客的图片如果存储在本地,那么博客将会越来越臃肿,于是还是转回使用图床。免费图床不知道什么时候就用不了了,还是自建比较稳妥,至少能够自己把控。

为什么不在服务器上用minio之类的方案进行搭建,而是额外购买对象存储?因为服务器比较贵,说不定什么时候就不续费了,不想将太多东西绑在上面,对象存储则比较便宜,要是服务器不续租了图床也能继续用。算是一种"解耦"吧。而且服务器性能也有限,不想分出性能给图床。

原本想使用"轻量对象存储"的,但一看功能有点简陋,还是选好一些的吧,不弄轻量的,应该也贵不了多少。

本文将使用腾讯云对象存储搭建一个图床,并配置Obsidian和PicGo实现便利的上传图片功能。

有了自己的图床后,终于不必在写博客的时候担心图片怎么存储了,可以放心地插图。

添加子账号

主要参考官方文档:对象存储 使用 PicGo+Typora+COS 搭建图床服务-实践教程-文档中心-腾讯云

添加子账号是为了进行key的权限管理,如果直接用主账号的key,被攻击了就完蛋了。

添加子账号官方文档说得比较清楚,这里就不赘述了。

登录子账号之后在密钥管理页面获取如下信息:

  • Secretld:开发者拥有的项目身份识别 ID,用于身份认证
  • SecretKey:开发者拥有的项目身份密钥
  • AppId:开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源

其中,SecretKey只有在创建密钥的时候才能看到,需要自行保存下来。

创建存储桶

存储桶的官方介绍:对象存储 存储桶概述-开发者指南-文档中心-腾讯云

存储桶(Bucket)对象的载体,可理解为存放对象的"容器",且该"容器"无容量上限。对象以扁平化结构存放在存储桶中,无文件夹和目录的概念,用户可选择将对象存放到单个或多个存储桶中。

而对象就是我们要上传的图片文件。

我新建了一个名为"image-host-自动生成的数字串"的存储桶,用来当做图床,同理,还可以创建其他的存储桶用于别的应用,比如同步思源笔记的数据等。

一些设置:

  • 所属地域: 我选择了存放博客的服务器的所属地域
  • 多AZ(Availability Zone): 简单来说就是花更多钱多地容灾,让你的数据更安全,且开启后无法关闭,一开始就得想好要不要选。我就不开启了,图床里面也不是特别重要的数据,省点钱,相信腾讯云的基础容灾能力。
  • 访问权限: 这里一开始我是选了私有读写,不过后来改为了公有读私有写,这样才能让博客读者能够看到图片。告警策略和防盗链之类的配置记得创建好之后要开,具体看官方文档,这里不赘述。
  • 版本控制: 作为图床,不需要修改图片,所以就不开版本控制,省存储空间。
  • 极智压缩: 这个开了是用于节约下行流量的,也就是存储的是原图,但是别人看你图片的时候是压缩后的,节约了流量费用。当然也可以在上传时压缩,节约上传费用。

自定义域名

对象存储 存储桶切换自定义域名-实践教程-文档中心-腾讯云

这个时候要访问里面的图片还是得使用指定的一长串域名,而且"2024年1月1日后创建的桶不支持使用默认域名在浏览器预览文件",直接在浏览器访问会下载图片而不是预览图片。因此需要自定义源站域名。

在桶管理页面的"域名与传输管理"里找到"自定义源站域名",可以绑定已经备案的域名。

我绑定了博客站点域名的子域名images,接着去额外申请了这个子域名的SSL免费证书。

需要注意的是,你绑定完之后,还需要手动去DNS服务商(在这里是腾讯云)那里配置一个CNAME记录,指向此处显示的域名。否则仍然会解析失败,显示一个红色感叹号:"当前链路下未检测到该域名的CNAME记录"。

配置PicGo

PicGo是一款支持多种云存储配置、快捷生成图片链接的工具。

将前面的信息都填进去,参考官方文档:

  • COS 版本: 选择 COS v5。
  • 设定 Secretld: 开发者拥有的项目身份识别 ID,用于身份认证,可在 API 密钥管理 页面中创建和获取。
  • 设定 SecretKey: 开发者拥有的项目身份密钥,可在 API 密钥管理 页面获取。
  • 设定 Bucket: 存储桶,COS 中用于存储数据的容器。有关存储桶的进一步说明,请参见 存储桶概述 文档。
  • 设定 AppId: 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 API 密钥管理 页面获取。
  • 设定存储区域: 存储桶所属地域信息,枚举值可参见 可用地域 文档,例如 ap-beijing、ap-hongkong、eu-frankfurt 等。
  • 设定存储路径: 图片存放到 COS 存储桶中的路径。
  • 设定自定义域名: 可选,若您为上方的存储空间配置了自定义源站域名,则可填写。相关介绍可参见 开启自定义源站域名
  • 设定网址后缀: 通过在网址后缀添加 COS 数据处理参数实现图片压缩、裁剪、格式转换等操作,相关介绍可参见 图片处理

这里说的存储路径,是图片上传后图片在存储桶内的文件路径。

你可能会问,对象存储不是没有文件夹的吗?这个是为了让习惯了文件系统的用户更方便使用而加的,实际上并没有文件夹,我猜想实现方式是将同一个前缀的对象以文件夹的格式显示,或是存储了文件夹名作为对象的元数据。

用子域名来区分图床和博客站之后,就没什么必要建一个images目录来区分了。存储桶的根目录下新建名为"2025"的文件夹,按照年份来管理上传的图片,每年手动改一下上传目录就行。

为了避免重名图片覆盖掉已有的图片,设置为使用时间戳重命名图片。

图片压缩

博客中大多数图片都不需要很高的清晰度,只是用来展示大致操作、布局或样式,因此为了节约流量费用和存储费用,就需要将其压缩。

不过创建存储桶时选择的图片"极智压缩"和我想象得不太一样,我以为是上传前压缩好,存储的是压缩后的图片,没想到是查看时压缩,节约的是流量而不是存储费用。

看了文档之后得知也有上传时压缩,不过需要在请求体里面加参数,picgo在2.4.0-beta.4开始支持极智压缩的配置,但实际使用中图片并没有被压缩,只是加了个已经可以被省略掉的参数。得找个别的办法。

图床杂谈:PicGo 安装图片压缩插件,减少图床原图大小 | zi4dbek 的小站

安装插件商店中的compress插件后,选用imagemin本地压缩,可以把1.39MB压缩成251.67KB,不错。

但需要注意的是,安装之后需要在插件设置里面手动启用transformer-compress,才会在上传后进行压缩操作。

Obsidian插件

我用于写博客的是obsidian这款笔记软件,它有个利用picgo来上传图片的插件Image Auto Upload Plugin。参见:Obsidian中图床自动上传设置-使用PicGo - 知乎

安装好插件之后,只要开着PicGo,就可以实现粘贴的同时上传到COS了。

相关推荐
Rust研习社5 小时前
组合真的优于继承吗?为什么 Rust 和 Go 都拥抱组合舍弃继承?
后端·rust·编程语言
IT_陈寒5 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
CaffeinePro6 小时前
Pydantic深度使用:数据校验、枚举、ORM映射
后端·fastapi
Chenyiax6 小时前
从 Chat 到 Responses:OpenAI API 抽象为什么变了?
后端
MariaH6 小时前
Koa和Express的区别
后端
MariaH6 小时前
Koa框架的使用
后端
luckdewei8 小时前
那个用 passlib 做认证的新同事,上线第一天就把用户密码写进了日志
后端
ping某9 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
JustHappy9 小时前
我汇总了身边朋友的经历才发现,其实第一份实习是最难找的......
前端·后端·面试
uhakadotcom9 小时前
在python 的 工程化架构中 ,什么是 薄包装器层?
后端·面试·github