مرحباً، أحاول إعداد خطاف (hook) للاتصال تلقائيًا بشبكة دوكر الخاصة بي عندما يتم إعادة تشغيل ديسكورس أو إعادة تشغيله بعد البناء. هذا حتى أتمكن من استخدام أداة تحديث الويب الإدارية عندما أستطيع، ولكن أحاول معرفة أفضل طريقة للقيام بذلك. لا تذكر المستندات حقًا جميع أنواع الخطافات التي يمكنني استخدامها، والبحث عن خطافات مثل after_post_boot و after_restart لا يؤدي إلى أي نتيجة. هل توقفت هذه الخطافات عن العمل وإذا كان الأمر كذلك، فلماذا؟ إليكم كود الخطافات الخاص بي.
hooks:
## بداية خطاف الشبكة المخصص
after_restart:
- exec:
cmd:
- bash
- "-c"
- |
# الاتصال بشبكة دوكر المخصصة إذا لم تكن متصلة بالفعل
NETWORK_NAME="proxy"
CONTAINER_NAME=$(hostname)
# إنشاء الشبكة إذا لم تكن موجودة
if ! docker network inspect "$NETWORK_NAME" >/dev/null 2>&1; then
echo "إنشاء شبكة دوكر: $NETWORK_NAME"
docker network create "$NETWORK_NAME"
fi
# الاتصال بالحاوية بالشبكة (تجاهل إذا كانت متصلة بالفعل)
echo "ربط $CONTAINER_NAME بـ $NETWORK_NAME..."
docker network connect "$NETWORK_NAME" "$CONTAINER_NAME" 2>/dev/null || true
echo "اكتمل الاتصال بالشبكة."
## نهاية خطاف الشبكة المخصص
لا توجد في الواقع قائمة عالمية ثابتة لأنواع الخطافات في app.yml.
يتم توفير الخطافات ديناميكيًا بواسطة Pups، ولا يمكنك إلا الارتباط بتلك الموجودة داخل القوالب التي تقوم بتضمينها.
يتيح لك Pups إرفاق الأوامر قبل أو بعد أي من نقاط الخطاف المحددة.
لذلك، إذا حدد قالب hook: code، يمكنك استخدام before_code: أو after_code:.
إذا حدد hook: assets_precompile، يمكنك استخدام before_assets_precompile: أو after_assets_precompile: - وهكذا.
إذا لم يكن هناك hook: restart (على سبيل المثال)، فلن يتم تشغيل after_restart: ببساطة.
الخطافات المعروفة بوجودها في القوالب القياسية
من templates/*.yml الافتراضية التي يتم شحنها مع Discourse Docker:
اسم الخطاف
الاستخدام الشائع
يعمل مع
code
مرحلة الإعداد الرئيسية لاستنساخ الإضافات، وتعديلات الملفات المخصصة، وما إلى ذلك.
before_code: / after_code:
assets_precompile
بعد تجميع أصول Rails (على سبيل المثال، التحميل إلى S3، التنظيف)
after_assets_precompile:
web
للتعديلات في اللحظة الأخيرة قبل تشغيل عملية الويب
before_web:
غالبًا ما سترى after_code: و before_code: مستخدمة في أمثلة تثبيت الإضافات - هذه هي الوحيدة المطلوبة في معظم الإعدادات.
الخطافات التي لا توجد افتراضيًا
أسماء مثل after_restart أو after_post_boot لا تتوافق مع أي hook: داخل القوالب القياسية، لذلك لا يعرف Pups أين يربطها.
لن يتم تشغيلها إلا إذا أضفت خطوة hook: restart مطابقة في قالب مخصص.
كيفية العثور على جميع الخطافات المتاحة على نظامك
من مجلد /var/discourse الخاص بك، قم بتشغيل:
grep -R "hook:" -n templates/ samples/
سيؤدي ذلك إلى سرد كل اسم خطاف تدعمه القوالب التي تقوم بتضمينها حاليًا.
أي شيء تجده هناك يمكن استخدامه كـ before_<name>: أو after_<name>: داخل كتلة hooks:.
مرجع
يتم شرح هذا السلوك بإيجاز في Pups README (أداة إدارة التكوين التي تستخدمها إعدادات Docker الخاصة بـ Discourse):
“الخطافات هي نقاط في القوالب تسمح بحقن الأوامر قبل أو بعد خطوة موسومة بـ hook:.”
عمليًا
استخدم after_code: لمعظم أوامر shell المخصصة (مثل تثبيت الإضافات).
بالنسبة للأشياء التي يجب أن تحدث عند تشغيل الحاوية أو إعادة تشغيلها، استخدم برنامج بدء تشغيل صغير أو مهمة supervisord بدلاً من اختراع أسماء خطافات جديدة.
لإضافة نوع خطاف خاص بك، قم بإنشاء قالب جديد بإدخال hook: something مخصص، ثم استهدفه من app.yml.
باختصار:
فقط أسماء الخطافات التي تظهر فعليًا كإدخالات hook: في قوالبك موجودة.
في Discourse Docker القياسي، هذه هي أساسًا code و assets_precompile و web.
تجدر الإشارة أيضًا إلى أن الخطافات (hooks) تعمل داخل الحاوية، لبناء صورة discourse. لا شيء هناك يتم تشغيله على المضيف، ولا توجد طريقة من خلال وظائف المشغل (launcher functions) لإعادة إنشاء أو تدمير شبكات دوكر.
ربما يكون من الأفضل شرح المشكلة التي تواجهها في الاستضافة الخاصة بك حتى نفهم بشكل أفضل ما تحاول حله.
تم التحديث فقط عبر سطر الأوامر (cli) وهذا ينقطع عن شبكة دوكر (docker network) ولكن هذا فقط لأن الحاوية (container) تعيد التشغيل من تلك النقطة. سأجرب المحدث عبر الويب (web updater) حيث لم أجرب ذلك مع هذا الإعداد بعد. اعتقدت أن نفس السلوك سيحدث بالفعل هنا أيضًا ولكن إذا لم يوقف المحدث عبر الويب الحاويات (containers) فلن يكون هناك ما يدعو للقلق حقًا. السبب الذي ذكرت كل هذا من أجله هو أنني رأيت أشخاصًا يواجهون مشاكل عند تشغيل المحدث عبر الويب في تلك المرحلة. لكنني سأجرب المحدث وأرى كيف تسير الأمور.