تكوين مزود تخزين كائنات متوافق مع S3 للرفع

أصبح R2 الخاص بـ Cloudflare متاحًا للجمهور أخيرًا (استغرق الأمر عامًا واحدًا على ما يبدو). (إليك الإعلان الأصلي: Announcing Cloudflare R2 Storage: Rapid and Reliable Object Storage, minus the egress fees)

لقد أنشأت دلوًا.

لقد أنشأت رمزًا يتضمن: “تعديل: السماح بالوصول للتعديل لجميع الكائنات وعمليات القائمة والكتابة والحذف لجميع الدلاء”

إليك ما جربته:

  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

لكن تحميل الأصول يفشل مع هذا:

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

ثم تذكرت جعل الدلو عامًا كما هو موضح في Public buckets · Cloudflare R2 docs

لكنه لم يعمل بعد.

S3 API compatibility · Cloudflare R2 docs يوضح أن x-amz-acl غير مطبق.

بالنظر إلى كود Discourse، ليس من الواضح لي أنه من الممكن جعل R2 يعمل دون تغييرات أساسية.

بعد تعطيل التحميلات، تعمل النسخ الاحتياطية، لذا يبدو أن R2 طريقة رخيصة جدًا للاحتفاظ بنسخ احتياطية S3. ولكن نظرًا لأنني جعلت هذا الدلو عامًا، فقد كان النسخ الاحتياطي عامًا أيضًا (إذا كان بإمكانك تخمين اسم الملف)، لذلك إذا تم حل هذه المشكلة، فستحتاج إلى دلاء منفصلة للنسخ الاحتياطية والتحميلات.

لقد قمت بإزالة هذا السطر وتمكنت من رؤية أنه قام بتحميل ملف، وتمكنت من الوصول إليه باستخدام نطاق مخصص كـ s3_cdn_url. (وتعديل مماثل لمهمة s3 rake يسمح بتحميل الأصول.)

5 إعجابات