دليل المنصة
النشر من المصدر: كيف يتحول مجلد عادي إلى تطبيق يعمل
مرجع النشر من المجلد في cdnctl: البنية، حقول cdnctl.yaml، الحدود، والأعطال التي واجهناها فعلًا مع حلولها.
العودة إلى مساعدة المنصةالبنية: ماذا يحدث بعد cdnctl deploy
من جهتك لا يوجد مستودع git ولا سجل حاويات. خط الأنابيب كالتالي:
- يحزم cdnctl مجلد المشروع في tar.gz (حتى 128 ميغابايت) ويرفعه إلى اللوحة تحت حسابك.
- تصدر اللوحة رابط تنزيل موقّعًا صالحًا لثلاثين دقيقة — الطريقة الوحيدة التي تصل بها بيئة البناء إلى مصدرك.
- يجلب صندوق بناء معزول (Kaniko داخل حاوية محمية بـ gVisor) الأرشيف ويفكه ويبني Dockerfile. تكتمل عمليات البناء عادة في نحو دقيقة.
- تُدفع الصورة إلى مساحة السجل الخاصة بحسابك (registry.cdn.com.tr/<الحساب>/<التطبيق>) — لا إلى سجل مشترك أو عام أبدًا.
- يُنشأ التطبيق أو يُحدّث، ويُعرض على نطاقه الفرعي مع SSL ثم يُطرح. ينتظر cdnctl ويطبع الرابط المباشر.
cdnctl.yaml: الحقول المهمة
يكتب cdnctl init هذا الملف؛ أنت تحرره وcdnctl يقرؤه عند كل نشر.
- name — اسم التطبيق؛ وهو أيضًا بذرة النطاق الفرعي عند أول نشر.
- port — منفذ الحاوية الذي يستمع إليه خادمك (كل الواجهات، لا localhost).
- healthcheck — مسار HTTP الذي تفحصه المنصة؛ ينتظر النشر نجاحه.
- method — auto أو source أو git أو compose؛ وsource هو مسار المجلد الموصوف هنا.
- الملف نفسه مستثنى من فحص cdnctl check؛ فقيمه لا تُسكت أبدًا تحذيرًا عن كودك.
# أدنى cdnctl.yaml
name: task-tracker
port: 3000
healthcheck: /health
method: source
الحدود — التفاصيل الصادقة
- أرشيف المصدر: 128 ميغابايت كحد أقصى. مشاريع Node تتسع بسهولة بعد استبعاد node_modules (يكتب init ملف .dockerignore).
- زمن البناء: نحو دقيقة لتطبيقات Node/Python المعتادة؛ البناءات الأصلية الثقيلة تستغرق أكثر.
- قالب Dockerfile يعرف Node وPython وPHP والمواقع الثابتة؛ ما عداها يحتاج Dockerfile مكتوبًا يدويًا (يستخدمه deploy كما هو).
- الدفع يبقى في اللوحة: إن لم يكن للحساب باقة منصة يتوقف deploy مع رابط الشراء، ويتابع cdnctl init --wait بعد الدفع.
استكشاف الأخطاء: أعطال واجهناها فعلًا
كل سطر عطل حقيقي من تشغيلات حية مع الحل الذي نجح.
- الحاوية تنهار مباشرة بعد النشر برسالة ERR_DLOPEN_FAILED — الصورة تحوي node_modules منسوخًا من جهازك (وحدات أصلية مبنية لمنصة خاطئة). الحل: أضف node_modules إلى .dockerignore ودع npm install يعمل داخل البناء. يلتقط cdnctl check ذلك قبل الرفع.
- Build failed في أول نشر — اقرأ سجل البناء الذي يطبعه cdnctl deploy؛ أكثر الأسباب شيوعًا بعد node_modules اعتماد موجود محليًا وغائب عن package.json/requirements.
- التطبيق يظهر stopped بعد الإنشاء — شغّل cdnctl deploy مجددًا (الإصدار 0.18.0+ يطلق الطرح بنفسه؛ الإصدارات الأقدم كانت تحتاج deploy صريحًا).
- الموقع لا يستجيب رغم نجاح البناء — الخادم يستمع إلى 127.0.0.1 أو إلى منفذ مختلف عن cdnctl.yaml. استمع إلى 0.0.0.0 وإلى المنفذ المعلن؛ يكشف check الاستماع إلى localhost.
- healthcheck لا ينجح أبدًا — المسار لا يعيد 200 أو يحتاج التطبيق وقتًا أطول للإقلاع؛ تحقق من المسار محليًا أولًا.
الأوامر من البداية إلى النهاية
cdnctl init # اكتشاف المشروع وكتابة cdnctl.yaml + Dockerfile
cdnctl check # فحص محلي مسبق: الأخطاء توقف والتحذيرات تنبه
cdnctl deploy # حزم → رفع → بناء → رابط مباشر
cdnctl container apps logs --app <app_uuid> --tail 100 # سجلات التشغيل
cdnctl deploy-token create --name "agent" # رمز مقيد لوكلاء الذكاء الاصطناعي