خدمة تصدير موقع ثابت لـ discourse أثناء ترقية discourse

أدير حاليًا منتديين منفصلين على منصة Discourse، وكلاهما مستضاف على مثيلات Scaleway خاصة بهما، ويتم الترقية عليهما كالتالي:

# تحديث إعدادات Docker لـ Discourse
cd /var/discourse
git pull origin master

# إعادة بناء Discourse
/var/discourse/launcher rebuild app

هذا الإجراء يُوقف المنتدى لمدة تتراوح بين 5 إلى 15 دقيقة في كل مرة.

أحد الموقعين خلف وكيل Cloudflare، لذا يُقدّم ذاكرة التخزين المؤقت غير المتصل به دون أي مشاكل. لكن الموقع الآخر لا يستخدم Cloudflare.

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

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

إذا كان نظام أسماء النطاقات (DNS) مُدارًا بواسطة Cloudflare (حتى لو لم يستخدم الوكيل)، فعادةً ما يتم التحديث خلال ثوانٍ. أثناء التحديث، يمكنك توجيه النطاق إلى خادم آخر (مثل صفحة صيانة على Netlify أو Vercel أو Firebase أو Surge وما إلى ذلك، حيث تشير جميع المسارات إلى ملف index.html).

لم أجرب ذلك بعد، لكن قد يكون من الممكن تقديم خادم خلفي آخر مؤقتًا باستخدام resolveOverride في عامل Cloudflare (دالة “خالية من الخوادم”).

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

نعم، سواء كان الأمر يتعلق بتغيير في DNS أو تشغيل حاوية Docker مؤقتة لـ nginx تستمع على نفس المنفذ وتقدم محتوى، فهذا الجزء سهل.

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

عند البحث في المنتديات حول التصدير الثابت، لا يبدو أن هذا الأمر متاح بالفعل. لقد قمت بالفعل بإنشاء عميل لـ Discourse API لمشروع سابق، لذا يمكنني برمجة شيء لا يحاكي التصميم، أعتقد ذلك.

عامل آخر في تقديم تصدير ثابت لهذا الغرض هو التأكد من عدم تخزين الصفحات الثابتة مؤقتًا في المتصفحات ولا في محركات البحث.


أتساءل عما إذا كان هذا الرابط How do I export the complete forum as static html pages? - #3 by wangerin سيكون كافيًا، ومع ذلك يبدو أنه سيظل يتطلب تعطيل العناصر التفاعلية وإدراج لافتة.

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

3 إعجابات

نعم، أعتقد ذلك. هل يمكنك توجيهي إلى خيار (أو خيارات) الحاويتين الموصى بهما؟

(Move from standalone container to separate web and data containers)، ولكن قد تحتاج إلى السحب) ابحث عن آخرين

كما اعرف المزيد حول SKIP_POST_DEPLOYMENT_MIGRATIONS=1. باختصار، تقوم بتعيين ذلك عند إعادة بناء حاوية bed لمنعها من إتلاف قاعدة البيانات للحاوية الحالية، ثم قم بالهجرة مرة أخرى بدون ذلك بعد تشغيل الحاوية الجديدة.

إعجابَين (2)