اولین استقرار
برای آنلاین کردن یک برنامه کافی است بگویید کد کجاست. گردو کد را میخواند، استک را تشخیص میدهد، برنامه را میسازد، اجرا میکند و یک آدرس 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 را برابر پورت داخلی سرویس میگذارد و اگر مقدار دیگری بنویسید، در گزارش استقرار هشدار میدهد و آن را نادیده میگیرد. اگر برنامه باید روی پورت دیگری گوش بدهد، «پورت داخلی» را عوض کنید.
بعد از «انتشار» چه میشود
وضعیت سرویس به ترتیب این مراحل را طی میکند:
- در صف: ساخت منتظر نوبت است.
- در حال ساخت: کد دریافت میشود و ایمیج ساخته میشود. «گزارش ساخت» را ببینید.
- در حال استقرار: ایمیج تازه اجرا میشود و گردو صبر میکند تا برنامه روی پورت جواب بدهد.
- در حال اجرا: نسخهٔ تازه ترافیک را میگیرد و نسخهٔ قبلی خاموش میشود.
اگر هر مرحله شکست بخورد، وضعیت «ناموفق» میشود و اگر سرویس قبلاً نسخهٔ سالمی داشته، همان نسخه به کارش ادامه میدهد. در این حالت بالای صفحه میبینید: «آخرین استقرار ناموفق بود؛ سرویس روی نسخهٔ قبلی در حال اجراست». پس استقرار شکستخورده سایت را از کار نمیاندازد.
در سایت گردوسکوی ابری گردو