Skip to Content
استقراراولین استقرار

اولین استقرار

برای آنلاین کردن یک برنامه کافی است بگویید کد کجاست. گردو کد را می‌خواند، استک را تشخیص می‌دهد، برنامه را می‌سازد، اجرا می‌کند و یک آدرس HTTPS به آن می‌دهد. سرور، داکر یا وب‌سرور لازم نیست تنظیم کنید.

از انتخاب مخزن تا آدرس آنلاین، حدود دو دقیقه

از کجا شروع کنید

در صفحهٔ اپلیکیشن «سرویس جدید» را بزنید. چهار منبع دارید:

منبعکِی مناسب استراهنما
از گیت‌هابکد در GitHub یا GitLab است و می‌خواهید هر push خودکار منتشر شودGitHub و GitLab
بارگذاری پوشهگیت ندارید یا فقط می‌خواهید سریع امتحان کنیدبارگذاری پوشه
ایمیج داکرایمیج را خودتان در CI ساخته‌اید یا یک نرم‌افزار آماده را اجرا می‌کنیدایمیج داکر
قالب آمادهوردپرس، n8n، Ghost و ده‌ها برنامهٔ آمادهبازارچه

اگر ابزار خط فرمان را نصب کرده‌اید، gerdoo deploy در پوشهٔ پروژه همین کار را از ترمینال می‌کند. CLI را ببینید.

مراحل

منبع را انتخاب کنید

مثلاً «از گیت‌هاب»، بعد مخزن و شاخه را انتخاب کنید.

پیشنهادها را بررسی کنید

گردو کد را می‌خواند و در صفحهٔ «تنظیمات سرویس» استک، دستور ساخت، دستور اجرا و متغیرهای محیطی‌ای را که در کد پیدا کرده پیشنهاد می‌دهد. بیشتر وقت‌ها لازم نیست چیزی را عوض کنید. اگر کد از متغیری مثل DATABASE_URL استفاده می‌کند، همین‌جا مقدارش را می‌خواهد.

«انتشار» را بزنید

سرویس ساخته می‌شود و صفحه‌اش باز می‌شود. گزارش ساخت را زنده می‌بینید.

آدرس را باز کنید

وقتی وضعیت «در حال اجرا» شد، آدرس پیش‌فرض سرویس آماده است. می‌توانید بعداً دامنهٔ خودتان را وصل کنید.

تنظیمات صفحهٔ راه‌اندازی

همهٔ این‌ها را بعداً هم از زبانهٔ «تنظیمات» سرویس می‌توانید تغییر دهید.

  • نام سرویس: در آدرس پیش‌فرض و فهرست سرویس‌ها دیده می‌شود.
  • استک: معمولاً خودکار تشخیص داده می‌شود. اگر اشتباه بود، دستی انتخابش کنید. ساخت و تشخیص استک
  • نوع دسترسی: «وب (HTTP)» برای سایت و API که آدرس عمومی می‌گیرند؛ «خصوصی (فقط داخل پروژه)» برای سرویس‌هایی مثل worker یا API داخلی که فقط سرویس‌های همین اپلیکیشن به آن‌ها وصل می‌شوند. اتصال TCP خام را بعد از ساخت از تنظیمات فعال می‌کنید. شبکه
  • پورت داخلی: اگر برنامه روی پورتی که در متغیر PORT به آن داده می‌شود گوش می‌دهد، خالی بگذارید. اگر پورتش ثابت است (مثلاً ایمیجی که روی 80 گوش می‌دهد)، همان عدد را بنویسید.
  • دستور ساخت و دستور اجرا: فقط وقتی پر کنید که پیش‌فرض استک برایتان کار نمی‌کند.
  • پوشهٔ ریشه: اگر برنامه در زیرپوشه‌ای از مخزن است (مثلاً apps/web در یک monorepo).
  • مسیر Dockerfile و زمینهٔ ساخت: اگر Dockerfile در ریشهٔ مخزن نیست.
  • مسیرهای تحت نظر: در monorepo، فقط تغییر این مسیرها ساخت تازه را شروع می‌کند. هر خط یک الگو.
  • تعداد رپلیکا: چند نسخه از برنامه هم‌زمان اجرا شود. منابع و مقیاس

قانون اصلی: روی PORT گوش بدهید

برنامهٔ وب باید روی 0.0.0.0 و پورتی که در متغیر محیطی PORT می‌گیرد گوش بدهد. ترافیک و بررسی سلامت به همین پورت می‌رسند. اگر برنامه روی 127.0.0.1 یا پورت دیگری گوش بدهد، ساخت موفق می‌شود ولی سرویس هیچ‌وقت آماده نمی‌شود.

// Node.js / Express app.listen(process.env.PORT || 3000, '0.0.0.0')
# Python / FastAPI uvicorn.run("main:app", host="0.0.0.0", port=int(os.environ.get("PORT", 8000)))
// Go http.ListenAndServe("0.0.0.0:"+os.Getenv("PORT"), nil)

خودتان متغیری به نام PORT تعریف نکنید. گردو همیشه PORT را برابر پورت داخلی سرویس می‌گذارد و اگر مقدار دیگری بنویسید، در گزارش استقرار هشدار می‌دهد و آن را نادیده می‌گیرد. اگر برنامه باید روی پورت دیگری گوش بدهد، «پورت داخلی» را عوض کنید.

بعد از «انتشار» چه می‌شود

وضعیت سرویس به ترتیب این مراحل را طی می‌کند:

  1. در صف: ساخت منتظر نوبت است.
  2. در حال ساخت: کد دریافت می‌شود و ایمیج ساخته می‌شود. «گزارش ساخت» را ببینید.
  3. در حال استقرار: ایمیج تازه اجرا می‌شود و گردو صبر می‌کند تا برنامه روی پورت جواب بدهد.
  4. در حال اجرا: نسخهٔ تازه ترافیک را می‌گیرد و نسخهٔ قبلی خاموش می‌شود.

اگر هر مرحله شکست بخورد، وضعیت «ناموفق» می‌شود و اگر سرویس قبلاً نسخهٔ سالمی داشته، همان نسخه به کارش ادامه می‌دهد. در این حالت بالای صفحه می‌بینید: «آخرین استقرار ناموفق بود؛ سرویس روی نسخهٔ قبلی در حال اجراست». پس استقرار شکست‌خورده سایت را از کار نمی‌اندازد.

در سایت گردوسکوی ابری گردو