今天配置了下自己博客的图床服务,在此写下一片笔记用作记录。我使用到的方案是AWS的OSS产品S3,而为了提高网站的加载速度,我选用了AWS的CDN产品CloudFront,用它配置CDN更简单,且每月包含10M个免费请求数和1TB的下载流量。
1. 创建S3存储桶 🔗
首先我们要访问AWS S3创建一个存储桶,存储桶采用默认的配置就好,访问权限默认屏蔽所有的公共访问。为了加速网站访问和避免大量的访问流量导致较高的S3费用,我们使用CloudFront来做S3的CDN,所以应该屏蔽公共访问,后面我们再单独配置CloudFront的访问权限。
2. 配置CloudFront CDN 🔗
2.1 创建CloudFront分发 🔗
我们使用CloudFront作为图床的CDN服务,在CloudFront中创建一个分发(Distribution),分发的源站就是我们创建好的S3存储桶的访问地址,可以在下拉框中快速选择。除了源站的域名之外,还需要配置源站访问策略为跟随S3的访问控制,其他默认即可。
在选择了“Origin access control settings”之后,我们要用CloudFront分发S3的文件之前,还需要配置S3授予CloudFront访问权限,将CloudFront生成的配置拷贝到创建的S3存储桶的Bucket policy中,就完成了对S3的CDN分发配置。
2.2 配置自定义域名 🔗
AWS CloudFront的域名是xxx.cloudfront.net
,名称较长,可以替换为自定义的域名访问,如s3.example.com
。通过自己的域名服务商可以配置一个CNAME域名记录,指向我们的CloudFront地址xxx.cloudfront.net
。
然而仅仅配置到CloudFront的CNAME是不够的,我们还需要在CloudFront中配置自定义的域名。不过在此之前,我们需要签发一个自定义域名的证书,这可以在ACM中配置,配置的过程需要我们验证对域名的所有权,未验证前证书签发状态是pending。
在通过域名服务商配置DNS记录,验证对域名的所有权后,AWS ACM的证书签发状态也很快变为“verified”,这个时候我们添加自定义域名就可以保存成功,如下图所示。这时候再在CloudFront中配置个性化域名,域名可以配置成功。
3. 配置PicGo和Typora 🔗
3.1 创建一个IAM用户 🔗
在配置好了S3和CDN之后,CDN已经可以访问S3了,读图床的图片已经没有问题。然而为了上传图片,我们还需要配置图片上传工具PicGo和Typora。不过由于我们S3配置为屏蔽所有的公开访问,因此我们需要创建一个IAM用户,通过用户的访问密钥上传图片。为了避免风险问题,我们的目标是创建一个IAM用户,它具有满足上传图片等编辑需求的最小权限。首先我们在IAM中创建一个用户:
在用户配置下配置用户的访问权限,授予S3桶的部分读写权限,尽量减少权限,例如限制资源为指定的存储桶,以及限制操作为少数的几个List和Write权限。
3.2 配置PicGo 🔗
下载PicGo-Core,安装PicGo S3 插件,配置应用密钥ID、应用密钥、存储桶、文件路径和地区。也可以用PicGo的客户端可视化配置,但是我的Typora版本(1.8.10)不能兼容最新的PicGo图形客户端(v2.4.0-beta.7)。
测试上传图片成功后,如果S3中可以找到上传的测试图片,证明PicGo配置成功。
3.3 配置Typora 🔗
Typora可以配置集成PicGo,默认是支持PicGo的,但是由于其是调用的Typora自己下载的一个PicGo版本,版本较老,所以我们可以用“Custom Command”配置上传命令为“picgo upload”,其中picgo二进制是安装的PicGo core。