Loading...

استقرار · 7 دقیقه مطالعه

cdnctl init → deploy: از پوشه پروژه تا URL زنده

این همراهِ عملی آن روایت است: هر فرمانی که واقعاً تایپ خواهید کرد، با خروجی واقعی‌اش — از نصب CLI تا دیدن پاسخ برنامه‌تان روی یک URL زنده HTTPS. هیچ‌چیز در اینجا به git، یک registry کانتینر یا تجربه قبلی Docker نیاز ندارد — تنها پیش‌نیازها یک پوشه پروژه است که به‌صورت محلی اجرا می‌شود و پلنی که پلتفرم کانتینر را دارد.

7 دقیقه مطالعه مناسب مبتدیان به‌روزرسانی

cdnctl init → deploy: از پوشه پروژه تا URL زنده

چه چیزی لازم دارید (60 ثانیه)

فقط یک چیز: یک پلن cdn.com.tr که پلتفرم کانتینر را شامل شود — همه پلن‌های استاندارد شامل می‌شوند. CLI را با تک‌خط زیر نصب کنید و وارد شوید. روی لینوکس، macOS و ویندوز یکسان کار می‌کند؛ اگر مدیر بسته را ترجیح می‌دهید، مخازن APT/YUM، Homebrew و یک image داکر هم هست.

نصب + ورود
$ curl -fsSL https://cdn.com.tr/downloads/cdnctl/install.sh | sh
$ cdnctl login --email you@company.com

گام 1 — cdnctl init: بگذارید پوشه خودش را معرفی کند

init را داخل پوشه پروژه اجرا کنید. پشته و پورت را تشخیص می‌دهد، یک manifest کوچک به نام cdnctl.yaml می‌نویسد و یک بخش deploy در AGENTS.md می‌گذارد تا agent کدنویس هوش مصنوعی‌تان هم جریان را یاد بگیرد. حسابتان را هم بررسی می‌کند: اگر پلتفرم کانتینر نباشد، دقیقاً لینک خرید را چاپ می‌کند — و با --wait فقط تا کامل‌شدن پرداخت شما در مرورگر مکث می‌کند و بعد خودش ادامه می‌دهد.

cdnctl init
$ cdnctl init
Proje    : gorev-takip (node/express, port 3000)
Agent    : claude-code (claude on PATH), cursor
Paket    : ✓ Large (max 5 app)
Karne    : 2 HATA, 2 uyarı — ayrıntı: cdnctl check
Yazıldı  : cdnctl.yaml, AGENTS.md

→ Önce `cdnctl check` hatalarını düzeltin (deploy sonrası site açılmaz).

گام 2 — cdnctl check: تا ارزان است درستش کنید

check یک linter محلی برای قابلیت استقرار است. خطاها (که سایت زنده را خراب می‌کردند) جلوی deploy را می‌گیرند؛ هشدارها نه. اصلاح‌ها معمولاً تک‌خطی‌اند: به‌جای 127.0.0.1 به 0.0.0.0 گوش کنید، توکن هاردکدشده را به --secret منتقل کنید، یک GET /health اضافه کنید که 200 برگرداند، و پورت را از متغیر محیطی PORT بخوانید.

cdnctl check
$ cdnctl check
[ERROR] bind-localhost (server.js:61)
        The app binds to 127.0.0.1 — unreachable inside a container.
        → Bind to 0.0.0.0 (just drop the host argument).
[ERROR] secret-in-code (server.js:10)
        A hard-coded secret (API key/token/password).
        → Move it to --secret KEY=VALUE; read it via process.env.
[WARNING] sqlite-single-pod
        SQLite loses data on restart / multiple replicas.
        → Mount a persistent disk or switch to a managed database.
[WARNING] no-healthcheck
        No /health route — the platform can’t tell your app is alive.

گام 3 — cdnctl deploy: پوشه داخل، URL بیرون

deploy پوشه را آرشیو می‌کند (node_modules و .git هرگز سفر نمی‌کنند)، آپلودش می‌کند، در sandbox پلتفرم build می‌کند و منتشر می‌کند. خطوط پیشرفت دقیقاً همان معنایی را دارند که می‌گویند؛ وقتی LIVE را دیدید، آن URL همان لحظه روی HTTPS سرویس می‌دهد. به‌روزرسانی‌ها همان فرمان‌اند — build جدید تنها پس از بالا آمدن، جایگزین قدیمی می‌شود.

cdnctl deploy
$ cdnctl deploy
→ archiving source (gorev-takip)
→ uploading (0.1 MB)
→ starting build (Kaniko, isolated sandbox)
   build: running
   build: success        (41 s)
→ creating the app
→ assigning a subdomain
→ first deploy
→ waiting for the app to come up

✓ LIVE: https://ca…….cdn.com.tr

هنوز پلن ندارید؟ دستِ‌دادن با مرورگر

cdnctl init → deploy: از پوشه پروژه تا URL زنده — هنوز پلن ندارید؟ دستِ‌دادن با مرورگر
صفحه خرید، رسیده از مسیر cdnctl: بنر، تحویل را تأیید می‌کند و پلن پیشنهادی علامت خورده است.

اگر init پلتفرم کانتینری روی حسابتان پیدا نکند، شما را همراه با زمینه به صفحه خرید می‌فرستد — صفحه بنری نشان می‌دهد که تأیید می‌کند cdnctl شما را فرستاده و پلن پیشنهادی را علامت می‌زند. مثل همیشه در مرورگر پرداخت کنید؛ صفحه تأیید می‌گوید به ترمینال برگردید و cdnctl (با --wait، یا کافی است init را دوباره اجرا کنید) جریان را خودکار از سر می‌گیرد. نه کپی‌کردن کلیدی، نه پیکربندی‌ای.

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

آپلود سورس به 128 مگابایت محدود است — وقتی node_modules در خانه بماند، کاملاً کافی است. یک build معمولی حدود یک دقیقه طول می‌کشد. اگر برنامه‌تان باید فایل نگه دارد، هنگام deploy یک دیسک پایدار بخواهید یا از object storage استفاده کنید؛ اگر از SQLite استفاده می‌کند، دیتابیس مدیریت‌شده را در نظر بگیرید — check دلیلش را مدام یادآوری خواهد کرد. و اگر یک build شکست بخورد، cdnctl لاگ build را مستقیم چاپ می‌کند؛ رایج‌ترین علت بار اول، Dockerfileای است که node_modules را از ماشین شما کپی می‌کند (آن را به .dockerignore اضافه کنید).

پرسش‌های پرتکرار

می‌توانم دامنه خودم را وصل کنم؟

بله — برنامه بلافاصله یک ساب‌دامنه کارا می‌گیرد و بعداً می‌توانید دامنه خودتان را از پنل یا CLI به آن وصل کنید.

لاگ‌های من کجا هستند؟

cdnctl container apps show و تب «سلامت» پنل وضعیت را پوشش می‌دهند؛ لاگ‌های build را cdnctl deploy هنگام شکست چاپ می‌کند و لاگ‌های زمان اجرا در پنل هستند.

می‌توانم بیش از یک برنامه اجرا کنم؟

بله؛ پلن شما سهمیه برنامه‌ها را تعیین می‌کند. هر پوشه پروژه به‌عنوان یک برنامه مستقل با URL خودش deploy می‌شود.

کدنویسی را agent هوش مصنوعی من انجام می‌دهد — می‌تواند deploy هم بکند؟

بله. init همین حالا از راه AGENTS.md فرمان‌ها را به او می‌آموزد؛ یک توکن فقط-deploy به او بدهید (cdnctl deploy-token create) تا بدون آنکه هرگز رمز حسابتان را در اختیار داشته باشد، منتشر کند.