Loading...

دليل المنصة

النشر من المصدر: كيف يتحول مجلد عادي إلى تطبيق يعمل

مرجع النشر من المجلد في 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"   # رمز مقيد لوكلاء الذكاء الاصطناعي