يغطي هذا الموضوع كيفية تكوين بعض مزودي تخزين الكائنات المتوافقين مع S3 (نسخ S3). راجع Set up file and image uploads to S3 لمزيد من التفاصيل حول تكوين Amazon AWS S3، الذي يُدعم رسميًا ويُستخدم داخليًا بواسطة Discourse لخدمات الاستضافة الخاصة بنا.
| المزود | اسم الخدمة | يعمل مع Discourse؟ |
|---|---|---|
| Amazon AWS | S3 | نعم |
| Digital Ocean | Spaces | نعم |
| Linode | Object Storage | نعم |
| Google Cloud | Storage | نعم |
| Scaleway | Object Storage | نعم |
| Vultr | Object Storage | نعم |
| BackBlaze | Cloud Storage | نعم* |
| استضافة ذاتية | MinIO | نعم |
| Azure Blob Storage | Flexify.IO | نعم |
| Oracle Cloud | Object Storage | لا [1] |
| Wasabi | Object Storage | ربما |
| Cloudflare | R2 | نعم |
| Contabo | Object Storage | لا |
إذا نجحت في تشغيل خدمة مختلفة، يرجى إضافتها إلى هذه الويكي.
التكوين
لتخزين الأصول الثابتة لـ Discourse في تخزين الكائنات الخاص بك، أضف هذا التكوين في ملف app.yml الخاص بك تحت قسم hooks:
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
- sudo -E -u discourse bundle exec rake s3:expire_missing_assets
عند استخدام تخزين الكائنات، ستحتاج أيضًا إلى شبكة توصيل محتوى (CDN) لتقديم ما يتم تخزينه في الـ bucket. استخدمت StackPath CDN في اختباراتي، وبصرف النظر عن الحاجة إلى تعيين Dynamic Caching By Header: Accept-Encoding في تكوينها، فإنها تعمل بشكل جيد.
DISCOURSE_CDN_URL هي شبكة توصيل محتوى تشير إلى اسم النطاق الخاص بـ Discourse وتقوم بتخزين الطلبات. ستُستخدم بشكل رئيسي للأصول القابلة للسحب: CSS وأصول السمات الأخرى.
DISCOURSE_S3_CDN_URL هي شبكة توصيل محتوى تشير إلى bucket تخزين الكائنات الخاص بك وتقوم بتخزين الطلبات. ستُستخدم بشكل رئيسي للأصول القابلة للرفع: JS والصور وuploads المستخدمين.
نوصي بأن تكون هذه مختلفة وأن يقوم المسؤولون بتعيين كلاهما.
عدم استخدام شبكة توصيل محتوى (أو إدخال عنوان URL للـ bucket كعنوان URL لشبكة التوصيل) من المرجح أن يسبب مشاكل وغير مدعوم.
في الأمثلة التالية، https://falcoland-files-cdn.falco.dev هي شبكة توصيل محتوى مُعدة لتقديم الملفات الموجودة تحت الـ bucket. تم تعيين اسم الـ bucket إلى falcoland-files في أمثلتي.
يُوصى بتكوين هذه الإعدادات في متغيرات البيئة في ملف app.yml الخاص بك لأن هذا هو الطريقة التي تفعلها CDCK في بنيتها التحتية، لذا فهي مُختبرة جيدًا. أيضًا، تتم مهمة رفع الأصول بعد تجميع الأصول، وهو ما يحدث أثناء إعادة البناء. إذا كنت تريد تشغيل Discourse يعمل بشكل صحيح مع تخزين الكائنات منذ البداية، فيجب عليك تعيين متغيرات البيئة بحيث يتم رفع الأصول قبل بدء الموقع.
اختر مزود الخدمة من القائمة أدناه وأضف هذه الإعدادات إلى قسم env في ملف app.yml الخاص بك، مع تعديل القيم وفقًا لذلك:
AWS S3
ما ندعمه رسميًا ونستخدمه داخليًا. عرض CDN الخاص بهم Cloudfront يعمل أيضًا لتقديم ملفات الـ bucket. راجع Set up file and image uploads to S3 لمعرفة كيفية تكوين الأذونات بشكل صحيح.
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: us-west-1
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
DISCOURSE_S3_BUCKET: falcoland-files
DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backups
DISCOURSE_BACKUP_LOCATION: s3
Digital Ocean Spaces
عرض DO جيد ويعمل خارج الصندوق. من المقبول تمكين تقييد سرد الملفات. المشكلة الوحيدة هي أن عرض CDN الخاص بهم معطل بشكل فظيع، لذا تحتاج إلى استخدام شبكة توصيل محتوى مختلفة للملفات. أيضًا، لا تحتاج إلى تثبيت قاعدة CORS، حيث يتم إعادة تثبيتها في كل إعادة بناء.
تكوين مثال:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
DISCOURSE_S3_BUCKET: falcoland-files
DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backups
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false
Linode Object Storage
معلمة تكوين إضافية، HTTP_CONTINUE_TIMEOUT، مطلوبة لـ Linode.
تكوين مثال:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: us-east-1
DISCOURSE_S3_HTTP_CONTINUE_TIMEOUT: 0
DISCOURSE_S3_ENDPOINT: https://us-east-1.linodeobjects.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
DISCOURSE_S3_BUCKET: falcoland-files
DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
DISCOURSE_BACKUP_LOCATION: s3
Google Cloud Platform Storage
سرد الملفات معطل، لذا تحتاج إلى متغير بيئة إضافي لتخطي ذلك حتى تعمل الأصول. أيضًا، تخطي CORS وقم بتكوينه يدويًا.
نظرًا لأنه لا يمكنك سرد الملفات، فلن تتمكن من سرد النسخ الاحتياطية، وستفشل النسخ الاحتياطية التلقائية، لذا لا نوصي باستخدامه للنسخ الاحتياطية. ومع ذلك، يقترح البعض أنه إذا قمت بتغيير الدور من Storage Legacy Object Owner إلى Storage Legacy Bucket Owner، فإن النسخ الاحتياطية تعمل بشكل صحيح. راجع هذا الموضوع لمناقشة خاصة بـ Google Cloud.
هناك إضافة من طرف ثالث لتحسين التكامل على Discourse GCS Helper.
تكوين مثال:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: us-east1
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
DISCOURSE_S3_BUCKET: falcoland-files
#DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
#DISCOURSE_BACKUP_LOCATION: s3
Scaleway Object Storage
عرض Scaleway جيد جدًا أيضًا، وكل شيء يعمل بشكل جيد في الغالب.
تدعم عمليات الرفع متعددة الأجزاء من Scaleway حدًا أقصى لـ 1,000 جزء. هذا لا يتطابق مع Amazon S3، الذي يدعم حدًا أقصى لـ 10,000 جزء. بالنسبة للمInstances الأكبر، سيسبب ذلك فشل النسخ الاحتياطية لـ Discourse، وقد تحتاج الرفع غير المكتمل إلى حذف يدوي قبل إجراء محاولات أخرى. بالنسبة للمInstances الصغيرة، لا توجد مشكلة. يبدو أن Scaleway منفتحة جدًا على التعليقات، لذا إذا كنت تريد تغيير هذا الحد، فيجب عليك الاتصال بهم.
لاحظ أنه لمعلمة DISCOURSE_S3_ENDPOINT، يستخدم Discourse نقطة نهاية المنطقة بأكملها: https://s3.{region}.scw.cloud. تأتي «نقطة نهاية الـ bucket» الموجودة في لوحة تحكم Scaleway على شكل https://{bucketName}.s3.{region}.scw.cloud. احذف نطاق البوابة الفرعية لمنع أخطاء الاتصال.
تكوين مثال:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: fr-par
DISCOURSE_S3_ENDPOINT: https://s3.fr-par.scw.cloud
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
DISCOURSE_S3_BUCKET: falcoland-files
DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backups
DISCOURSE_BACKUP_LOCATION: s3
Vultr Object Storage
معلمة تكوين إضافية، HTTP_CONTINUE_TIMEOUT، مطلوبة لـ Vultr.
تكوين مثال:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_HTTP_CONTINUE_TIMEOUT: 0
DISCOURSE_S3_ENDPOINT: https://ewr1.vultrobjects.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
DISCOURSE_S3_BUCKET: falcoland-files
DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
DISCOURSE_BACKUP_LOCATION: s3
Backblaze B2 Cloud Storage
تحتاج إلى تخطي CORS وتكوينه يدويًا.
هناك تقارير عن أن «تنظيف الرفع اليتيم» لا يعمل بشكل صحيح مع BackBlaze. يجب عليك تغيير قواعد دورة الحياة لـ bucket الخاص بك حتى يعمل التنظيف اليتيم.
تكوين مثال:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: "us-west-002"
DISCOURSE_S3_INSTALL_CORS_RULE: false
DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
DISCOURSE_S3_ENDPOINT: https://s3.us-west-002.backblazeb2.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
DISCOURSE_S3_BUCKET: falcoland-files
DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
DISCOURSE_BACKUP_LOCATION: s3
ملاحظة: أثناء الهجرة الأولية إلى B2، قد تصل إلى حد المعاملات اليومية المجانية من الفئة C وهو 2500. ستحتاج إلى إضافة طريقة دفع لإزالة القيود.
MinIO Storage Server
هناك بعض التحذيرات والمتطلبات التي تحتاج إلى التأكد من استيفائها قبل استخدام خادم تخزين MinIO كبديل لـ S3:
- لديك خادم MinIO مُعد بالكامل
- لديك دعم النطاقات مفعّل في تكوين MinIO، لعناوين URL للـ buckets القائمة على النطاقات. هذا شرط إعداد إلزامي لـ MinIO و Discourse، حيث لا يزال MinIO يدعم أنماط «المسار» القديمة لـ S3 التي لم تعد مدعومة في Discourse.
- لديك تكوين DNS مُعد بشكل صحيح لـ MinIO بحيث تحل النطاقات الفرعية للـ buckets بشكل صحيح إلى خادم MinIO، ويتم تكوين خادم MinIO بنطاق أساسي (في هذه الحالة،
minio.example.com) - الـ bucket
discourse-dataموجود على خادم MinIO وله سياسة «عامة» مُعدة عليه - يشير عنوان URL لشبكة توصيل محتوى S3 إلى شبكة توصيل محتوى مُعدة بشكل صحيح تشير إلى الـ bucket وتقوم بتخزين الطلبات، كما ذُكر سابقًا في هذا المستند.
- تم تكوين شبكات التوصيل الخاصة بك لاستخدام رأس «Host» لعنوان URL الأساسي لـ S3 فعليًا - على سبيل المثال،
discourse-data.minio.example.comعند جلب البيانات - وإلا فقد يسبب مشاكل CORB.
بافتراض استيفاء التحذيرات والمتطلبات المذكورة أعلاه، سيكون تكوين مثال شيئًا مثل هذا:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: anything
DISCOURSE_S3_ENDPOINT: https://minio.example.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://discourse-data-cdn.example.com
DISCOURSE_S3_BUCKET: discourse-data
DISCOURSE_S3_BACKUP_BUCKET: discourse-backups
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false
سيظل CORS مفعّلًا على MinIO حتى لو لم يتم تثبيت القاعدة بواسطة إعادة بناء التطبيق - على ما يبدو افتراضيًا، يتم تمكين CORS على جميع أفعال HTTP في MinIO، ولا يدعم MinIO BucketCORS (واجهة برمجة تطبيقات S3) نتيجة لذلك.
Azure Blob Storage مع Flexify.IO
Azure Blob Storage ليس خدمة متوافقة مع S3، لذا لا يمكن استخدامه مع Discourse. هناك إضافة، لكنها معطلة.
أسهل طريقة لعرض واجهة متوافقة مع S3 لـ Azure Blob Storage هي إضافة خادم Flexify.IO الذي يترجم بروتوكول Azure Storage إلى S3.
حتى كتابة هذه السطور، الخدمة مجانية على Azure، وتحتاج فقط إلى مستوى VM أساسي جدًا (رخيص) لبدء تشغيلها. ومع ذلك، يتطلب ذلك بعض الإعداد.
- في بوابة Azure، قم بإنشاء مورد جديد من نوع
Flexify.IO - Amazon S3 API for Azure Blob Storage. - للاستخدام الخفيف، يبدو أن تكوين VM الأدنى يعمل بشكل جيد. يمكنك قبول معظم تكوين الافتراضي. تذكر حفظ ملف مفتاح PEM عند إنشاء VM.
- تصفح إلى رابط Flexify.IO VM، وأدخل النظام. اتبع التعليمات عن طريق إعداد موفر بيانات Azure Blob Storage ونقطة نهاية S3 المُنشأة. تأكد من أن إعداد نقطة النهاية
Public read access to all objects in virtual bucketsهو true. انسخ عنوان URL ونقاط نهاية S3. - اضغط على New Virtual Bucket وأنشئ bucket افتراضي. يمكن أن يكون نفس اسم حاوية Azure Blob Storage الخاصة بك، أو يمكن أن يكون اسمًا مختلفًا. قم بربط أي حاوية (حاويات) لدمجها في هذا الـ bucket الافتراضي. يُستخدم هذا الـ bucket الافتراضي لعرض bucket قابل للقراءة علنًا عبر S3.
- افتراضيًا، يقوم Flexify.IO بتثبيت شهادة SSL موقعة ذاتيًا، بينما تتطلب نقطة نهاية S3 HTTPS. قم بتسجيل الدخول SSH إلى VM باستخدام ملف المفتاح (اسم المستخدم هو افتراضيًا
azureuser)، واستبدل الملفات التالية بالملفات الصحيحة:
-
/etc/flexify/ssl/cert.pem- استبدل بملف الشهادة (ترميز PEM) -
/etc/flexify/ssl/key.pem- استبدل بملف المفتاح الخاص (ترميز PKCS#8 PEM، وهو الذي يبدأ بـBEGIN PRIVATE KEYوليسBEGIN RSA PRIVATE KEYوهو PKCS#1)هذه الملفات هي root لذا ستحتاج إلى
sudoلاستبدالها. من الأفضل التأكد من أن الملفات البديلة لها نفس الملكية والأذونات مثل الملفات الأصلية، وهو ما يعنيroot:rootوإذن600.
- افتراضيًا، ينشئ Flexify.IO خدمة S3 على مستوى الجذر مع عدة buckets. يتطلب Discourse دعم sub-domain للـ buckets. اذهب إلى:
<your Flexify.IO VM IP>/flexify-io/manage/admin/engines/configs/1والذي سيفتح صفحة تكوين مخفية! - حدد نطاق S3 الأساسي (قل إنه
s3.mydomain.com) في حقلEndpoint hostname، والذي يجب أن يكون فارغًا افتراضيًا. اضغط على Save لحفظ الإعداد. - أعد تشغيل Flexify.IO VM في بوابة Azure.
- في DNS الخاص بك، قم بربط
s3.mydomain.comو*.s3.mydomain.comبعنوان IP لـ Flexify.IO VM. - في Discourse، قم بتعيين التالي في صفحة المسؤول (نعم، لا حاجة للإعدادات في
app.yml):
use s3: true
s3 region: anything
s3 endpoint: https://s3.mydomain.com
s3 access key: myaccesskey
s3 secret assess key: mysecret key
s3 cdn url: https://<azure-blob-account>.blob.core.windows.net/<container>
s3 bucket: <virtual bucket>
s3 backup bucket: <backup bucket> (أي حاوية ستفي بالغرض، حيث لا يتطلب وصول قراءة عام وسيقوم Flexify.IO بعرضها تلقائيًا)
backup location: s3
لا يُنصح باستخدام نفس الـ bucket للإنتاج والتمهيد. إذا قمت بذلك على أي حال، فاتخذ إجراءات للتأكد من أن موقع التمهيد الخاص بك لا يحذف أصول الإنتاج (قم بتعيين s3 disable cleanup كحد أدنى، وراقب حذفه لنسخ الإنتاج الاحتياطية).
Wasabi
حاول @pfaffman استخدام Wasabi للنسخ الاحتياطية، لكنه بدا أنه يفشل بشكل متقطع وصامت، تاركًا النسخ الاحتياطية على القرص الصلب وملء القرص في النهاية. لم يكن لدى Wasabi ولا meta أي أدلة، لذا لا أنصح به، على الرغم من أن تجربتك قد تختلف. @pfaffman متأكد الآن إلى حد كبير من أن هذه المشكلة كانت بسبب النسخ الاحتياطية وإعادة التشغيل التلقائي المجدولة في نفس الوقت somehow؛ كان يُستخدم فقط للنسخ الاحتياطية، لكنه بدا يعمل بشكل جيد. إذا أراد شخص ما تجربته والإبلاغ هنا، فيجب أن يعمل، على الأقل للنسخ الاحتياطية.
Oracle Cloud
لا يدعم Oracle Cloud الوصول إلى الـ buckets بنمط المضيف الافتراضي ولن يعمل
Cloudflare R2
لتكوين Cloudflare R2، ستحتاج إلى تكوين الإعدادات ذات الصلة في لوحة تحكم Cloudflare تحت R2 Object Storage.
اعتمادًا على احتياجاتك (uploads أو نسخ احتياطية أو كليهما)، هذه هي الإعدادات ذات الصلة لإدراجها في ملف app.yml الخاص بك أو في Admin-All site settings ابحث عن S3:
DISCOURSE_ENABLE_S3_UPLOADS: true
DISCOURSE_S3_REGION: auto
DISCOURSE_S3_ENDPOINT: https://<your-account-id>.r2.cloudflarestorage.com
DISCOURSE_S3_ACCESS_KEY_ID: "xxx"
DISCOURSE_S3_SECRET_ACCESS_KEY: "xxx"
DISCOURSE_S3_UPLOAD_BUCKET: your-upload-bucket-name
DISCOURSE_S3_CDN_URL: https://uploads.yourdomain.com
# DISCOURSE_S3_USE_CDN_URL_FOR_ALL_UPLOADS: true
DISCOURSE_ENABLE_DIRECT_S3_UPLOADS: true
DISCOURSE_S3_USE_ACLS: false
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_BACKUP_BUCKET: your-backup-bucket-name
إذا كنت لا تريد تحرير ملف app.yml، يمكنك فعل ذلك في واجهة المستخدم الإدارية:
“Admin → All site settings” (ابحث عن S3):
- Enable S3 uploads =
true - Enable direct S3 uploads =
true - S3 access key ID =
"xxx" - S3 secret access key =
"xxx" - S3 region =
any - S3 upload bucket =
your upload bucket name - S3 endpoint =
https://<your-account-id>.r2.cloudflarestorage.com - S3 CDN URL =
https://uploads.yourdomain.com - S3 use ACLs =
false(تعطيل هذا!) - S3 backup bucket =
your backup bucket name - Backup location =
S3
ملاحظات:
-
أذونات رمز API: لأن Discourse لديه مجموعة واحدة فقط من حقول الاعتماد، يجب أن يكون رمز API الذي تنشئه في Cloudflare لديه صلاحية الوصول إلى كل من bucket الرفع وbucket النسخ الاحتياطي. عند إنشاء الرمز الخاص بك، اختر إما «تطبيق على جميع الـ buckets» أو استخدم «تطبيق على buckets محددة» وتأكد من تحديد كليهما. أيضًا، تأكد من تحديد
Object Read & Writeعند إنشاء مفتاح API (الافتراضي هوObject Read onlyفقط). -
عند نسخ عنوان URL للنقطة النهائية من Cloudflare، قد يضيف اسم الـ bucket إلى عنوان URL - يجب عليك حذف اسم الـ bucket من نهاية السلسلة في ملف
.ymlالخاص بك إذا تم لصقه. -
قم بإلغاء التعليق عن
# DISCOURSE_S3_USE_CDN_URL_FOR_ALL_UPLOADS: trueإذا كنت تريد استخدام bucket رفع R2 الخاص بك لجميع الـ uploads، بما في ذلك ملفاتPDFوZIP. (لاحظ أن هذا سيجعل جميع الملفات المرفوعة متاحة علنًا عبر رابط مباشر) -
إذا تم تمكين
DISCOURSE_ENABLE_DIRECT_S3_UPLOADS(true)، فيجب عليك تعطيلDISCOURSE_S3_USE_ACLS(false). هذا لأن Cloudflare R2 يستخدم أذونات على مستوى الـ bucket؛ يجب أن يكون bucket الرفع الخاص بك عامًا ويجب أن يكون bucket النسخ الاحتياطي خاصًا. لـ Cloudflare R2 uploads، لا تحتاج إلى تكوين مهام rake لقواعد CORS أو كتابة IAM json، لأنك ستقوم بتكوينه في لوحة تحكم Cloudflare عند إعداد أذونات الـ bucket الخاص بك. يمنح رمز «Object Read & Write» من Cloudflare تلقائيًا أذونات الرفع متعدد الأجزاء، ولصق قاعدة CORS التالية مباشرة في إعدادات bucket الرفع R2 في لوحة تحكم Cloudflare تحتCORS Policyيحل محل الحاجة إلى مهمة rake.
[
{
"AllowedOrigins": [
"https://forum.yourdomain.com"
],
"AllowedMethods": [
"GET",
"PUT",
"POST",
"DELETE",
"HEAD"
],
"AllowedHeaders": [
"*"
],
"ExposeHeaders": [
"ETag"
],
"MaxAgeSeconds": 3000
}
]
Contabo
حاول @tuxed الحصول على عمل Contabo Object Storage لـ S3 Compatible uploads. يبدو أنه عند الرفع، يضيف اسم المستودع كبادئة في عنوان URL ولم يتمكن من جعله يعمل.
الـ Uploads الآمنة
الـ Uploads الآمنة مدعومة فقط لـ AWS S3. إذا فشل rake uploads:migrate_to_s3 الخاص بك، فيجب عليك إدخال هذه الأوامر لحسابها أولاً ثم وضع علامة عليها على أنها غير آمنة تلك الـ uploads، بشرط أن تعرف أنها لا تحتاج إلى أن تكون آمنة، وفي هذه الحالة، ستحتاج إلى استخدام AWS S3.
./launcher enter app
rails c
Upload.where(secure: true).count
Upload.where(secure: true).update_all(secure:false)
لا يدعم Oracle Cloud الوصول إلى الـ buckets بنمط المضيف الافتراضي ولن يعمل ↩︎