يغطي هذا الموضوع كيفية تكوين بعض مزودي تخزين الكائنات المتوافقين مع 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 هو CDN يشير إلى اسم المضيف الخاص بـ Discourse ويخزن الطلبات مؤقتاً. سيتم استخدامه بشكل أساسي للأصول القابلة للسحب: CSS وأصول السمات الأخرى.
DISCOURSE_S3_CDN_URL هو CDN يشير إلى دلو تخزين الكائنات الخاص بك ويخزن الطلبات مؤقتاً. سيتم استخدامه بشكل أساسي للأصول القابلة للدفع: JS، الصور، وتحميلات المستخدمين.
نوصي بأن يكونا مختلفين وأن يقوم المشرفون بتعيين كلاهما.
عدم استخدام CDN (أو إدخال عنوان URL الخاص بالدلو كعنوان URL لـ CDN) من المرجح أن يسبب مشاكل ولا يتم دعمه.
في الأمثلة التالية، https://falcoland-files-cdn.falco.dev هو CDN مُكوّن لخدمة الملفات الموجودة تحت الدلو. تم تعيين اسم الدلو إلى falcoland-files في أمثلتي.
يُنصح بتكوين هذه الإعدادات في متغيرات البيئة في ملف app.yml الخاص بك لأن هذا هو ما يفعله CDCK في بنيتهم التحتية، وبالتالي فهو مُختبر جيداً. أيضاً، تحدث مهمة رفع الأصول بعد تجميع الأصول، وهو ما يحدث أثناء إعادة البناء. إذا كنت تريد تشغيل Discourse يعمل بشكل صحيح مع تخزين الكائنات منذ البداية، فأنت بحاجة إلى تعيين متغيرات البيئة بحيث يتم رفع الأصول قبل بدء الموقع.
اختر مزودك من القائمة أدناه وأضف هذه الإعدادات إلى قسم env في ملف app.yml الخاص بك، مع تعديل القيم وفقاً لذلك:
AWS S3
ما ندعمه رسمياً ونستخدمه داخلياً. عرض CDN الخاص بهم Cloudfront يعمل أيضاً كواجهة لملفات الدلو. انظر 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 جيد ويعمل مباشرة. من الجيد تمكين Restrict File Listing. المشكلة الوحيدة هي أن عرض CDN الخاص بهم معطوب بشكل سيء، لذا تحتاج إلى استخدام 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 جزء. بالنسبة للتركيبات الأكبر، سيؤدي هذا إلى فشل النسخ الاحتياطي في Discourse وقد يحتاج الرفع غير المكتمل إلى حذفه يدوياً قبل إجراء محاولات أخرى. بالنسبة للتركيبات الصغيرة، هذه ليست مشكلة. يبدو أن Scaleway منفتح جداً على التعليقات، لذا إذا كنت ترغب في تغيير هذا الحد، يجب أن تتواصل معهم.
لاحظ أنه بالنسبة لمعلمة DISCOURSE_S3_ENDPOINT، يستخدم Discourse نقطة نهاية المنطقة بأكملها: https://s3.{region}.scw.cloud. تأتي “نقطة نهاية الدلو” الموجودة في لوحة تحكم 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. يجب عليك تغيير قواعد دورة الحياة لدلو الخاص بك حتى يعمل تنظيف اليتامى.
مثال على التكوين:
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، قد تواجه حدود 2500 معاملة فورية مجانية يومياً من الفئة C. ستحتاج إلى إضافة طريقة دفع لإزالة الحدود.
MinIO Storage Server
هناك بعض التحذيرات والمتطلبات التي يجب التأكد من استيفاؤها قبل أن تتمكن من استخدام خادم تخزين MinIO كبديل لـ S3:
- لديك خادم MinIO مُكوّن بالكامل
- تم تمكين دعم النطاق في تكوين MinIO، لعناوين URL الدلو المدفوعة بالنطاق. هذا هو مطلب التكوين الإلزامي لـ MinIO و Discourse، حيث لا يزال MinIO يدعم أنماط “المسار” القديمة لـ S3 والتي لم تعد مدعومة في Discourse.
- تم تعيين تكوين DNS بشكل صحيح لـ MinIO بحيث تحل أسماء النطاقات الفرعية للدلو بشكل صحيح إلى خادم MinIO، وتم تكوين خادم MinIO مع نطاق أساسي (في هذه الحالة،
minio.example.com) - يوجد الدلو
discourse-dataعلى خادم MinIO ويتم تعيين سياسة “عام” عليه - يشير عنوان URL الخاص بـ S3 CDN الخاص بك إلى CDN مُكوّن بشكل صحيح يشير إلى الدلو ويخزن الطلبات مؤقتاً، كما ورد سابقاً في هذا المستند.
- يتم تكوين CDNs الخاصة بك لاستخدام رأس "Host
Oracle Cloud تفتقر إلى دعم الوصول إلى الدلاء بأسلوب المضيف الافتراضي و لن تعمل ↩︎