为远程存储配置AWS S3存储段

Amazon Simple Storage Service (Amazon S3)是一项对象存储服务,它提供了业界领先的可扩展性、数据可用性、安全性和性能。 AWS S3服务使用存储桶或容器进行数据存储。 此配置要求您创建一个​ 私有 ​存储桶。 有关云基础架构上的Adobe Commerce,请参阅在云基础架构上为Commerce配置远程存储

WARNING
Adobe强烈建议不要使用公共存储桶,因为它会带来严重的安全风险。

要使用AWS S3适配器启用远程存储

  1. 登录到您的Amazon S3仪表板并创建​ 私有 ​存储段。

  2. 设置AWS IAM角色。 或者,生成访问密钥和密钥。

  3. 禁用默认数据库存储。

    code language-bash
    bin/magento config:set system/media_storage_configuration/media_database 0
    
  4. 配置Commerce以使用专用存储桶。 有关完整的参数列表,请参阅远程存储选项

    code language-bash
    bin/magento setup:config:set --remote-storage-driver="aws-s3" --remote-storage-bucket="<bucket-name>" --remote-storage-region="<region-name>" --remote-storage-prefix="<optional-prefix>" --remote-storage-key=<optional-access-key> --remote-storage-secret=<optional-secret-key> -n
    
  5. 将媒体文件与远程存储同步。

    code language-bash
    bin/magento remote-storage:sync
    

配置Nginx

Nginx需要其他配置才能使用proxy_pass指令执行身份验证。 将以下代理信息添加到nginx.conf文件:

nginx.conf

location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
    # Proxying to AWS S3 storage.
    resolver 8.8.8.8;
    set $bucket "<s3-bucket-name>";
    proxy_pass https://s3.amazonaws.com/$bucket$uri;
    proxy_pass_request_body off;
    proxy_pass_request_headers off;
    proxy_intercept_errors on;
    proxy_hide_header "x-amz-id-2";
    proxy_hide_header "x-amz-request-id";
    proxy_hide_header "x-amz-storage-class";
    proxy_hide_header "Set-Cookie";
    proxy_ignore_headers "Set-Cookie";
}

身份验证

如果您使用访问密钥和密钥而不是AWS IAM角色,则必须包含ngx_aws_auth Nginx模块

权限

S3集成依赖于在本地文件系统上生成和存储缓存图像的功能。 因此,pub/media和类似目录的文件夹权限与S3使用本地存储时相同。

文件操作

强烈建议您在编码或扩展开发中使用Commerce文件适配器方法,而不管文件存储类型如何。 使用S3进行存储时,请勿使用本机PHP文件I/O操作,如copyrenamefile_put_contents,因为S3文件不在文件系统中。 有关代码示例,请参阅DriverInterface.php

recommendation-more-help
386822bd-e32c-40a8-81c2-ed90ad1e198c