pixelfusion / silverstripe-s3
为Flysystem添加SilverStripe对S3适配器的支持
Requires
- league/flysystem-aws-s3-v3: ^1.0.29
- league/flysystem-cached-adapter: ^1.0
- silverstripe/framework: ^4.0.0
- silverstripe/vendor-plugin: ^1.0
README
SilverStripe模块,用于将资产存储在S3而不是本地文件系统中。
注意:此模块目前尚未实现任何类型的受保护资产的存储桶策略。您需要使用AWS存储桶策略自行实现。
安装
运行以下命令
composer require pixelfusion/silverstripe-s3
环境设置
该模块需要设置一些环境变量。完整详情请参阅SilverStripeS3AdapterTrait
特性。以下为必选项。
AWS_REGION
:您的S3存储桶所在的AWS区域(例如eu-central-1
)AWS_BUCKET_NAME
:要存储资产的S3存储桶名称。
如果运行在EC2实例之外,则需要指定API密钥和秘密。
AWS_ACCESS_KEY_ID
:具有访问您想访问的存储桶的权限的AWS访问密钥AWS_SECRET_ACCESS_KEY
:与访问密钥对应的AWS秘密
在EC2实例之外运行时的示例YML配置
--- Only: envvarset: AWS_BUCKET_NAME After: - '#assetsflysystem' --- SilverStripe\Core\Injector\Injector: Aws\S3\S3Client: constructor: configuration: region: '`AWS_REGION`' version: latest credentials: key: '`AWS_ACCESS_KEY_ID`' secret: '`AWS_SECRET_ACCESS_KEY`'
为S3运行CDN时的示例YML配置
--- Only: envvarset: AWS_BUCKET_NAME After: - '#assetsflysystem' --- SilverStripe\Core\Injector\Injector: Aws\S3\S3Client: constructor: configuration: region: '`AWS_REGION`' version: latest endpoint: '`AWS_CDN`' bucket_endpoint: true credentials: key: '`AWS_ACCESS_KEY_ID`' secret: '`AWS_SECRET_ACCESS_KEY`'
请确保您已在云前端分发中设置替代域名下的CDN URL,并且A记录已指向您的分发。
请确保您的替代域名具有SSL证书。
安装
- 定义上述环境变量。
- 从https://getcomposer.org.cn安装Composer
- 运行
composer require silverstripe/s3
这将安装适用于您的其他Composer需求的模块的最新适用版本。
注意:当前此操作会立即用基于S3的存储替换SilverStripe内置的本地资产存储。任何以前已上传到现有资产存储的文件将不可用(尽管它们不会丢失 - 可以运行composer remove silverstripe/s3
来移除模块并恢复访问)。
配置
SilverStripe将资产分类为“公开”或“受保护”。公开资产可以自由下载,而受保护的资产(例如尚未发布的资产)不应直接访问。
默认情况下,该模块通过通过Web服务器将受保护文件的内容流式传输到浏览器(而不是直接链接到S3)来支持这一点。为确保受保护资产无法访问,请确保您设置适当的存储桶策略(以下是一个未经测试的示例)。
配置S3
“受保护”的S3资产存储应使用标准的AWS IAM策略进行保护,该策略不允许匿名用户访问,但仍允许对公共和受保护文件执行s3:GetObject
操作。受保护文件将从AWS流式传输,因此用户不需要直接访问它们。因此,以下类似的存储桶策略可能是有用的。
请确保将下面的<bucket-name>
替换为适当的值。
注意:下面的策略尚未经过广泛测试 - 欢迎反馈。
{ "Policy": { "Version":"2012-10-17", "Statement":[ { "Sid":"AddPerm", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::<bucket-name>/public/*" } ] } }
对于开发者
如果您希望在本地进行一些开发,请阅读为Silverstripe S3模块设置本地沙盒。
卸载
- 运行
composer remove pixelfusion/silverstripe-s3
来移除该模块。