ما هي جميع الخطافات التي يمكنني استخدامها في app.yml

مرحباً، أحاول إعداد خطاف (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، ولا يمكنك إلا الارتباط بتلك الموجودة داخل القوالب التي تقوم بتضمينها.


:magnifying_glass_tilted_left: كيف يعمل

عندما ترى شيئًا مثل:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

هذا يعمل لأن القوالب تحتوي على خطوة مثل:

- hook: code
  run:
    - exec: ...

يتيح لك Pups إرفاق الأوامر قبل أو بعد أي من نقاط الخطاف المحددة.
لذلك، إذا حدد قالب hook: code، يمكنك استخدام before_code: أو after_code:.
إذا حدد hook: assets_precompile، يمكنك استخدام before_assets_precompile: أو after_assets_precompile: - وهكذا.

إذا لم يكن هناك hook: restart (على سبيل المثال)، فلن يتم تشغيل after_restart: ببساطة.


:white_check_mark: الخطافات المعروفة بوجودها في القوالب القياسية

من templates/*.yml الافتراضية التي يتم شحنها مع Discourse Docker:

اسم الخطاف الاستخدام الشائع يعمل مع
code مرحلة الإعداد الرئيسية لاستنساخ الإضافات، وتعديلات الملفات المخصصة، وما إلى ذلك. before_code: / after_code:
assets_precompile بعد تجميع أصول Rails (على سبيل المثال، التحميل إلى S3، التنظيف) after_assets_precompile:
web للتعديلات في اللحظة الأخيرة قبل تشغيل عملية الويب before_web:

غالبًا ما سترى after_code: و before_code: مستخدمة في أمثلة تثبيت الإضافات - هذه هي الوحيدة المطلوبة في معظم الإعدادات.


:cross_mark: الخطافات التي لا توجد افتراضيًا

أسماء مثل after_restart أو after_post_boot لا تتوافق مع أي hook: داخل القوالب القياسية، لذلك لا يعرف Pups أين يربطها.
لن يتم تشغيلها إلا إذا أضفت خطوة hook: restart مطابقة في قالب مخصص.


:toolbox: كيفية العثور على جميع الخطافات المتاحة على نظامك

من مجلد /var/discourse الخاص بك، قم بتشغيل:

grep -R "hook:" -n templates/ samples/

سيؤدي ذلك إلى سرد كل اسم خطاف تدعمه القوالب التي تقوم بتضمينها حاليًا.
أي شيء تجده هناك يمكن استخدامه كـ before_<name>: أو after_<name>: داخل كتلة hooks:.


:blue_book: مرجع

يتم شرح هذا السلوك بإيجاز في Pups README (أداة إدارة التكوين التي تستخدمها إعدادات Docker الخاصة بـ Discourse):

“الخطافات هي نقاط في القوالب تسمح بحقن الأوامر قبل أو بعد خطوة موسومة بـ hook:.”


:puzzle_piece: عمليًا

  • استخدم after_code: لمعظم أوامر shell المخصصة (مثل تثبيت الإضافات).
  • بالنسبة للأشياء التي يجب أن تحدث عند تشغيل الحاوية أو إعادة تشغيلها، استخدم برنامج بدء تشغيل صغير أو مهمة supervisord بدلاً من اختراع أسماء خطافات جديدة.
  • لإضافة نوع خطاف خاص بك، قم بإنشاء قالب جديد بإدخال hook: something مخصص، ثم استهدفه من app.yml.

باختصار:
فقط أسماء الخطافات التي تظهر فعليًا كإدخالات hook: في قوالبك موجودة.
في Discourse Docker القياسي، هذه هي أساسًا code و assets_precompile و web.

إعجابَين (2)

للإشارة، أعتقد أن مستودع pups موجود هنا:

@Ethsim2 لا أرى أي شيء بخصوص

ربما يجب عليك مراجعة رد الذكاء الاصطناعي قبل نشره :slightly_smiling_face: .

من ملف README:

قم بتنفيذ الأوامر قبل وبعد أمر معين عن طريق تحديد خطاف.

إعجاب واحد (1)

ماذا عن؟

تتيح لك الخطافات تنفيذ أوامر مخصصة قبل أو بعد خطوة بناء معينة، عن طريق تعريف before_<name>: أو after_<name>: المقابلة لملصق hook: <name> في القالب.

إعجاب واحد (1)

لا أعتقد أن الخطافات ستساعدك. هل تقول إنه عندما تقوم بتشغيل المحدّث عبر الويب، يتم فصل الحاوية الخاصة بك عن شبكة دوكر؟

أنا متأكد من أن المحدّث عبر الويب لا يعيد تشغيل الحاوية - هذه هي الطريقة التي يمكنه بها العمل دون إيقاف ديسكورس.

إعجاب واحد (1)

هذا صحيح.

تجدر الإشارة أيضًا إلى أن الخطافات (hooks) تعمل داخل الحاوية، لبناء صورة discourse. لا شيء هناك يتم تشغيله على المضيف، ولا توجد طريقة من خلال وظائف المشغل (launcher functions) لإعادة إنشاء أو تدمير شبكات دوكر.

ربما يكون من الأفضل شرح المشكلة التي تواجهها في الاستضافة الخاصة بك حتى نفهم بشكل أفضل ما تحاول حله.

إعجاب واحد (1)

تم التحديث فقط عبر سطر الأوامر (cli) وهذا ينقطع عن شبكة دوكر (docker network) ولكن هذا فقط لأن الحاوية (container) تعيد التشغيل من تلك النقطة. سأجرب المحدث عبر الويب (web updater) حيث لم أجرب ذلك مع هذا الإعداد بعد. اعتقدت أن نفس السلوك سيحدث بالفعل هنا أيضًا ولكن إذا لم يوقف المحدث عبر الويب الحاويات (containers) فلن يكون هناك ما يدعو للقلق حقًا. السبب الذي ذكرت كل هذا من أجله هو أنني رأيت أشخاصًا يواجهون مشاكل عند تشغيل المحدث عبر الويب في تلك المرحلة. لكنني سأجرب المحدث وأرى كيف تسير الأمور.

جوني بوي! الآيفونات رائعة!