Loading...

راهنمای پلتفرم

Source Deploy: چگونه یک پوشه ساده به برنامه‌ای در حال اجرا تبدیل می‌شود

مرجع استقرار مبتنی بر پوشه در cdnctl: معماری، فیلدهای cdnctl.yaml، محدودیت‌ها و خطاهایی که واقعاً دیده‌ایم همراه با راه‌حل‌هایشان.

بازگشت به راهنمای پلتفرم

معماری: بعد از cdnctl deploy چه می‌شود

در سمت شما نه مخزن git درگیر است و نه رجیستری کانتینر. خط لوله چنین است:

  • cdnctl پوشه پروژه را در یک tar.gz بسته‌بندی می‌کند (تا ۱۲۸ مگابایت) و زیر حساب شما به پنل بار می‌گذارد.
  • پنل یک URL دانلود امضاشده با اعتبار ۳۰ دقیقه صادر می‌کند — تنها راهی که محیط ساخت می‌تواند به کد شما برسد.
  • یک سندباکس ایزوله (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

محدودیت‌ها — حاشیه صادقانه

  • آرشیو منبع: حداکثر ۱۲۸ مگابایت. پروژه‌های Node با کنار گذاشتن node_modules به‌راحتی جا می‌شوند (.dockerignore را init می‌نویسد).
  • زمان ساخت: برای برنامه‌های معمول Node/Python حدود یک دقیقه؛ ساخت‌های native سنگین بیشتر طول می‌کشند.
  • قالب Dockerfile زبان‌های Node و Python و PHP و سایت‌های استاتیک را می‌شناسد؛ بقیه به Dockerfile دست‌نویس نیاز دارند (deploy همان را عینًا استفاده می‌کند).
  • پرداخت در پنل می‌ماند: اگر حساب بسته پلتفرم نداشته باشد، deploy با پیوند خرید می‌ایستد و cdnctl init --wait پس از پرداخت ادامه می‌دهد.

رفع اشکال: خطاهایی که واقعاً دیده‌ایم

هر سطر یک خطای واقعی از اجراهای زنده است، همراه با راه‌حلی که جواب داد.

  • کانتینر بلافاصله پس از استقرار با ERR_DLOPEN_FAILED در چرخه سقوط می‌افتد — ایمیج شامل node_modules کپی‌شده از دستگاه شماست (ماژول‌های native برای پلتفرم اشتباه). راه‌حل: node_modules را به .dockerignore بیفزایید تا npm install درون ساخت اجرا شود. cdnctl check این را پیش از بارگذاری علامت می‌زند.
  • در نخستین استقرار Build failed — لاگ ساختی را که cdnctl deploy چاپ می‌کند بخوانید؛ رایج‌ترین علت بعد از node_modules وابستگی‌ای است که محلی هست ولی در package.json/requirements نیست.
  • برنامه بعد از create در حالت stopped دیده می‌شود — دوباره cdnctl deploy را اجرا کنید (نسخه 0.18.0+ خودش rollout را می‌زند؛ نسخه‌های قدیمی deploy صریح می‌خواستند).
  • با وجود ساخت موفق، سایت در دسترس نیست — سرور به 127.0.0.1 یا پورتی غیر از cdnctl.yaml گوش می‌دهد. به 0.0.0.0 و پورت اعلام‌شده گوش دهید؛ گوش دادن به localhost را check می‌گیرد.
  • 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"   # توکن محدود برای ایجنت‌های AI