ما تحتاج إليه
تحتاج إلى تطبيق موصوف بملف 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 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 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" الخطة كاملة — أيّ الخدمات تصبح تطبيقات، وأيّها تصبح إضافات، وكيف تترابط — دون إنشاء أيّ شيء. طبّق فقط حين تبدو الخطة صحيحة.