集成

您的存储 · WordPress + WooCommerce

WooCommerce 的 AWS S3 存储

Alter Product 插件内置了 AWS S3 存储模块。您可以将插件支持的文件组保存在自己的私有存储桶中,在 WordPress 中连接存储桶,并使用插件工具迁移现有文件。

扩展此已连接存储的容量时,Alter Product 不收取额外的存储容量费用。AWS 会向您的账户收取存储、请求和数据传输费用。WordPress 托管费用以及常规套餐和嵌入会话规则仍然适用。

本说明遵循插件内的设置指南。AWS 控制台标签保留英文。

先安装 WordPress + WooCommerce 插件配置这一可选存储后端之前,请先将 Alter Product 连接到商店。

存储、文件交付与费用

S3 保存插件的文件对象。WordPress 仍负责检查访问权限并将文件交付给浏览器。

供插件使用的私有存储后端

浏览器不会直接从 S3 下载文件。WordPress 从私有存储桶获取并校验文件,再通过自身端点提供文件。请将 S3 CORS 留空,并启用 Block Public Access;这不是公开存储桶,也不是直连 CDN。

此模块仅覆盖受支持的 Alter Product 文件组。连接存储桶不会迁移 WordPress 中的所有文件,也不会更改嵌入工具的限额。

浏览器通过 WordPress 请求文件,WordPress 连接到私有 AWS S3 存储桶。
文件通过 WordPress 交付。私有 S3 存储桶不会直接暴露给浏览器。

按实际使用的资源向 AWS 付费

增加已连接存储桶的容量不会产生额外的 Alter Product 费用。AWS 费用取决于使用量、区域和存储类别;请查看最新 S3 价目表,不要假定价格固定。

文件由 WordPress 提供,因此相关流量也可能计入托管服务的带宽用量。使用 S3 不意味着托管流量为零,也不意味着服务器吞吐量无限。

按支持的设置创建存储桶

以下字段名称与英文 AWS 控制台及插件内置设置指南保持一致。

创建通用存储桶

登录 AWS,打开 Amazon S3,选择 General purpose buckets → Create bucket。选择区域,并使用小写英文字母、数字和连字符命名,不要使用句点。复制存储桶的完整名称,包括 AWS 添加的任何后缀。

  1. 应用表格中的设置,然后选择 Create bucket。
  2. 记下存储桶完整名称、区域和存储桶所有者的 12 位 AWS 账户 ID。
  3. 将 Cross-origin resource sharing (CORS) 留空。S3 请求来自 WordPress 服务器。
插件 S3 设置指南采用的配置
AWS 字段设置
Bucket typeGeneral purpose
Bucket namespaceAccount Regional namespace (推荐)
Object OwnershipACLs disabled / Bucket owner enforced
Block Public AccessBlock all public access (全部四项设置)
Bucket VersioningEnable
Default encryptionServer-side encryption with Amazon S3 managed keys (SSE-S3 / AES256)
Bucket KeyDisable
Advanced settings → Object LockDisable

强制使用 HTTPS

添加传输规则,而不公开存储桶或授予对象访问权限。

添加存储桶策略

打开 Permissions → Bucket policy → Edit。将两处 EXAMPLE-BUCKET 替换为存储桶完整名称。如果已有策略,请保留现有语句,并在检查整个文档后添加此规则。

  1. 检查编辑器提示,然后选择 Save changes。
  2. 确认规则已保存。保持 Block all public access 启用。
存储桶策略 JSON
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyInsecureTransport",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::EXAMPLE-BUCKET",
        "arn:aws:s3:::EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false",
          "aws:PrincipalIsAWSService": "false"
        }
      }
    }
  ]
}

创建受限 IAM 访问权限

为此存储桶和前缀使用专用策略,不要使用 AdministratorAccess 或 AmazonS3FullAccess。

创建插件策略

在 IAM → Policies → Create policy → JSON 中粘贴以下文档。将每处 EXAMPLE-BUCKET 替换为完整存储桶名称。前缀 alter-product 必须与 WordPress 中的 Folder prefix 一致;如果选择其他前缀,请修改每个对象 Resource 中的前缀。

  1. 验证策略,选择 Next,并为其命名,例如 AlterProductS3Storage。
  2. 选择 Create policy,并记下名称以供用户设置时使用。
IAM 策略 JSON
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ReadRequiredBucketControls",
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketVersioning",
        "s3:GetBucketOwnershipControls",
        "s3:GetBucketPublicAccessBlock",
        "s3:GetEncryptionConfiguration"
      ],
      "Resource": "arn:aws:s3:::EXAMPLE-BUCKET"
    },
    {
      "Sid": "WriteAndReadVersionedPluginObjects",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObjectVersion"
      ],
      "Resource": [
        "arn:aws:s3:::EXAMPLE-BUCKET/alter-product/objects/*",
        "arn:aws:s3:::EXAMPLE-BUCKET/alter-product/.storage-tests/*"
      ]
    },
    {
      "Sid": "RecoverJournalOwnedObjects",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::EXAMPLE-BUCKET/alter-product/objects/*"
    },
    {
      "Sid": "DeleteOnlyConnectionTestVersions",
      "Effect": "Allow",
      "Action": "s3:DeleteObjectVersion",
      "Resource": "arn:aws:s3:::EXAMPLE-BUCKET/alter-product/.storage-tests/*"
    }
  ]
}

创建专用用户和访问密钥

选择 IAM → Users → Create user。不要勾选 Provide user access to the AWS Management Console。

  1. 选择 Next → Attach policies directly,仅附加上述策略,然后完成 Create user。
  2. 打开该用户的 Security credentials → Access keys → Create access key。手动配置此插件时,选择 Other → Next,然后选择 Create access key。
  3. 将 Access key ID 和 Secret access key 保存在密码管理器中。私有访问密钥仅显示一次。请通过 HTTPS 直接将其输入 WordPress,不要通过消息或截图分享。

保存并测试 WordPress 连接

通过 HTTPS 打开商店后台,进入 Alter Product → Settings → Storage。选择 AWS S3 和 + / Add connection。

输入连接详情

选择 New connection。相同的内置说明也可在 AWS S3 setup guide 中查看。

  1. 选择 Save connection,等待确认。
  2. 选择 Test connection。再次测试前先保存修改。
  3. 在对话框和 Last connection test 列中检查结果。保存后密钥字段变空是预期行为。
WordPress 连接字段
字段填写内容
Bucket name存储桶完整名称,不是 ARN、s3:// URL 或 HTTPS 地址;不要包含句点。
Folder prefixalter-product,须与 IAM 策略一致。可使用字母、数字、连字符、下划线和分隔的文件夹;开头和结尾不要带斜杠。
Bucket owner AWS account ID所有者的 12 位账户 ID,不含空格。
AWS region存储桶的实际区域。表单默认值为 eu-central-1。
AWS access key ID / AWS secret access key已保存的专用 IAM 用户密钥对。
Use temporary AWS credentials使用此 IAM 用户的长期密钥时不要勾选。仅在使用临时凭证时启用,并提供 AWS session token。

连接测试失败时

核对存储桶名称、所有者、区域、必需设置,以及 WordPress 和 IAM 中的前缀是否完全一致。将 CORS 留空;不要关闭公开访问保护。

已保存的存储桶、前缀、所有者和区域共同确定连接身份。要使用其他目标,请选择 New connection。Edit → Reconnect 用于替换凭证,同时保留现有文件引用。

向支持人员提供测试结果,不要提供访问密钥。将此 S3 设为默认存储之前,连接测试必须成功。

选择默认存储并迁移现有文件

选择默认目标与迁移是两个独立操作。

将 S3 用于新文件组

在已保存连接的所在行选择 Make default。插件会测试连接,且仅在成功后更改默认存储。此设置适用于新文件组;现有组及后续修订在迁移前仍使用已记录的目标。

迁移受支持的现有文件组

首次迁移前,请一起备份数据库、WordPress 盐值和文件。先从测试环境或小型文件组开始。在目标 S3 所在行打开 Migrate;仅打开面板不会复制文件。

Auto migration 会处理当前不在所选目标中的受支持文件组。它不会自动迁移无关的 WordPress 文件。

  1. 选择 Start migration。插件会测试 S3,准备每个文件组,复制并校验后切换引用。
  2. 保持页面打开。Pause 会在当前组完成后停止;Resume migration 会从已保存的进度继续。如果关闭了页面,请重新打开以恢复后续步骤的执行。
  3. 若某组失败,请检查提示和 Advanced,排除原因后继续。不要盲目重复上传结果未知的操作。
  4. 显示 Migration completed 后,测试正常资源读取、编辑、预览和订单文件访问。扫描期间新建的组可能需要再次运行迁移。

移除行不会删除已存储文件

如有需要,请先切换默认存储。Remove 会将连接从列表中停用,但现有文件及其已保存凭证仍然可用。这不是 AWS 对象清理命令。

在 WordPress 节点间共享存储

共享 S3 目标可以降低对单个节点文件磁盘的依赖。但负载均衡器仍需要正确共享状态的 WordPress 部署。

多个节点的要求

对于负载均衡器后的一套 WordPress 安装,必须同时满足以下条件:

  • 一个保持一致的 SQL 写入节点,以及共享的插件数据库状态。
  • 共享 uploads 目录,用于仍保存在本地的文件及保留的迁移源文件。
  • 所有节点使用相同的原始 WordPress 盐值,以便读取保存的凭证和加密文件。
  • 每个节点有独立的私有临时目录,用于传输处理。
  • 一致的插件配置,以及对同一私有 S3 存储桶和对象版本的访问权限。
  • 使用标准 wpdb、原生 mysqli 和 InnoDB 表。不支持 HyperDB 等数据库路由替换组件;这里的负载均衡仅指 HTTP 层。

确保恢复和密钥轮换可用

请一并保留数据库、盐值及被引用的文件版本。

备份、重新连接并验证

使用 Edit → Reconnect 替换同一已保存连接的凭证。停用旧密钥之前,请测试当前及历史文件的读取,也要检查可能仍使用该密钥的其他已保存连接。

保持 S3 版本控制启用,并保留插件引用的版本。不要应用会删除所需历史版本的 lifecycle 清理规则。测试数据库、盐值和已保存文件的一同恢复。

临时凭证会过期,需要新的有效令牌和密钥;插件不会自动更新。随着商店发展,请监控 AWS 使用量及托管服务的数据传输量。