O R2 da Cloudflare está finalmente disponível publicamente (levou apenas um ano, aparentemente). (Aqui está o anúncio original: Announcing Cloudflare R2 Storage: Rapid and Reliable Object Storage, minus the egress fees)
Criei um bucket.
Criei um token https://developers.cloudflare.com/r2/data-access/s3-api/tokens que inclui: “Editar: Permitir acesso de edição a todos os objetos e operações de Listar, Gravar e Excluir de todos os buckets”
Aqui está o que tentei:
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
Mas o upload de ativos falha com isto:
Aws::S3::Errors::NotImplemented: Header 'x-amz-acl' with value 'public-read' not implemented
E então lembrei-me de tornar o bucket público, como descrito em Public buckets · Cloudflare R2 docs
Mas ainda assim não funcionou.
S3 API compatibility · Cloudflare R2 docs mostra que x-amz-acl não é implementado.
Analisando o código do Discourse, não me parece óbvio que seja possível fazer o R2 funcionar sem alterações no núcleo.
Após desativar os uploads, os backups funcionam, então o R2 parece ser uma maneira muito barata de ter backups S3. Mas como eu tinha tornado aquele bucket público, o backup também era público (se você conseguir adivinhar o nome do arquivo), então se isso for resolvido, você vai querer buckets separados para backups e uploads.
Removi esta linha e consegui ver que ele carregou um arquivo, e consegui acessá-lo usando um domínio personalizado como s3_cdn_url. (E uma edição semelhante na tarefa rake do s3 permite que os ativos sejam carregados.)