عامل الميناء: تشغيل كرونجوب لحاوية مختلفة

أنا أبحث عن أفضل الممارسات حول تشغيل كرونجوبس لبلدي فب التيار الوطني الحر الحاويات.

الآن تشغيل:

  • حاوية إنجن إكس
  • فب التيار الوطني الحر الحاويات
  • حاوية الخلية

أنا الآن أحب أن يكون حاوية أخرى تشغيل يسمى "كرونجوب الحاويات" الذي إكسيك السيناريو داخل بلدي فب فب الحاويات ( أنا بحاجة إلى بعض التبعيات من فب ).

لذلك ثلاثة حلول ممكنة:

1.) تشغيل حاوية خاصة

أحب استخدام هذا الحل!

سيكون من الجيد أن يكون حاوية تشغيل كرون حيث أنا قادرة على (بطريقة أو بأخرى ) استدعاء عامل الميناء إكسيك على بلدي فب التيار الوطني الحر الحاويات... أو لديك طريقة أخرى.

2.) تشغيل كرون داخل حاوية فب

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

3.) تشغيل المضيفين كرون

هذا سيكون قاسيا. وأود أن تحتاج إلى العثور على بروسيسيد و كونتينريد من مسار معين ثم قم بتشغيل عامل الميناء إكسيك. ولكن هذا هو أكثر أو أقل طريقي الأخير... وأنا أكره لإدارة كرونجوبس دون نشر.

فما هو أفضل نهج هنا?

أتمنى لك يوماً لطيفاً,

باستيان

لقد كتبت الخفي الذي يلاحظ الحاويات والجداول الزمنية وظائف ، المحددة في البيانات الوصفية الخاصة بهم ، عليها. هذا يأتي الأقرب إلى الحل الخاص بك 1). مثال:

version: '2'services:  wordpress:    image: wordpress  mysql:    image: mariadb    volumes:      - ./database_dumps:/dumps    labels:      deck-chores.dump.command: sh -c "mysqldump --all-databases > /dumps/dump-$$(date -Idate)"      deck-chores.dump.interval: daily

'الكلاسيكية' ، كرون مثل التكوين هو ممكن أيضا.

هنا هي المستندات، ها هي مستودع الصور.

كرون نفسها يمكن تركيبها وتشغيلها في المقدمة (cron -f) مما يجعل من السهل جدا لتثبيت في وعاء. للوصول إلى حاويات أخرى ، من المحتمل أن تقوم بتثبيت عامل ميناء في نفس الحاوية للعميل كلي (وليس لتشغيل البرنامج الخفي). ثم للوصول إلى بيئة عامل الميناء المضيف ، والحل الأكثر شيوعا هو ربط جبل مأخذ عامل الميناء (-v /var/run/docker.sock:/var/run/docker.sock). مسكتك الوحيد هو أنك تحتاج إلى إعداد عامل الميناء جيد داخل الحاوية الخاصة بك لتتناسب مع المضيف جيد ، ثم قم بإضافة المستخدمين داخل الحاوية إلى مجموعة عامل الميناء.

وهذا يعني أن هؤلاء المستخدمين لديهم نفس الوصول من أي مستخدم عامل الميناء على المضيف ، على سبيل المثال وصول مستوى الجذر ، لذلك تحتاج إلى إما الثقة تماما المستخدم إرسالها ، أو الحد من الأوامر التي يمكن تشغيلها مع نوع من سودو ما يعادلها. الجانب السلبي الآخر هو أن هذا هو أقل المحمولة ، وسوف مدراء علم الأمن من غير المرجح أن يوافق تشغيل الحاويات الخاصة بك على أنظمتها.

الاحتياطي إلى الخيار ب من السهل جدا مع أداة مثل سوبيرفيسورد. على الرغم من أنها أقل من "عملية واحدة لكل حاوية" مثالية ، إلا أنها ليست مقاومة للنمط تماما لأنها تحافظ على الحاوية والتبعيات بأكملها معا ، وتزيل أي مخاطر أمنية على المضيف.

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

تشغيل كرون في حاوية أخرى أو حتى على المضيف ولكن تشغيل البرنامج النصي عبر فب-التيار الوطني الحر (على سبيل المثال. سوف كرون "حليقة" أو شيء من البرنامج النصي فب).

تأكد من تأمين مثل هذا الإعداد باستخدام رمز أمان وقيود الشبكة وما إلى ذلك. تعزيز يمكن أن يكون لديك تجمع فب-التيار الوطني الحر فصل مع العمليات الديناميكية التي هي قادرة على تفرخ ماكس عملية واحدة. هذا التجمع سيكون فقط يمكن الوصول إليها من قبل كرون. ويمكن أن تستفيد أيضا لأنها الإعدادات الفردية الخاصة مثل هذه الطريقة أكبر وقت التنفيذ ، أكثر أو أقل الذاكرة الخ.

ملاحظة: يمكنك استخدام شيء مثل هذا لاستدعاء البرنامج النصي مباشرة في حاوية التيار الوطني الحر وعدم الذهاب من خلال إنجن إكس.

المنطق: ربما كنت ترغب في الوصول إلى نفس المكتبات ، نفس التكوين الخ. تشغيل عملية ولدت عشوائيا ولا تسيطر عليها مدير إشارة في عامل الميناء هو فكرة سيئة حقا.

كنت أحاول تحقيق شيء مماثل.

كانت فكرتي الأولية لبدء وظائف كرون من منفصلة cron الحاوية وتنفيذها فعليا داخل حاوية أخرى (php) أي. أن يكون واحد crontab سجل لكل docker run -i t $containerName $scriptName ... الأمر تشغيل البرنامج النصي مختلفة داخل php حاوية

النهج ليس جيدا حقا بسبب العيوب @بمتش يذكر أيضا. أيضا أنا لا أحب حقا لتثبيت docker إلى الحاوية.

وأود أن نقدم حل آخر المناسب تحت الخاص بك #1 الفئة: يمكن للمرء تشغيل php-fpm مباشرة. على الرغم من أنه ليس الحل الأكثر أناقة في العالم ، إلا أنه يوفر مزايا:

  1. الأمان-لا يوجد وصول خاص أو متميز ، ما عليك سوى استخدام المضيف والمنفذ (مثل php-host:9000) هذا مفتوح بالفعل ل nginx من داخل الشبكة الافتراضية عامل الميناء
  2. وجود cron إدارة فصل من php الحاوية - لذلك لا يتضرر التحجيم
  3. في الواقع باستخدام cron للمهام كرونيش - مجرد زرع crontab وينبغي القيام به بدلا من إعادة تنفيذ كرون عبر مختلف ليبس أخرى
  4. تنفيذ البرنامج النصي لا يمر nginx، لذلك لا يمكن لأي شخص تشغيلها مباشرة عبر خادم الويب، لا تحتاج إلى تنفيذ أي مصادقة أو آليات من هذا القبيل
  5. حتى أقل مشاكل مع الأذونات. بلدي السابق كرون دوكيريزاتيون كان وجود cron تثبيت داخل آخر php حاوية وجود مصدر برنامج مشترك باستخدام وحدات التخزين. كان ذلك فعالا ، ولكن كان لا بد من التعامل مع الأذونات بعناية كمخابئ ، دي ، سجلات الخ. يجب أن يكون الوصول إليها وقابلة للكتابة من قبل كل من خادم الويب و cron المستخدم. هذا النهج يلغي المشكلة

العيب الوحيد الذي واجهته حتى الآن هو أن السطر الأول ث / هاشبانغ (#!/usr/local/bin/php) يعتبر الإخراج الفعلي و فب تحذير حول رؤوس أرسلت بالفعل ينبعث (Cannot modify header information - headers already sent by ...)- إسقاط هاشبانغ إصلاح هذا.

كيف نفعل ذلك فعلا?

  1. لديك حاوية نظيفة ، على سبيل المثال alpine:3.7
  2. تثبيت apk-cron و fcgi (معلومات الحزمة)
  3. تشغيل شيء من هذا القبيل:
SCRIPT_FILENAME=/docroot/scripts/cron/example-script.php \REQUEST_METHOD=GET \cgi-fcgi -bind -connect php-fpm:9000

من داخل كرونتاب.

مزيد من المعلومات حول هذا الموضوع: الاتصال مباشرة إلى فب-التيار الوطني الحر

فعلت ذلك (مع عامل الميناء يؤلف أكثر أو أقل تلقائيا ) ولكن كيف يمكنك أن تبدأ نوعا من فب كرونجوب استنادا فقط مع نوع من أمر الشبكة? إذا كنت تستخدم المنفذ 80 لدي مهلة طبيعية من فب العمل ضدي أن لا معنى له… لست متأكدا ما سيكون حلا جيدا!

لا أفهم أو يمكن اختبار أي من هذا، ولكن هناك مثال في تلك الوثيقة التي تقول يمكنك تشغيل أمر مثل هذا عامل الميناء تشغيل name آرإم name اسم ويب 2 link لينك دب:دب التدريب/ويباب كوماندنام ، لذلك إذا كان هذا لا يعمل بالنسبة لك ، تشغيل كرون في حاوية واحدة ، ويكون ذلك إصدار أوامر من هذا القبيل على حاوية أخرى(ق).

#1! - آسف أنا لا أعرف حقا. ليس الهدف من الحاويات بحيث يتم “احتواؤها”? مثل, “آمن”? أنا لا تستخدم عامل الميناء أو حاويات التطبيق ، لذلك أنا لا أعرف بالضبط ما أتحدث عنه على الرغم من…

أنت محق تماما في أنه يجب “احتواؤها” ، ولكن يجب أن يعمل بعضها معا كقطعة واحدة من البرامج. إذا لم تكن قادرا على تشغيل البرنامج كعملية واحدة (وإلى أن نكون صادقين في أقرب وقت لم تكن مؤيدة في كتابة قاعدة البيانات الخاصة بك من الصفر لم تكن قادرا على ) كنت في حاجة الى عدد قليل من الحاويات للعمل معا. وأنا لا أعرف كيفية تشغيل كرونجوبس معهم =/.

التواصل بين الحاويات (الربط أو الربط الشبكي): Redirecting…