腾讯云对象存储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了。

相关推荐
BinaryBardC2 分钟前
R语言的正则表达式
开发语言·后端·golang
CyberScriptor9 分钟前
C#语言的字符串处理
开发语言·后端·golang
Bruce-li__20 分钟前
django解决跨域问题
后端·python·django
!!!52520 分钟前
SpringBoot-web入门程序剖析
java·spring boot·后端
AI向前看1 小时前
Perl语言的文件操作
开发语言·后端·golang
李匠20241 小时前
Scala分布式语言二(基础功能搭建、面向对象基础、面向对象高级、异常、集合)
开发语言·后端·scala
Quantum&Coder1 小时前
Dart语言的数据结构
开发语言·后端·golang
雨 子2 小时前
SpringBoot环境和Maven配置
java·spring boot·后端·java-ee·maven
zyplanke2 小时前
Spring配置文件中:密码明文改为密文处理方式(通用方法)
java·后端·spring
计算机毕设指导62 小时前
基于Springboot的景区民宿预约系统【附源码】
java·开发语言·spring boot·后端·mysql·spring·intellij idea