استخدام صورة Docker المبنية بواسطة Launcher في docker-compose

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

هذا ما أفعله في المواقع التي أضيفها باستثناء موقع Discourse؛ عادةً ما أستخدم Flyway لتشغيل عمليات الترحيل في قاعدة البيانات، بالإضافة إلى بعض المهام الأخرى مثل إفراغ ذاكرة التخزين المؤقت لـ Redis، ولكن دون تشغيل عمليات مكثفة أخرى، خاصة تلك التي تعتمد على خدمات خارجية، مثل تحديث شهادات HTTPS (سأقوم بذلك عبر مهمة مجدولة cron، باستثناء المرة الأولى وهو أمر مقبول)، أو تغيير قاعدة الكود (سيكون هذا ثابتًا في الصورة، مثل الحزم والمكتبات وأشياء أخرى). يبدو أن Discourse يستخدم Rake وهو أمر مقبول، لكنه يقوم أيضًا بمهام أخرى مثل تثبيت حزم Gems، وتوليد الأصول، وتحديث قاعدة بيانات MaxMind، وربما خدمات أخرى (وهو ما قد يكسر خطوة إعادة البناء إذا تعطلت الخدمة، على سبيل المثال، أو إذا تم تغيير واجهة برمجة التطبيقات، وهو أمر نادر لكنه ممكن الحدوث).

لا أقول إن على Discourse أن يعمل بهذه الطريقة بالطبع، لكن إنشاء صورة في بيئة CI وتشغيل خطوة ترحيل قاعدة البيانات فقط على خوادم الاختبار/الإنتاج، مع تحديد متغيرات البيئة، هو ما أتوقعه، وهو أمر يمكن تحقيقه بسهولة مع برمجيات أخرى مثل WordPress وMediaWiki وRocket.Chat، إلخ. يُعد Discourse أفضل برمجية للمنتديات من وجهة نظري، وقد يكون لديهم أسباب وجيهة للعمل بالطريقة التي يعملون بها، لكن حتى الآن، سأستخدم فقط التثبيت القياسي (أو تثبيت متعدد الحاويات) لتجنب المشاكل، وآمل ألا يحدث أي خطأ أثناء عمليات إعادة البناء.

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