أدير حاليًا منتديين منفصلين على منصة Discourse، وكلاهما مستضاف على مثيلات Scaleway خاصة بهما، ويتم الترقية عليهما كالتالي:
# تحديث إعدادات Docker لـ Discourse
cd /var/discourse
git pull origin master
# إعادة بناء Discourse
/var/discourse/launcher rebuild app
هذا الإجراء يُوقف المنتدى لمدة تتراوح بين 5 إلى 15 دقيقة في كل مرة.
أحد الموقعين خلف وكيل Cloudflare، لذا يُقدّم ذاكرة التخزين المؤقت غير المتصل به دون أي مشاكل. لكن الموقع الآخر لا يستخدم Cloudflare.
أتساءل ما إذا كان بإمكان Discourse تصدير موقع ثابت يحتوي فقط على المواضيع العامة للمستخدم المجهول مع تعطيل أزرار التفاعل وإضافة لافتة في الأعلى تقول: “هذا الموقع في وضع القراءة فقط حاليًا لأنه يخضع للترقيات.”، ثم تقديمه أثناء ترقية المنتدى، وبعد عودة المنتدى إلى الخدمة، يتم حذف ذاكرة التخزين المؤقت الثابتة.
إذا كان نظام أسماء النطاقات (DNS) مُدارًا بواسطة Cloudflare (حتى لو لم يستخدم الوكيل)، فعادةً ما يتم التحديث خلال ثوانٍ. أثناء التحديث، يمكنك توجيه النطاق إلى خادم آخر (مثل صفحة صيانة على Netlify أو Vercel أو Firebase أو Surge وما إلى ذلك، حيث تشير جميع المسارات إلى ملف index.html).
لم أجرب ذلك بعد، لكن قد يكون من الممكن تقديم خادم خلفي آخر مؤقتًا باستخدام resolveOverride في عامل Cloudflare (دالة “خالية من الخوادم”).
نعم، سواء كان الأمر يتعلق بتغيير في DNS أو تشغيل حاوية Docker مؤقتة لـ nginx تستمع على نفس المنفذ وتقدم محتوى، فهذا الجزء سهل.
في الوقت الحالي، أصعب جزء في هذا الأمر هو إنشاء تصدير ثابت مع تعطيل التفاعلات وإضافة لافتة، مع احترام صفحات المواضيع، والمنشورات، والفئات، والفهرس (يمكن أن يكون البحث معطلاً). ثم دمج هذا الاستبدال بسلاسة في عملية الترقية، وهذا بحد ذاته أمر سهل.
عند البحث في المنتديات حول التصدير الثابت، لا يبدو أن هذا الأمر متاح بالفعل. لقد قمت بالفعل بإنشاء عميل لـ Discourse API لمشروع سابق، لذا يمكنني برمجة شيء لا يحاكي التصميم، أعتقد ذلك.
عامل آخر في تقديم تصدير ثابت لهذا الغرض هو التأكد من عدم تخزين الصفحات الثابتة مؤقتًا في المتصفحات ولا في محركات البحث.
كما اعرف المزيد حول SKIP_POST_DEPLOYMENT_MIGRATIONS=1. باختصار، تقوم بتعيين ذلك عند إعادة بناء حاوية bed لمنعها من إتلاف قاعدة البيانات للحاوية الحالية، ثم قم بالهجرة مرة أخرى بدون ذلك بعد تشغيل الحاوية الجديدة.