يشرح هذا الدليل كيفية تمكين إعداد مخفي في Discourse لتضمين عمليات تحميل Amazon S3 (Simple Storage Service) في النسخ الاحتياطية الخاصة بك.
لدى Discourse القدرة على تخزين تحميلات الوسائط على Amazon S3 لتحقيق قابلية التوسع والموثوقية. ومع ذلك، لا يتم تضمين هذه التحميلات في النسخ الاحتياطية افتراضيًا.
يغطي هذا الدليل تمكين إعداد مخفي لتضمين تحميلات S3 في النسخ الاحتياطية، مع خيارات لتكوينها عبر وحدة تحكم Rails أو ملف app.yml.
استخدام وحدة تحكم Rails
لتمكين تضمين تحميلات S3 في النسخ الاحتياطية عبر وحدة تحكم Rails، يمكنك اتباع هذه الخطوات:
الوصول إلى خادم Discourse الخاص بك عبر SSH.
الدخول إلى حاوية Docker الخاصة بـ Discourse عن طريق تشغيل:
cd /var/discourse
./launcher enter app
تشغيل وحدة تحكم Rails:
rails c
تمكين الإعداد عن طريق تنفيذ:
SiteSetting.include_s3_uploads_in_backups = true
الخروج من وحدة التحكم والحاوية عن طريق كتابة:
exit
exit
يسري هذا التغيير على الفور. لا يلزم اتخاذ أي إجراءات أخرى.
تعديل ملف app.yml
يمكنك أيضًا إجراء هذا التغيير عن طريق تعديل ملف app.yml في قسم env:.
الوصول إلى دليل حاوية تطبيق Discourse:
cd /var/discourse
افتح ملف app.yml الموجود في containers:
nano containers/app.yml
ضمن قسم env:, أضف السطر:
DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true
احفظ الملف واخرج من المحرر.
طبق التغييرات عن طريق إعادة بناء التطبيق:
./launcher rebuild app
لكي يسري هذا التغيير، تحتاج إلى تشغيل الأمر ./launcher rebuild app لتطبيق الإعداد.
أنا متأكد من أنك بحاجة إلى تدمير وإعادة تشغيل لتغيير متغيرات البيئة المطبقة على الحاوية.
بالطبع، إذا قاموا بالترقيات باستخدام docker manager، فستفقد هذه الترقيات عند تدمير الحاوية، وهذا هو السبب في أن إعادة البناء هي التوصية الأكثر أمانًا. ربما من الأفضل التوصية بإعادة البناء لأنها الأكثر فعالية.
حسنًا. لم أكن أعرف.
ولكن، ما هو الفرق بين مجلد “Local Uploads” ومجلد “Files Stored in S3 ‘Uploads’”؟
أيضًا، على الرغم من أنني لم أغير الإعداد في web_only أو في rails console كما قيل أعلاه حتى الآن، ولكني اخترت فقط الإعداد الذي قيل عنه هنا.
ولكن لا يزال عندما قمت بتشغيل النسخ الاحتياطي، قبل 10 دقائق فقط، بدا الأمر وكأنه قام بتنزيل آلاف الملفات (والتي أفترض أنها يمكن أن تكون فقط على مخزن S3 الخاص بي، وكلمة “Download” نفسها تعني أنه يقوم بتنزيلها من مجلد S3 البعيد).
كما أنه يظهر أنه فشل في تنزيل العديد، العديد من الملفات. لذلك افترضت أنه إذا كانت هذه الملفات موجودة على الخادم السحابي المحلي، فلماذا سيفشل في تضمين تلك الملفات في النسخ الاحتياطي؟ انظر هذه اللقطة:
إذا قمت بتكوين تكوين موفر تخزين كائنات متوافق مع S3 للتحميلات ونقلت تحميلاتك المحلية إلى S3، فإن تحميلاتك موجودة هناك. لا يتم نسخها احتياطيًا لأنه من المفترض أن يتم نسخ S3 احتياطيًا وأن تنزيلها مكلف وغير ضروري عادةً.
إذا كنت بحاجة إلى إخراجها من S3 (مثل إذا كنت مستضافًا على discourse.org وتنتقل إلى استضافة أخرى) فستحتاج إلى نسخة احتياطية تتضمن الملفات المخزنة على S3.
لماذا تريد تنزيل ملفاتك من S3؟
نعم، يبدو أنه يفشل في تنزيل الملفات من S3. تخميني هو أنه لم يقم بتنزيل أي منها، على الرغم من أنه من المحتمل أن يكون قرصك ممتلئًا، ربما (أتوقع خطأ امتلاء القرص، ولكن ربما لا؟).
نظرًا لأن موقعي صغير جدًا، فإن دفع بضعة دولارات، والتي تزداد كل شهر مع تحديثات صغيرة، كل شهر لتخزين AWS S3 يثبت أنه غير عملي بالنسبة لي. سأقوم بنقل “التحميلات” (وربما موقع مجلد “النسخ الاحتياطي” أيضًا) إلى مزود آخر مثل Google One Drive أو iDrive أو Hetzner وما إلى ذلك من البدائل الرخيصة.
أجد الآن أنه حتى أنواع التخزين المختلفة من AWS (من الأكثر نشاطًا إلى نوع التخزين الأرشيفي)، إذا كنت قد اخترتها بحكمة في البداية، لكانت تكلفني نصف الكمية/عدد الملفات نفسه.
عندما اخترت تخزين وسائطي “uploads” في حاوية S3 الخاصة بـ AWS منذ سنوات، في ذلك الوقت (على حد علمي) قمت أيضًا بنقل جميع الوسائط الموجودة التي حملها المستخدمون إلى S3.
علاوة على ذلك، لقد تحققت الآن في مجلد /var/discourse/shared/web_only/uploads/default/optimized/1X الخاص بي، وهو يحتوي فقط على 63 ملف PNG ومجلد /var/discourse/shared/web_only/uploads/default/original/1X يحتوي على 3 ملفات فقط. (باستثناء 1x، لا توجد مجلدات مشابهة أخرى في مجلد ‘uploads أو default’).
أيضًا، لم أقم بتغيير أي خيار في وحدة تحكم rails أو في ملف Yml حتى الآن لتضمين تحميلات S3 في النسخ الاحتياطي الخاصة بي. لذا، لماذا يُظهر أنه قام بتنزيل العديد من “تحميلات الوسائط” من S3!!!
وفشل في تنزيل العديد من الملفات المحملة؟ لقطة شاشة هنا.
علاوة على ذلك، يبلغ حجم مجلد التحميلات الخاص بي على S3 حوالي 3 جيجابايت (32 ألف ملف)، بينما أظهرت سجلات النسخ الاحتياطي أنه قام بتنزيل حوالي 3.2 ألف فقط (10٪ من الإجمالي).
مرتبك جدا.
هل هناك أمر rails آخر للتأكد من عدم تفعيل هذا الخيار منذ سنوات، عندما انتقلت إلى AWS S3؟