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