إعداد BackBlaze S3 مع BunnyCDN

استغرق مني وقتًا طويلًا جدًا لفهم كيفية القيام بكل هذا، لذا أردت إعداد هذا الدليل لتسهيل الأمر على الآخرين. يُفترض أن خدمة الصور بهذه الطريقة تجعل موقعك الإلكتروني يعمل بسرعة أكبر. إعدادي لـ Discourse يجمع بين DigitalOcean droplet و BackBlaze B2 S3 و BunnyCDN والإصدار المجاني من Cloudflare.

اخترت هذه الخدمات بعد إجراء بعض الأبحاث حول الموثوقية والأسعار والمعايير. بدا أنها الخيارات الأفضل بالنسبة لي. تساعد Cloudflare في الأمان، لكنها قد تبطئ الموقع قليلاً حسب فهمي، لذا يجب عليك البحث في ذلك. لدى Backblaze شراكات مع كل من Cloudflare و Bunny تسمح بنقل البيانات مجانًا.

على الرغم من أن Cloudflare تُسمى CDN، إلا أنها لا تعمل مثل شبكات CDN العادية، وعلى الأرجح لن تعمل بمفردها لإعداد S3 مع Discourse. قد تحتاج إلى مزود CDN آخر، و Bunnycdn يعمل بشكل جيد معي. إذا نجح شخص ما في ذلك باستخدام Cloudflare فقط، فأخبرني كيف :stuck_out_tongue:

كيفية تعيين الرفع إلى S3:
أولاً، يجب عليك التسجيل في Backblaze، ثم إنشاء buckets، وإدخال التفاصيل في إعدادات Discourse:

ثم قم بالتسجيل في BunnyCDN واتبع هذا الدليل:

bunny.net - The Global Edge Platform that truly Hops (رابط إحالة، أحصل على رصيد بقيمة 20 دولارًا في فواتيري)

بعد إنشاء منطقة السحب (pull zone) الخاصة بك في BunnyCDN، تحتاج إلى الحصول على عنوان URL الصحيح لإدخاله في إعدادات لوحة تحكم Discourse الإدارية لـ “s3 cdn url”. اذهب إلى لوحة تحكم bunnycdn > مناطق السحب > إدارة مناطق السحب > انقر على منطقتك > انسخ عنوان URL بجانب “اسم المضيف”.

يجب أن يشبه عنوان URL شيئًا مثل: example.b-cdn.net، لكن يجب أن تتأكد من وضع https:// في المقدمة مثل هذا: https://example.b-cdn.net

احفظ التغييرات في منطقة إعدادات لوحة تحكم Discourse.

اضغط على ctrl+f5 مرتين في متصفحك على موقع Discourse.

قم بإجراء اختبار عن طريق رفع صورة في محرر النصوص في Discourse. افحص عنصر الصورة الاختبارية أو عرض مصدر الصورة للتأكد من نجاح العملية. يجب أن يبدو عنوان URL مختلفًا عن نطاقك العادي، ويجب أن يكون شيئًا مثل example.b-cdn.net / اسم الملف.

الآن، في كل مرة يرفع فيها شخص ما صورة، ستكون في bucket Backblaze ولن تشغل مساحة على DigitalOcean droplet :stuck_out_tongue:

نسخ احتياطي للرفع إلى S3
إذا كنت ترغب في إعداد نسخ احتياطية لـ Discourse لتذهب إلى bucket Backblaze، فعليك القيام بما يلي:

في الدليل الذي نشرته سابقًا في هذا الموضوع، انتبه إلى كيفية شرحه أنك تحتاج إلى bucketين منفصلين. bucket واحد عام، وهو bucket الرفع الخاص بك لرفع المستخدمين للصور على منتداك. والـ bucket الآخر خاص، وهو bucket النسخ الاحتياطي الخاص بك. من المهم عمل نسخ احتياطية آلية لـ Discourse في حالة حدوث أي خلل، ثم يمكنك تحميل النسخ الاحتياطي وإصلاحه.

في لوحة تحكم BunnyCDN، يجب إنشاء منطقة سحب (pull zone) ثانية. كانت منطقة السحب الأولى للرفع، وهذه المنطقة الجديدة ستكون للنسخ الاحتياطي.

لوحة تحكم bunnycdn > مناطق السحب > إضافة منطقة سحب

اتبع نفس الدليل الذي ربطت به سابقًا، “كيفية تسريع تسليم ملفات Backblaze B2 باستخدام BunnyCDN”، ولكن هذه المرة ستربط منطقة السحب الجديدة بـ bucket النسخ الاحتياطي بدلاً من bucket الرفع.

أوصي باستخدام “الطبقة عالية الحجم 5$/TB” في صفحة إنشاء منطقة السحب في BunnyCDN، أعتقد أن النسخ الاحتياطي لا يحتاج إلى الطبقة الأغلى/الأسرع “الطبقة القياسية 10$/TB” التي استخدمتها لـ bucket الرفع.

اضبط إعدادات النسخ الاحتياطي في منطقة إعدادات لوحة تحكم Discourse. يجب أن تكون “موقع النسخ الاحتياطي” مضبوطة على S3، ويجب أن يشير “نقطة نهاية S3” إلى ما لديك في Backblaze، مثل هذا:
s3.us-west-002.backblazeb2.com

اضغط على CTRL+F5 مرتين على موقعك الإلكتروني لمسح الذاكرة المؤقتة.

ابدأ نسخة احتياطية، ودعها تكتمل. ثم انتظر 5 دقائق وتحقق من مجلد النسخ الاحتياطي في Backblaze، يجب أن ترى النسخة الاحتياطية الجديدة هناك.

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

إعداد Cloudflare CDN
هذه الخطوة اختيارية لأن Backblaze حصلت على شراكة تجعل نقل البيانات إلى Bunny مجانيًا أيضًا، ولكن للأمان الإضافي والميزات الأخرى، يمكنك جعل البيانات تمر عبر Cloudflare أولاً، ثم تجعل Bunny تسحب البيانات من حيث تتركها Cloudflare.

https://help.backblaze.com/hc/en-us/articles/217666928-Using-Backblaze-B2-with-the-Cloudflare-CDN

8 إعجابات

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

بالمناسبة، النسخ الاحتياطي لا يعمل أيضًا. على الأقل ليس بالنسبة لي، وقد قمت بنفس الشيء تمامًا كما فعل بيل.

5 إعجابات

يمكنك نقل الملفات القديمة باستخدام مهمة rake.

إعجاب واحد (1)

إذا كنت تقصد هذا الأمر، فقد جربته بالفعل ولم يقم برفع الأصول القديمة:

sudo -E -u discourse bundle exec rake s3:upload_assets

لقد قمت بإعادة تحضير منشوراتي أيضًا، لكن دون جدوى.

المهمة هي:

cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_to_s3
cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_from_s3

هل هذا يعمل معك @AntiMetaman؟
سأضيفه إلى الدليل إذا كان كذلك.

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

الاحتياطيات تعمل بشكل جيد مع Backblaze… ما المشكلة التي تواجهها؟

إعجاب واحد (1)

نسخي الاحتياطية تعمل بشكل جيد مع هذه الطريقة أيضًا. يجب أن يكون لديك شيء مضبوط بشكل خاطئ. سأقوم بتحديث الدليل الآن حول كيفية إعداد النسخ الاحتياطية. @AntiMetaman

أعتذر، لم أفهم ما تقصده؟ كيف يمكن أن يكون لدي شيء يعمل بشكل صحيح بينما تقترح أن لدي شيئًا ما مضبوطًا بشكل خاطئ؟

هو يتحدث إليّ @itsbhanusharma. النسخ الاحتياطية الخاصة بي لا تعمل. إعداداتي مطابقة لإعدادات بيل. لم أستخدم منطقة سحب منفصلة لسلة النسخ الاحتياطي، لذا ربما يكون هذا هو السبب. لدي فقط اسم سلة النسخ الاحتياطي في متغيرات البيئة.

سأجرب اقتراح بانو لنقل أصول S3 لاحقًا.

لقد أنشأت منطقتي سحب (pull zones)، واحدة لكل من دلو التحميل (upload) ودلو النسخ الاحتياطي (backup). بدأت عملية نسخ احتياطي من لوحة التحكم الخاصة بي، لكنها فشلت. الشيء الوحيد الذي يعرفه Discourse هو اسم دلو النسخ الاحتياطي.

DISCOURSE_S3_CDN_URL: https://duelistsunite.b-cdn.net
DISCOURSE_S3_BUCKET: s3omega
DISCOURSE_S3_BACKUP_BUCKET: s3omegabackup
DISCOURSE_BACKUP_LOCATION: s3

لا أعرف ما الذي أفتقده هنا. هل يوجد متغير S3_CDN_BACKUP_URL؟ نظرًا لأن الرابط مختلف بالنسبة للنسخ الاحتياطي.

@itsbhanusharma أيضًا، جربت طريقتك، لكن migrate_from_S3 غير معرف.

أيضًا، لم أكن متأكدًا مما إذا كنت تقصد migrate_to_s3، لذا جربته أيضًا، لكنه كان غير معرف هو الآخر.

عذرًا عن الالتباس، كنت أقصد rake uploads:migrate_to_s3

إعجاب واحد (1)

يبدو أنه يوقف عملية Rake لأنه يضيف amazonaws.com إلى الرابط، بينما هذا غير صحيح. هذه هي المشكلة. إذا استخدمت خدمة S3 ليست تابعة لأمازون، فلن تعمل عملية Rake لأنها مبرمجة مسبقًا لتغيير الرابط.

إعجاب واحد (1)

هل يمكنك التأكيد أو النفي بشأن ما إذا كنت قد أضفت الإعدادات إلى قسم env في ملف app.yml، أم أضفتها إلى صفحة الإعدادات في لوحة الإدارة؟

أنا أستخدم S3 أيضًا للنسخ الاحتياطي، لذا فإن عمليات الرفع القديمة والجديدة تعمل مع S3. أستخدم Cloudflare لـ SSL وحماية DDoS، وBunnyCDN لمناطق سحب الرفع والنسخ الاحتياطي، وBackBlaze لتخزين S3. الآن كل شيء يعمل بشكل ممتاز!

ملاحظة: من الأفضل تعريف متغيرات البيئة في ملف app.yml كما هو موضح هنا: Configure an S3 compatible object storage provider for uploads

ثم قم بإعادة البناء بحيث يتم تعريف إعدادات S3 عالميًا وليس فقط في لوحة الإدارة. بهذه الطريقة، عند نقل الملفات القديمة إلى S3، يمكنك ذلك بسهولة عبر 3 أوامر:

./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake

3 إعجابات

لست متأكدًا مما أفتقده هنا. هل يوجد متغير S3_CDN_BACKUP_URL؟ نظرًا لأن الرابط مختلف لنسخة الاحتياطي.

هل تم حل هذا السؤال؟ أيضًا، ليس واضحًا بالنسبة لي أين يجب وضع رابط منطقة السحب (pull zone) التي تشير إلى سلة الاحتياطي.

تعديل: هل فهمي صحيح بأن شبكة CDN مطلوبة فقط لسلة التحميلات؟ تشير الدليل حول هذا الموضوع إلى أنه يجب إنشاء منطقة سحب CDN ثانية لسلة الاحتياطي. إذا كان ذلك غير صحيح، فربما يجب تحديث الدليل @Bill

يبدو أنها تحتاج فقط إلى اسم خزانة النسخ الاحتياطي. ومن خلال الاسم، يمكنها الحصول على عنوان URL الخاص بـ S3 للنسخ الاحتياطي، حيث سيكون مطابقًا لعنوان URL الخاص بالرفع ما عدا الاختلاف في الاسم. وهذا هو السبب في عدم الحاجة إلى تعريف عنوان URL منفصل لـ S3 للنسخ الاحتياطي. وهذا بالطبع بافتراض أن كلتا الخزانين موجودتان في نفس خدمة S3.

ولكن إذا كانت سلة النسخ الاحتياطي خاصة، فكيف يمكن لشبكة توصيل المحتوى (CDN) الوصول إليها؟ أنا جديد في مجال شبكات توصيل المحتوى وقد أغفلت شيئًا، لكنني أشك في أن Discourse لا تستخدم شبكة توصيل المحتوى على الإطلاق لعمل النسخ الاحتياطي.

نعم، لقد فعلوا ذلك. ذهبت إلى خزانة النسخ الاحتياطي الخاصة بي ورأيت أن النسخة الاحتياطية قد تم رفعها هناك. هي خاصة، لكن discourse يمكنها الوصول إليها. يمكنك إعداد الأذونات إذا كان الرابط موجودًا. يمكنك أيضًا جعلها بحيث لا يمكن الوصول إلى الخزانة إلا من موقعك أو من أي مصدر عبر HTTPS.

هل يمكنك التحقق مما إذا كان النسخ الاحتياطي قد مر عبر شبكة توصيل المحتوى (CDN)، أم أنه تم مباشرةً من تثبيت Discourse الخاص بك إلى BackBlaze B2؟