Le R2 de Cloudflare est enfin disponible publiquement (il a fallu un an, apparemment). (Voici l’annonce originale : Announcing Cloudflare R2 Storage: Rapid and Reliable Object Storage, minus the egress fees)
J’ai créé un bucket.
J’ai créé un jeton qui inclut : « Modifier : Autoriser l’accès en modification de tous les objets et les opérations de liste, d’écriture et de suppression de tous les buckets »
Voici ce que j’ai essayé :
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
Mais le téléchargement des actifs échoue avec ceci :
Aws::S3::Errors::NotImplemented: Header 'x-amz-acl' with value 'public-read' not implemented
Et puis je me suis souvenu de rendre le bucket public comme décrit sur Public buckets · Cloudflare R2 docs
Mais cela n’a toujours pas fonctionné.
S3 API compatibility · Cloudflare R2 docs montre que x-amz-acl n’est pas implémenté.
En parcourant le code de Discourse, il ne m’est pas évident qu’il soit possible de faire fonctionner R2 sans modifications du cœur.
Après avoir désactivé les téléchargements, les sauvegardes fonctionnent, donc R2 semble être un moyen très peu coûteux d’avoir des sauvegardes S3. Mais comme j’avais rendu ce bucket public, la sauvegarde était également publique (si vous pouvez deviner le nom du fichier), donc si cela est résolu, vous voudrez des buckets séparés pour les sauvegardes et les téléchargements.
J’ai supprimé cette ligne et j’ai pu constater qu’un fichier avait été téléchargé, et j’ai pu y accéder en utilisant un domaine personnalisé comme s3_cdn_url. (Et une modification similaire de la tâche rake s3 permet le téléchargement des actifs.)