Configurer un fournisseur de stockage d'objets compatible S3 pour les téléchargements

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.)

5 « J'aime »