Loading...

تعلّم / النشر

انشر تطبيقًا متعدّد الخدمات باستخدام Docker Compose

هل لديك ملف docker-compose.yml فيه خدمة ويب وعامل (worker) وقاعدة بيانات؟ يحوّله cdn.com.tr إلى تطبيقات حاويات وإضافات مُدارة — عايِن الخطة أولًا، ثم طبّقها بأمرٍ واحد. لا مجموعة (cluster) تديرها، ولا قاعدة بيانات تجالسها.

قراءة 8 دقائق متوسط Updated

انشر تطبيقًا متعدّد الخدمات باستخدام Docker Compose

ما تحتاج إليه

تحتاج إلى تطبيق موصوف بملف docker-compose.yml — عادةً خدمة ويب، وربما عامل (worker) في الخلفية، وخدمات مساندة مثل قاعدة بيانات وRedis — وإلى حساب على cdn.com.tr. لن تُشغّل مجموعة Kubernetes، ولا تدير خادم قاعدة بيانات، ولا تُعِدّ TLS يدويًا. يقرأ cdn.com.tr ملف compose الخاص بك ويربط كل جزء بقطعة مُدارة: تصبح خدمات التطبيق تطبيقات حاويات، وتصبح الخدمات ذات الحالة مثل Postgres أو MySQL أو Redis إضافات مُدارة يُحتفَظ لها بنسخ احتياطية وتُحقَن في تطبيقاتك كمتغيّرات بيئة.

كيف يُربط ملف compose الخاص بك

الفكرة بسيطة: كل ما يخدم الزيارات أو يشغّل شيفرة يصبح تطبيق حاوية، وكل ما يخزّن البيانات يصبح إضافة مُدارة. فخدمة "web" تصبح تطبيقًا له نطاق؛ وخدمة "worker" تصبح تطبيقًا بلا منفذ عام؛ وخدمة "db" تستخدم صورة Postgres أو MySQL تصبح قاعدة بيانات مُدارة؛ وخدمة "redis" تصبح Redis مُدارًا. تظلّ خدماتك تتخاطب فيما بينها بالاسم، وتُقدَّم تفاصيل الاتصال بالإضافات المُدارة إلى تطبيقاتك تلقائيًا — فتحذف حاوية قاعدة البيانات ذاتية الاستضافة المحفوفة بالمخاطر وتدع المنصّة تشغّلها.

مثال على ملف compose

إليك تطبيقًا صغيرًا متعدّد الخدمات: واجهة برمجة تطبيقات ويب، وعامل (worker) في الخلفية، وقاعدة بيانات Postgres وRedis. أضِفه إلى مستودعك باسم docker-compose.yml.

docker-compose.yml

services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/app
      REDIS_URL: redis://redis:6379
    depends_on: [db, redis]

  worker:
    build: .
    command: ["python", "worker.py"]
    depends_on: [db, redis]

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: app

  redis:
    image: redis:7

عايِن الخطة أولًا

قبل تغيير أيّ شيء، اسأل cdn.com.tr عمّا سيُنشئه. تقرأ المعاينة ملف compose الخاص بك وتعرض الخطة: أيّ الخدمات تصبح تطبيقات حاويات، وأيّها تصبح إضافات مُدارة، وكيف تترابط. لا شيء يُنشأ بعد — أنت فقط ترى ما سيحدث.

cdnctl — معاينة
cdnctl login
cdnctl accounts use <account_uuid>

cdnctl container compose preview --file docker-compose.yml
# web, worker  -> container apps
# db           -> managed database (postgres)
# redis        -> managed redis

طبّقها

أعجبتك الخطة؟ طبّقها. يُنشئ cdn.com.tr تطبيقات الحاويات والإضافات، ويوصّل سلاسل الاتصال إلى تطبيقاتك، ويشغّل كل شيء. يمكنك فعل ذلك من اللوحة أيضًا — استورد ملف compose، وراجِع الخطة، وأكِّد — لكن أمرًا واحدًا يُبقيها ضمن نظام CI أو سكربت لديك.

cdnctl — تطبيق
cdnctl container compose apply --file docker-compose.yml --yes

# then, anytime:
cdnctl container apps list
cdnctl container apps logs --app <web_app_uuid> --tail 100

النطاق وHTTPS والحافة

وجّه نطاقك إلى تطبيق الويب، ويُصدِر cdn.com.tr شهادة SSL ويجدّدها تلقائيًا. تعمل خدماتك الآن كتطبيقات مُدارة خلف حافة CDN، مع WAF أمامها وامتصاص موجات الذروة عند الحافة؛ وتكون قاعدة البيانات وRedis مُدارتين ومحفوظتين بنسخ احتياطية. ولإصدار تحديث، أعِد بناء صورتك وطبّق من جديد — وإذا فشل البناء تظلّ النسخة السابقة تخدم الزوّار. تحصل على نشر إنتاجي متعدّد الخدمات دون تشغيل مجموعة (cluster) أو قاعدة بيانات تحته.

أين يناسب أكثر

تطبيقات ويب + عامل + طابور

التطبيقات التي فيها طبقة ويب وعمّال في الخلفية وقاعدة بيانات تُربط بسلاسة إلى تطبيقات مع إضافات مُدارة.

نقل حزمة تقنية قائمة

ألديك ملف docker-compose.yml يعمل بالفعل؟ استورده كما هو بدلًا من إعادة بناء نشرك من الصفر.

تغييرات: عايِن ثم طبّق

تُظهر المعاينة بالضبط ما سيتغيّر قبل تشغيل أيّ شيء — آمنة للاستخدام من CI أو من سكربت.

الأسئلة الشائعة حول نشر Docker Compose

هل يشغّل docker-compose كما هو على خادم افتراضي (VM)؟

لا — بل يحوّل ملف compose الخاص بك إلى موارد مُدارة: تصبح الخدمات تطبيقات حاويات وتصبح الخدمات ذات الحالة إضافات مُدارة. أي لا خادم افتراضي تُحدِّثه، وقاعدة بيانات يُحتفَظ لها بنسخ احتياطية وتُدار نيابةً عنك، بينما يحتفظ تطبيقك بالشكل نفسه.

ماذا يحدث لخدمات قاعدة البيانات وRedis لديّ؟

تُحوَّل خدمة Postgres أو MySQL أو Redis إلى إضافة مُدارة. ولا تُشغَّل الحاوية الموجودة في ملف compose كما هي؛ بل توفّر الإضافة المُدارة تفاصيل الاتصال إلى تطبيقاتك كمتغيّرات بيئة.

هل يمكنني رؤية ما سيحدث قبل التطبيق؟

نعم. يعرض "cdnctl container compose preview" الخطة كاملة — أيّ الخدمات تصبح تطبيقات، وأيّها تصبح إضافات، وكيف تترابط — دون إنشاء أيّ شيء. طبّق فقط حين تبدو الخطة صحيحة.