بالطبع، ظهر لي السؤال، بما أن discourse يتم توزيعه بالفعل فقط مع حاوية docker: هل هناك أي فرصة أن يحتفظ الفريق بصورة docker “سحابية أصلية”؟
الفرق الكبير بين صورة bitnami وصورتك هو وضع التشغيل. تتوقع البنية التحتية الحديثة أنه يمكنك أتمتة التثبيت. عادةً ما يتم ذلك في k8s باستخدام helm، ولكن عمليات نشر ansible في بيئات تقليدية أكثر باستخدام الأجهزة الافتراضية ستؤدي إلى نفس النتيجة. لذا فإن ما سيجعل discourse على قدم المساواة مع صورة bitnami المهملة إلى حد ما هو إضافة روتين مثبت تلقائي وربما حتى تكييف قالب helm.
بما أنني هنا بالفعل، دعني أقدم بعض الملاحظات حول discourse نفسه و “جاهزيته السحابية”:
بشكل عام، عندما حاولنا ربط discourse بإعداد قابل للتكرار لمشروع عميل حالي، اتضح بسرعة أن discourse لم يتم إنشاؤه أبدًا من منظور البنية التحتية الحديثة. أحد الأمثلة هو الحاجة إلى تخزين NFS مشترك. هذا ليس موثوقًا به ولا قابلاً للتطوير. لحسن الحظ، يمكن إعادة توجيه معظم هذا بالفعل إلى S3، ولكن هناك أجزاء متبقية وهي المكونات الإضافية.
هناك ثلاث طرق لحل مشكلة المكونات الإضافية:
الكود المقيم المخزن في قاعدة البيانات (غير مستحسن)
حاويات جانبية مسبقة التعبئة (في مصطلحات Kubernetes سيتم استخدامها كـ initContainers للكتابة إلى emptyDir) الكتابة إلى تخزين متطاير (أي tmpfs) قبل بدء تشغيل حاوية discourse (مستحسن، على الرغم من أنه ليس مريحًا للغاية)
روتين مثبت، يحصل على معلومات المكونات الإضافية الحالية وأوامر التثبيت الخاصة بها من قاعدة البيانات عند بدء التشغيل وروتين مراقب/مستمع لتثبيت المكونات الإضافية في وقت التشغيل أيضًا (غير مستحسن، لأنه بطيء للغاية وعرضة للأخطاء)
أردت فقط الإشارة إلى أننا ندير العديد من مواقع Discourse في بيئات سحابية ولا نستخدم تخزين NFS. يتم التعامل مع الأصول والتحميلات عبر تخزين الكائنات (S3) بينما يتم الاحتفاظ بشفرة المصدر (النواة والإضافات) في صورة الحاوية التي تم تشغيلها.
حسنًا، تم الرد على ذلك بالفعل: لحسن الحظ، يمكن إعادة توجيه معظم هذا إلى S3 بالفعل، ولكن هناك أجزاء متبقية وهي المكونات الإضافية. يعد بناء حاوية مسبقًا لاستخدامها ممارسة سيئة لأنه يزيد من خطر عدم الترقية بشكل صحيح عبر مخططات Helm المستخدمة.