对象存储协议,其实都是基于亚马逊AWS的S3来的。 虽然一般提供的UI界面看上去和普通的文件系统没有区别,实际上却有本质的不同。 只要理解两个核心概念,就能大致理解对象存储的含义——Bucket(桶)和Object(对象)。
Bucket是一个网络资源,相当于一个文件夹、硬盘。 它有一个独一无二的内部域名,或至少是域名+前缀,一一对应一个URL,全网唯一。 它是一个存储资源,所以通常伴随一个云服务提供商Region(区域)的概念。 同一个Region中,桶名是独一无二的,否则无法对应一个全网唯一的URL; 不同Region中,可以有相同的桶。 默认情况下,不同Region之间的桶是不会同步内容的,因为有跨区域流量。 它最大的特点是,逻辑上存储空间无限。 实际上,各云服务都有各自的上限,但上限很大,一般无需在意。
Object是Bucket中的内容,也可以把Bucket看做Object的集合。 一个Object相当于一个文件。 但是由于Bucket中只有Object,所以与PC文件系统不同,没有文件夹这个概念。 我们看上去像文件夹一样的东西,其实只是URL的PATH的一部分而已。 基于Object,可以单独地做读写(上传与下载)、权限管控等操作。
一个Object的完整URL,大概是这样的:oss://bucket/path/to/object
。 (这里的oss://
是阿里云的协议,通用的应该是s3://
。) 其中缺少了域名,这通常需要额外配置。 和一般的云服务类似,鉴权采用了AK/SK的方式,也需要额外配置。
Bucket作为一个网络资源,有三种权限配置:公共读写、公共读、私有。 公共读写是很少有人用的,谁愿意花自己的钱给别人存储资源? 公共读通常用于图床、提供静态文件场景,也可以像本文这样直接托管整个静态网站。 私有是最常见的,通常用作内部系统的一个存储组件,或直接与外部进行可控对接。
OSS配置静态网站
OSS这类服务,通常有三种类型。 这里静态网站托管,使用标准类型。 如果不知道使用什么类型,通常都是使用标准类型。
标准类型 | 低频访问类型 | 归档类型 | |
---|---|---|---|
适用场景 | 通用场景,平均每文件每月访问大于1次 | 单文件月访问不到1次,但访问需实时 | 单文件月访问不到1次,且适应解冻过程 |
对象最小计量大小 | 按照对象实际大小计算 | 64KB,即小于64KB的文件,按64KB计费 | 64KB,即小于64KB的文件,按64KB计费 |
最少存储时间要求 | 无 | 30天 | 60天 |
数据访问特点 | 实时访问 | 实时访问 | 需先解冻后才能读取,解冻时间1分钟 |
图片处理 | 支持 | 支持 | 支持,但需要先解冻 |
数据取回费用 | 无 | 按实际获取的数据量收取,单位GB | 按实际解冻的数据量收取,单位GB |
在线配置OSS
在线配置,主要是对Bucket进行创建和配置。
创建Bucket时,除了【版本控制】不开通、【读写权限】选择【公共读】以外,其它都无关紧要,可按需选择。 创建完成后,在【对象存储】【基础设置】【静态页面】中,还需要手动调整以下配置。
- 默认首页:
index.html
- 默认404页:
404.html
- 子目录首页:开通
- 文件404规则:Redirect
然后到【对象存储】【传输管理】【域名管理】中【绑定域名】,即可使用CNAME方式走自购域名访问网站。 如果域名也是阿里云买的,还可以自动添加CNAME记录,非常方便。 如果还买了证书,那么点击【证书托管】,配置一下,即可使用https协议访问。
在线配置CDN
直接用桶对互联网提供服务,当然也是可以的。 域名和https配置上,也像模像样。 但是如果通过CDN进行全球加速,效果通常要好一些。
在【传输管理】【域名管理】中,点击【阿里云 CDN 加速】的【未配置】,可以创建CDN。 在创建页面上,基本上什么都不需要改,或者也可以按需微调。
创建完成后,在【CDN】【域名管理】【HTTPS配置】【HTTPS证书】中,把证书配置上。 如果是通过阿里云购买的证书,可以直接在线选择,比OSS那边更方便。 证书配置完成后,【HTTPS配置】下的其它选项基本上可以全开。
【CDN】其它配置,可按需调整。 唯一要注意的是有个坑,【回源配置】【阿里云OSS私有Bucket回源】是不能打开的。 这个功能的意思是,配置好了以后,可以支持私有Bucket,这样别人就只能通过CDN访问了。 否则,其实是可以通过OSS的外部域名直接访问的。 但是配置过程中,需要进行复杂的授权配置;并且,即使授权无误,如果把Bucket的权限调整为私有,还是会挂 ——这可能是一个Bug。 本站因此在2020年9月挂了半天,引以为戒。
线下配置
线下配置,其实就是配置开发环境的OSS客户端。 这里选择了OSS官方的命令行客户端ossutil
。 可以参考《下载和安装_命令行工具ossutil_常用工具_对象存储 OSS-阿里云》进行安装,以下给出一种安装方式。
cd ~/bin wget http://gosspublic.alicdn.com/ossutil/1.6.19/ossutil64 chmod +x ossutil64
执行ossutil64 config
,按提示填写。 这样可以新增~/.ossutilconfig
文件,也可手动修改,内容如下:
[Credentials] language=CH accessKeyID=LTAI4G5df1xxxxxxxxxxxxxx accessKeySecret=4pJGEQuKJeUXBexxxxxxxxxxxxxxxx endpoint=oss-cn-hangzhou.aliyuncs.com
其中,accessKeyID
与accessKeySecret
,即所谓AK/SK。 这需要在RAM获取,属于云服务基本操作,略。
选择ossutil
,而不是s3cmd
,是因为ossutil
对自家的OSS优化做得更好。 s3cmd
虽然也能上传成功,但是细节上有一些问题。 最不能忍的是对svg类型的文件,上传后的默认类型是image/svg
,作为图片引用会失败。 而ossutil
默认设置svg类型为image/svg+xml
,这才能正常使用。
上传OSS操作
ossutil64 cp -urf public/ oss://BUCKET/
其中,publice/
显然是hugo的默认输出目录,可替换成任何静态网站输出目录。 BUCKET
则需要修改为目标桶名。