قمنا بإجراء بعض التعديلات في حاوية التطبيق في أحد الملفات داخل مجلد /var/www/discourse/app/views/layouts.
ثم اعتقدنا (كحمقى) أنه يمكننا ببساطة إعادة بناء الحاوية باستخدام الأمر /var/discourse/launcher rebuild app (ليس كذلك!)، ولكن في كل مرة نقوم بذلك، يتم استبدال تعديلاتنا.
لا نرغب في عمل نسخة مشتقة (fork) من discourse؛ ولكننا نود إعادة بناء التطبيق باستخدام launcher دون أن يؤدي ذلك إلى استبدال تعديلاتنا المحلية.
يبدو أننا اكتشفنا السبب وراء استبدال ملفاتنا في التطبيق أثناء عملية إعادة البناء، مهما حاولنا:
السبب هو أن launcher يقوم بسحب صورة Discourse الأساسية، وهذه الصورة تحتوي على مجلد .git، وملف إعدادات git يشير بطبيعته إلى مستودع Discourse الرئيسي، مما يؤدي إلى استبدال تغييراتنا:
launcher
pull_image() {
# إضافة محاولة إعادة واحدة للتغلب على أخطاء TLS في Docker Hub
$docker_path pull $image || $docker_path pull $image
}
من قبل، ظننا خطأً أن launcher يبني الصورة (كيف فاتنا هذا؟!)، والآن أصبح من الواضح أنه يسحب صورة أساسية من Docker Hub.
نعود إلى نقطة البداية!
هل هناك علم (flag) يمكننا تعيينه لمنع launcher من سحب الصورة الأساسية والقيام ببنائها بدلاً من ذلك؟
أتفق معك تمامًا بأن الإضافات ومكونات السمات هي الطريقة المثلى! هذه الطريقة مدعومة بالكامل وهي جيدة للبقاء متزامنًا مع فريق تطوير Meta.
كما أنه من الجيد أن تكون فضوليًا، واستكشاف الاحتمالات، واكتساب فهم أعمق لمنصة Discourse؛ وبعد قراءة هذا الموضوع أمس، قمت بإنشاء سجل Docker محلي، وسميت صورة Discourse الأساسية محليًا، ثم دفعت تلك الصورة إلى سجل Docker الجديد الخاص بي (localhost)، وأعدت بناء تطبيق Discourse بسحب صورة Discourse الأساسية من السجل.
أعتقد أن التجربة والتعلم أكثر عن Discourse أمر ممتع، وقد تعلمت الكثير من هذا الاستكشاف/التجربة الخاصة بمسؤولي الأنظمة. وبالطبع، هذه ليست الطريقة التي ندير بها التطبيقات في بيئة الإنتاج، لكنني تعلمت الكثير من خلال المرور بالخطوات اللازمة لسحب صورة Discourse الأساسية من localhost بدلاً من السحابة، وكان الأمر مدهشًا في سهولته، لذا قمت بكتابة هذا التجربة لمشاركته مع مسؤولي الأنظمة الفضوليين الآخرين:
آمل أن يستفيد مستكشفو مسؤولي الأنظمة الآخرون من هذه التجربة بطريقة ما، ولو بشكل بسيط.
حتى بعد تجربة سجل Docker المحلي وصورة Discourse الأساسية المحلية، لم أستطع الحصول على نتائج متسقة (غير متأكد من السبب، ربما أغفلت بعض التفاصيل الرئيسية في الإعداد).
من ناحية أخرى، تعلمت المزيد حول سجلات Docker المحلية وكيفية بناء وإدارة واحدة منها.
فقط تجربة جانبية مع Docker… تعلمت الكثير بالتأكيد!