كيفية عمل نسخة احتياطية من Discourse إلى S3 | كيفية النسخ الاحتياطي لـ Discourse إلى S3

يعد Discourse و S3 صديقين حميمين، وإذا كنت على دراية بـ S3، فسيكون ذلك مفيدًا جدًا لك.

مساحة الاستضافة الافتراضية للعديد من الأشخاص محدودة ومواردها محدودة.

يعد استخدام S3 للنسخ الاحتياطي طريقة أفضل لاستخدام المساحة.

يمكنك اتباع الخطوات التالية للتكوين:

ضبط تكرار النسخ الاحتياطي

انتقل إلى admin > backup، ثم اضبط backup_frequency على 1. هذا المعامل يعني تكرار النسخ الاحتياطي، والقيمة الافتراضية هي 7.
1 يعني النسخ الاحتياطي مرة واحدة يوميًا.
7 يعني النسخ الاحتياطي مرة كل 7 أيام.

بالنسبة لزيارات المواقع العامة، إذا كنت تستخدم S3 لتخزين النسخ الاحتياطية، فمن الأفضل إجراء نسخ احتياطي يومي.

ضبط Bucket والمسار للنسخ الاحتياطي.

يمكن أن يكون هذا Bucket خاصًا وغير عام. ما يجب ملاحظته هنا هو أنه إذا كنت تستخدم S3 أيضًا لتخزين الصور والمرفقات، فيجب تحديد Bucket هذا على أنه public عند التكوين.

لتسهيل الأمر، يمكنك إنشاء Bucket آخر هنا، وحاول ألا تخلط بينه وبين تخزين المرفقات والصور.

نقترح عليك تعيين مسار مجلد إضافي هنا، لأن Discourse سينشئ مجلدات متعددة مطلوبة ضمن هذا المجلد.

لتسهيل تخزينك وتوضيحه.

ضبط s3_access_key_id و s3_secret_access_key

في الخطوة التالية، تحتاج إلى ضبط: s3_access_key_id و s3_secret_access_key و s3_region لبيانات النسخ الاحتياطي الخاصة بك. هذه المعاملات الثلاثة مهمة جدًا، ويجب عدم اختيار region بشكل خاطئ. إذا فشل تحميل النسخ الاحتياطي الخاص بك، ففي معظم الحالات، قد تكون المشكلة متعلقة بالأذونات.

للحصول على طريقة التكوين المحددة، يرجى الرجوع إلى: Setting up file and image uploads to S3 - sysadmin - Discourse Meta المحتوى في المقالة.

تجدر الإشارة إلى أنه يجب عليك منح key ID الخاص بك أذونات كافية، وإلا فلن تتمكن من التحميل.

ضبط النسخ الاحتياطي للتخزين على S3

اضبط طريقة النسخ الاحتياطي للتخزين على S3.

تحتاج إلى تغيير التخزين المحلي إلى تخزين S3 في خيار هذا المعامل.

اختبار النسخ الاحتياطي

عندما يتم تكوين كل شيء، يمكنك إجراء اختبار للنسخ الاحتياطي.

انقر فوق زر النسخ الاحتياطي للاختبار. في قائمة النسخ الاحتياطي، انقر فوق Backup مباشرة.


في الواجهة المنبثقة، سيُسأل عما إذا كنت تريد تضمين الصور والمرفقات التي تم تحميلها.

بشكل عام، سيتم اختيار “نعم” هنا. بعد ذلك، ستنتقل الواجهة إلى واجهة السجل، وسيتم عرض معلومات النسخ الاحتياطي من خلال السجل. يمكنك التأكد من اكتمال النسخ الاحتياطي من خلال ملاحظة ما إذا كان السجل يعرض “Finished”.

والأهم من ذلك، يمكنك تسجيل الدخول إلى حساب S3 الخاص بك للتأكد من وجود أحدث نسخة احتياطية.


تحتاج إلى الانتباه إلى الوقت والحجم واسم الملف للتأكيد.


من خلال تكوين النسخ الاحتياطي لـ S3، يمكننا توسيع مساحة تخزين Discourse، والحصول على مساحة نسخ احتياطي وتخزين غير محدودة تقريبًا. بالنسبة لتشغيل الموقع، يعد النسخ الاحتياطي التلقائي والتحميل وظائف عملية للغاية.

في الوقت نفسه، لديك أيضًا نسخ احتياطية متعددة للتخزين، مما يسهل عليك الاستعادة إلى نقاط نسخ احتياطي مختلفة عند استعادة الموقع.

نظرًا لأنك فصلت ملفات النسخ الاحتياطي عن Docker، فهذا مفيد جدًا للنسخ الاحتياطي اليومي الخاص بك. يمكن أن يقلل بشكل كبير من استخدام مساحة التخزين.

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

يرجى الرجوع إلى النص الأصلي iSharkFly - 飞鲨 لمعرفة المزيد من المحتوى.

إعجابَين (2)

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

لم ألقِ نظرة فاحصة على محتوى النسخ الاحتياطي لـ Discourse.

بعد إلقاء نظرة على النسخ الاحتياطي الخاص بنا، أدركت ما يلي:

إذا كانت مرفقاتك تستخدم التخزين السحابي لـ AWS، فعند إجراء النسخ الاحتياطي، حتى لو اخترت “تضمين المرفقات في النسخ الاحتياطي”،


لن يتم تضمين المرفقات التي تم تحميلها إلى AWS في ملف النسخ الاحتياطي الخاص بك.

المرفقات الموجودة بداخله مخزنة على جهاز الكمبيوتر المحلي الخاص بك، ولكنها غير موجودة على AWS.

يمكنك معرفة ذلك من حجم النسخ الاحتياطي لموقعنا، إذا تم تضمين المرفقات، فلن يكون حجم النسخ الاحتياطي سوى 80 ميجابايت.


يشير هذا إلى أن النسخ الاحتياطي يحتوي فقط على قاعدة البيانات والمرفقات المحلية.

عند فتح ملف التنزيل هذا، ستجد مجلدين فقط: أحدهما هو dump، وهو ملف تفريغ قاعدة بيانات PGSQL.


المجلد الآخر هو مجلد التحميل، وهذا المجلد يحتوي فقط على المرفقات التي قمت بتحميلها محليًا، ولم يتم تخزينها على AWS. بالنسبة لنا، هذا المجلد صغير جدًا، ولا يحتوي على سوى عدد قليل من الملفات.

هذا لأنه بعد فترة وجيزة من بدء تشغيل المجتمع، قمنا بتحميل جميع المرفقات إلى AWS.


يعرض الرسم البياني أعلاه محتويات ملف تفريغ PGSQL، ويمكنك رؤية إصدار PGSQL الذي يعمل به حاوية قاعدة بيانات Discourse الحالية من ملف التفريغ.

إذا كنت ترغب في عرض قاعدة البيانات محليًا، فيمكن استيراد ملف التفريغ هذا مباشرة إلى حاوية محلية.

مشكلة استعادة AWS

إذا كنت تستخدم مرفقات AWS ولكنك لا تستخدم شبكة توصيل المحتوى (CDN) الخاصة بـ AWS، فإن المحتوى في النص الأساسي سيكون المسار المطلق على AWS الخاص بك.

في ملفات MD للموضوع، يتم عرضها على النحو التالي:


ولكن، بعد نشر المحتوى، يتم استبدال رمز HTML الفعلي بواسطة Discourse بعنوان CDN المطلق الخاص بك.


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

استثناء

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

نظرًا لأننا قمنا بتبديل النطاق مرة واحدة في وقت مبكر، ولكن محتويات المرفقات كانت لا تزال موجودة، إلا أنه لم يكن من الممكن ربط النص الأساسي، ولم يكن من الممكن ربطها حتى بعد إعادة بناء HTML.

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

طالما أنك لا تقوم بتبديل النطاقات بشكل عشوائي، فعادةً لا تكون هذه مشكلة.

لمزيد من المناقشة التفصيلية، يرجى زيارة: Discourse 备份和恢复中有关附件的问题 - Discourse - iSharkFly

أود أن أسأل عن مشكلة أخرى، لم أستخدم Amazon S3 ولكنني استخدمت Cloudflare R2، وقد نجحت في النسخ الاحتياطي إلى R2 ويمكنني رؤية الملفات في Cloudflare، ولكن ملفات النسخ الاحتياطي لا تظهر في لوحة تحكم Discourse. هل هناك مشكلة في مكان ما؟


قم بعمل نسخة احتياطية يدوية أخرى، وتحقق من سجلات النسخ الاحتياطي.

هنا على الأرجح بسبب وجود خطأ في استدعاء Discourse لواجهة برمجة التطبيقات (API) الخاصة بجزء عرض حالة النسخ الاحتياطي بعد تخزينه في R2.

تحقق مما إذا كان محتوى السجل كاملاً.

هذه هي اللقطة التي تم إنشاؤها للتو، ويبدو أنها تظهر أن كل شيء طبيعي. بالإضافة إلى ذلك، لقد أنشأت واجهة برمجة تطبيقات بأعلى امتياز في R2.

لقد قمت بتشغيل عملية النسخ الاحتياطي الخاصة بي، ويبدو أن سجلاتنا متطابقة.

[2024-07-26 11:56:00] pg_dump: executing SEQUENCE SET category_custom_fields_id_seq
[2024-07-26 11:56:00] Finalizing backup...
[2024-07-26 11:56:00] Creating archive: isharkfly-2024-07-26-115540-v20240723030506.tar.gz
[2024-07-26 11:56:00] Making sure archive does not already exist...
[2024-07-26 11:56:00] Creating empty archive...
[2024-07-26 11:56:00] Archiving data dump...
[2024-07-26 11:56:00] Archiving uploads...
[2024-07-26 11:56:00] Skipping uploads stored on S3.
[2024-07-26 11:56:00] Removing tmp '/var/www/discourse/tmp/backups/default/2024-07-26-115540' directory...
[2024-07-26 11:56:00] Gzipping archive, this may take a while...
[2024-07-26 11:56:05] Uploading archive...
[2024-07-26 11:56:09] Executing the after_create_hook for the backup...
[2024-07-26 11:56:09] Deleting old backups...
[2024-07-26 11:56:10] Cleaning stuff up...
[2024-07-26 11:56:10] Removing archive from local storage...
[2024-07-26 11:56:10] Removing '.tar' leftovers...
[2024-07-26 11:56:10] Marking backup as finished...
[2024-07-26 11:56:10] Refreshing disk stats...
[2024-07-26 11:56:10] Notifying 'honeymoose' of the end of the backup...
[2024-07-26 11:56:18] Finished!

الخطوة التالية هي التحقق مما إذا كانت المشكلة تتعلق بسجلات جدول النسخ الاحتياطي لقاعدة البيانات.

هل تستخدم R2 أيضًا؟ هل يمكن عرضه بنجاح؟

أنا أستخدم AWS.

يجب أن يكون هذا الجزء سهل الإعداد.