配置兼容S3的对象存储提供商用于上传

Cloudflare 的 R2 终于公开发布了(Apparently 耗时一年)。(这是原始公告:https://blog.cloudflare.com/introducing-r2-object-storage/)

我创建了一个存储桶。

我 创建了一个令牌,其中包含:“编辑:允许编辑所有对象的访问权限以及所有存储桶的列表、写入和删除操作”

这是我尝试过的内容:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: auto
  DISCOURSE_S3_ACCESS_KEY_ID: redacted
  DISCOURSE_S3_SECRET_ACCESS_KEY: redacted
  DISCOURSE_S3_CDN_URL: https://pub-72eaa03782c542edbe00598fd1666be1.r2.dev
  DISCOURSE_S3_BUCKET: lc-testing
  DISCOURSE_S3_BACKUP_BUCKET: lc-testing/backups
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_ENDPOINT: https://cb46accbfcc3db1bdbba2bce07f8b509.r2.cloudflarestorage.com
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
  FORCE_S3_UPLOADS: 1

但是上传资产时出现此错误:

Aws::S3::Errors::NotImplemented: Header 'x-amz-acl' with value 'public-read' not implemented

然后我才想起,正如 Public buckets · Cloudflare R2 docs 中所述,需要使存储桶公开。

但它仍然不起作用。

S3 API compatibility · Cloudflare R2 docs 显示 x-amz-acl 未实现。

查看 Discourse 代码,我并不清楚在不更改核心代码的情况下是否可以使 R2 工作。

禁用上传后,备份可以正常工作,因此 R2 似乎是一种非常便宜的方式来获得 S3 备份。但由于我公开了那个存储桶,备份也是公开的(如果你能猜到文件名),所以如果这个问题解决了,你将需要为备份和上传使用单独的存储桶。

我删除了这一行,并能够看到它上传了一个文件,并且可以使用自定义域作为 s3_cdn_url 来访问它。(对 s3 rake 任务进行类似编辑可以上传资产。)

5 个赞