使用cos+upic搭建图床服务

March 5, 2022

背景

之前在网上找了不少存储图片的地儿,貌似都不是很靠谱。也研究了一下腾讯云,似乎也没有提供直接可用的图片存储服务。看网上的经验有人使用腾讯云cos+cdn直接搭建了一个个人的图片存储服务,感觉流程也挺简单,于是研究后操作了一番,发现也有不少弯路,于是记录一番。

cos

基础

对象存储COS为腾讯云提供的云存储服务,可以简单的理解为云硬盘,可以通过页面、接口上传文件到特定的目录(实为bucket)。具体流程就不介绍了,参考官方文档。

创建bucket之后,每个bucket会有一个独立的访问域名,可以通过http域名直接访问文件。注意需要先将存储桶访问权限改为”公有读私有写“。

这样一个简单的文件上传、下载服务器就搭建好了。可以直接在文件列表中上传、下载文件以及管理工作。

优化上传

通过页面上传肯定不是一个好的方案,上传每次都要通过腾讯云页面操作,成本太高。

Mac下有个很方便的工具uPic,可以方便的上传到cos。可以直接从git release下载,应用市场也提供了收费版本。uPic支持多种图床用作存储服务,包括腾讯云cos。我用的git免费版本,cos图床配置大致如下:

注意点

  • Secret Id/Key:建议为uPic申请独立子账户,且仅允许访问COS数据资源权限"QcloudCOSDataFullControl"。毕竟开源产品的安全性无法保证,主账户秘钥是允许访问所有腾讯云资源的。具体方式在创建秘钥时会给与提示。
  • 域名:可以先填写cos访问域名,后面接入cdn后使用CDN加速域名替换。
  • 保存路径:为了两部分,前面部分好理解,后面部分可以先为空,或者为图片处理的样式名称。比如"/1920"。

uPic支持多种上传方法,在Mac可以做到右键一键上传,并自动将下载地址写到粘贴板(看上网会有上传成功的提醒,一直没找到在哪里开启)。

此步骤结束就基本满足私人图片存储的基础需求了。

图片处理

可以通过腾讯云的数据万象服务,对COS中的图片文件进行裁剪、压缩等处理,比如上传一张图片,可以生成多种不同的样式,以便适配不同的显示要求。终端可以针对不同屏幕大小拉取不同的尺寸图来进行适配,带样式的下载地址即为原(访问/CDN)域名+样式分隔符+样式名

CDN接入

我的COS在广州区,其实本地访问速度还算不错的,但是为了更好的体验,还是考虑接入CDN。除性能因素外,CDN的下行成本也比COS要便宜不少,索性一次到位,将COS接入腾讯云CDN。

整体配置也挺简单的,照着文档执行即可,踩到的几个坑记录一下:

  • bucket:最开始时我拿了一个很久之前创建的bucket,具体时间我忘了,照着流程文档一直没有走通,cdn域名一直返回403。折腾大半天放弃了,后面咨询了腾讯云客服,判断为bucket自身原因,让我重新创建bucket后重新走了一遍CDN接入流程后恢复了。
  • 存储桶权限开启:为了避免从cos接入域名访问,选择了私有读写,接入CDN时需要开启CDN域名的回源鉴权,倒是CDN鉴权可以不用开启,后续有需要再根据实际情况打开。
  • 简单起见,这里先使用了COS提供的默认CDN加速域名。

独立域名

长久考虑,决定分配一个独立图片子域名,避免后面的迁移等问题。操作步骤:

  1. 在腾讯云CDN管理台添加域名。加速域名命名自定义前缀即可。源站配置即为之前的cos源。

    添加完毕后,会分配独立的cname名称。

  2. DnsPOD管理台,为主域名解析添加对应的cname记录。在上一步的添加域名时会提醒自动操作,不需要手工输入。
  3. 独立域名ssl证书申请。可以在腾讯云ssl证书管理台申请免费的单域名证书,有效期一年。不在乎成本的话也可以考虑买个通配证书。
  4. 在CDN中开启对应的https配置,选择对应的证书即可。

之后就可以改用独立cos域名来访问相关图片资源了。

总结

一到两天的时间内边摸索边操作,就搭建了一套完整的图片存储下载服务,包括cos存储、图片裁剪/压缩、CDN下载、独立资源域名接入等基础能力都很完善,基本能满足小型业务的使用场景了。相对若干年前使用架平的图片存储服务需要开发编码接入来说,已经方便不少了。可见云平台的逐步完善,确实能大幅提升生产力。

不足点:

  • 组件比较零散,第一次会有上手成本。涉及了cos、cdn、ssl、dnspod、万象等等组件的使用,之前没接触过的话还是得精心看看文档。看得出为了便于接入,腾讯云在各组件之间的打通工作上做了不少的优化。
  • 各种购买流程阻断。比如万象服务,我实在购买cos的过程中采购的,后面发现这个貌似没有多大必要,cdn貌似也提供了图片压缩的能力。当然这个业余个人的流程不熟悉有关。

总之有了云服务的各种Paas服务之后,确实简化了不少自建的流程,能大幅提升小团队的生产效率。

See all postsSee all posts