Configura un provider di storage di oggetti compatibile con S3 per i caricamenti

Cloudflare R2 è finalmente disponibile pubblicamente (ci è voluto solo un anno, a quanto pare). (Ecco l’annuncio originale: Announcing Cloudflare R2 Storage: Rapid and Reliable Object Storage, minus the egress fees)

Ho creato un bucket.

Ho creato un token che include: “Modifica: Consenti l’accesso in modifica di tutti gli oggetti e le operazioni Elenca, Scrivi ed Elimina di tutti i bucket”

Ecco cosa ho provato:

  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

Ma il caricamento degli asset fallisce con questo:

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

E poi mi sono ricordato di rendere pubblico il bucket come descritto su Public buckets · Cloudflare R2 docs

Ma non ha ancora funzionato.

S3 API compatibility · Cloudflare R2 docs mostra che x-amz-acl non è implementato.

Dando un’occhiata al codice di Discourse, non mi è chiaro se sia possibile far funzionare R2 senza modifiche al core.

Dopo aver disabilitato i caricamenti, i backup funzionano, quindi R2 sembra essere un modo molto economico per avere backup S3. Ma dato che avevo reso pubblico quel bucket, anche il backup era pubblico (se riesci a indovinare il nome del file), quindi se questo verrà risolto, vorrai bucket separati per backup e caricamenti.

Ho rimosso questa riga e sono stato in grado di vedere che ha caricato un file, ed è stato in grado di accedervi utilizzando un dominio personalizzato come s3_cdn_url. (E una modifica simile al task rake s3 consente il caricamento degli asset.)

5 Mi Piace