مرحبًا مايك. ببساطة، ما تفعله هو استخدام ./launcher bootstrap لبناء الصورة، ثم دفعها إلى مستودع، وبعد ذلك استخدام ./launcher start-cmd لمعرفة المتغيرات البيئية (ENV) التي يجب تمريرها إلى Docker لتشغيل الأمور.
السبب في عدم وجود دليل من هذا النوع هو أن الأشخاص الذين لا يمتلكون أدنى فهم لأي من المكونات الأساسية التي يعمل عليها سيجدون هذا الدليل ولن يتمكنوا من فهمه، ثم سيتوقعون دورة تعليمية حول كيفية عمل ingress على أي نظام يعتقدون أنه الحل الوحيد.
شكرًا لك يا جاي - لقد استنتجت ذلك بالفعل. لقد نجحتُ في النهاية في جعله يعمل.
سأقوم بإنشاء فيديو ودليل يوضحان بالضبط ما فعلته، حتى لا يضيع الوقت مني (أو منّي في المستقبل) في محاولة فهم هذا الأمر.
أعتقد أن جزءًا من المشكلة هو أن هذا يتعارض مع طبيعة معظم صور Docker الأخرى المتوفرة. إنه ليس سهل الاستخدام بنفس الدرجة. بل يتطلب المزيد من الضبط والتعديل قبل أن يعمل.
وكما ذكرت، فإن برنامج التشغيل (Launcher) رائع وموثوق فيما يفعله.
على جانب إيجابي جدًا، فإن الإصدار المخصص للويب يعمل بكفاءة فائقة، وسريع للغاية على نظامي الموزع (Swarm)، ويمكن تحديثه لأنني أملك خادم البناء.
عندما أجد وقتًا، سأستكشف إمكانية إنشاء خادم بناء على نظامي الموزع يسمح ببناء صورة Docker عبر واجهة ويب.
أشياء جربتها ولم تكن مرضية على الإطلاق…
صورة Docker من Bitnami - كانت تعمل ببطء شديد وكأنها كلب بلا أرجل.
ملف Dockerfile من IndieHosts - لم أتمكن حتى من إتمام عملية البناء؛ بدا وكأنه مصمم على بناء كل شيء، وأعتقد أنه كان يقوم بترجمة نظام Linux. مرة أخرى، يجب أن يكون هناك طريقة أسهل!
تم إنشاء سكريبت المشغّل قبل وجود docker-compose و docker-swarm و kubernetes وكل ما سبق، ومع ذلك… لا يزال يعمل. لا يوجد حقًا أي سبب مقنع لنا للتحول إلى شيء آخر. فـ “المزايا” التي تتمتع بها هذه الأنظمة ليست مزايا للمستهلك رقم 1 لاستضافة Discourse ذاتية الاستضافة، وهو التثبيتات ذات الميزانية المحدودة على خوادم VPS السحابية.
أوه! كنت أتساءل دائمًا. وفي آخر مرة تفحصت فيها، كانت هناك خطوة إضافية لتثبيت docker-compose على Ubuntu. الأمر أشبه بأنهم لا يريدون أن يستخدمه الناس، إلا إذا كانوا يستخدمون Windows (أو Mac؟)
من المحزن بعض الشيء سماع هذه الإجابة الرسمية من فريق التطوير. إنك تقول فعليًا إنه إذا لم تكن ماهرًا بما يكفي لفهم هذه العملية غير الموثقة لتشغيل Discourse في بيئة الإنتاج، فربما لا ينبغي لك تشغيله في بيئة الإنتاج.
حسناً، ليس كل منا يمتلك خبرة واسعة في عمليات التطوير والعمليات (DevOps)، للأسف.
@Mike_Sutton أنا معك تمامًا في هذه النقطة. لقد كنت أقرأ المنتديات خلال الأسابيع الأخيرة محاولًا حل هذه المعضلة. هل تمكنت من صنع فيديو يوضح كيف حلت المشكلة؟
نعم، يمكنك دفع صور Docker الخاصة بـ Discourse إلى مستودع وأرشفة باقي /var/discourse كما هو موضح في النقاش أدناه، لكن هذه ليست طريقة فعالة للقيام بالأشياء وليست مدعومة رسميًا. لقد اختبرت هذا مؤخرًا بشكل كامل:
لكن في هذه الحالة، يجب تنفيذ خطوة التمهيد على الخادم الإنتاجي، وهذا إلى حد ما يُفقد الغرض من دفع صورة أساسية إلى سجل الحاويات، إذا لم أكن مخطئًا (لأن الهدف من ذلك هو عدم الحاجة إلى تمهيد الصورة في البيئة الإنتاجية، باستثناء ربما تنفيذ خطوة ترحيل قاعدة البيانات أو شيء مشابه).
هذا ما أفعله في المواقع التي أضيفها باستثناء موقع Discourse؛ عادةً ما أستخدم Flyway لتشغيل عمليات الترحيل في قاعدة البيانات، بالإضافة إلى بعض المهام الأخرى مثل إفراغ ذاكرة التخزين المؤقت لـ Redis، ولكن دون تشغيل عمليات مكثفة أخرى، خاصة تلك التي تعتمد على خدمات خارجية، مثل تحديث شهادات HTTPS (سأقوم بذلك عبر مهمة مجدولة cron، باستثناء المرة الأولى وهو أمر مقبول)، أو تغيير قاعدة الكود (سيكون هذا ثابتًا في الصورة، مثل الحزم والمكتبات وأشياء أخرى). يبدو أن Discourse يستخدم Rake وهو أمر مقبول، لكنه يقوم أيضًا بمهام أخرى مثل تثبيت حزم Gems، وتوليد الأصول، وتحديث قاعدة بيانات MaxMind، وربما خدمات أخرى (وهو ما قد يكسر خطوة إعادة البناء إذا تعطلت الخدمة، على سبيل المثال، أو إذا تم تغيير واجهة برمجة التطبيقات، وهو أمر نادر لكنه ممكن الحدوث).
لا أقول إن على Discourse أن يعمل بهذه الطريقة بالطبع، لكن إنشاء صورة في بيئة CI وتشغيل خطوة ترحيل قاعدة البيانات فقط على خوادم الاختبار/الإنتاج، مع تحديد متغيرات البيئة، هو ما أتوقعه، وهو أمر يمكن تحقيقه بسهولة مع برمجيات أخرى مثل WordPress وMediaWiki وRocket.Chat، إلخ. يُعد Discourse أفضل برمجية للمنتديات من وجهة نظري، وقد يكون لديهم أسباب وجيهة للعمل بالطريقة التي يعملون بها، لكن حتى الآن، سأستخدم فقط التثبيت القياسي (أو تثبيت متعدد الحاويات) لتجنب المشاكل، وآمل ألا يحدث أي خطأ أثناء عمليات إعادة البناء.
يبدو أن خطوة التمهيد يجب أن تُنفذ لا يزال في بيئة إنتاجية، وليس في بيئة CI لتوليد صورة أساسية لاستخدامها في بيئتي الاختبار والإنتاج على حد سواء. علاوة على ذلك، عدم كونه تثبيتًا قياسيًا هو علامة حمراء كبيرة، قد تتحول إلى صداع في المستقبل مع حصول البرنامج على تحديثات.