راهنمای پلتفرم
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