Skip to Content
استقرارساخت و تشخیص استک

ساخت و تشخیص استک

گردو برای ساختن برنامه دو راه دارد:

  1. اگر Dockerfile دارید، همان را می‌سازد و کاری به تشخیص استک ندارد.
  2. اگر ندارید، از روی فایل‌های پروژه استک را تشخیص می‌دهد و با یک Dockerfile آماده و آزموده می‌سازد.

تشخیص استک

گردو فایل‌های ریشهٔ پروژه (یا «پوشهٔ ریشه» اگر تنظیمش کرده‌اید) را به این ترتیب بررسی می‌کند و اولین مورد را برمی‌دارد:

اگر این را پیدا کنداستک
go.modGo
Cargo.tomlRust
GemfileRuby (Rails یا Rack)
composer.jsonLaravel اگر laravel/framework در آن باشد، وگرنه PHP
manage.py، یا django در فایل‌های وابستگیDjango
requirements.txt، Pipfile یا pyproject.tomlPython
package.jsonبسته به وابستگی‌ها: Next.js، Astro، SvelteKit، Nuxt/Vue، React، یا Node.js
هیچ‌کدام، ولی فایل HTML هستسایت استاتیک

در پروژه‌های Node، اگر اسکریپت start در package.json سرور خودش را اجرا کند (مثلاً Express)، استک Node.js است، حتی اگر React هم در وابستگی‌ها باشد.

اگر تشخیص اشتباه بود، در تنظیمات سرویس «استک» را دستی انتخاب کنید.

دستورهای پیش‌فرض

اگر «دستور ساخت» یا «دستور اجرا» را خالی بگذارید، این‌ها اجرا می‌شوند:

استکساختاجرا
Next.jsnpm run buildnpm start
React، Vue، SvelteKit (استاتیک)npm run buildپوشهٔ dist سرو می‌شود؛ مسیرهای ناشناخته به index.html می‌روند
Astronpm run buildپوشهٔ dist سرو می‌شود
سایت استاتیکnpm run build اگر وجود داشته باشدریشهٔ پروژه سرو می‌شود
Node.jsnpm run build اگر وجود داشته باشدnpm start، وگرنه index.js، server.js یا dist/index.js
Python—uvicorn یا gunicorn اگر در وابستگی‌ها باشد، وگرنه app.py یا main.py
Djangocollectstaticgunicorn با فایل wsgi.py پروژه
Gogo build بستهٔ mainباینری ساخته‌شده
PHP—سرور PHP روی پوشهٔ public (یا ریشه)
Laravel—php artisan serve
Rubyassets:precompile برای Railsrails server یا rackup
Rustcargo build --releaseباینری ساخته‌شده

مدیر بستهٔ Node از روی lock file انتخاب می‌شود.

نسخهٔ زبان

گردو نسخه‌ای را می‌سازد که پروژه اعلام کرده. اولین جایی که نسخه در آن پیدا شود برنده است:

زباناز کجا خوانده می‌شودنسخه‌های موجودپیش‌فرض
Node.jsNODE_VERSION، .nvmrc، .node-version، .tool-versions، volta.node یا engines.node در package.json22، 24، 2622
PythonPYTHON_VERSION، .python-version، runtime.txt، .tool-versions، Pipfile، requires-python در pyproject.toml3.9 تا 3.143.14
GoGO_VERSION، خط toolchain یا go در go.mod، .tool-versions1.22 تا 1.261.24
PHPPHP_VERSION، config.platform.php یا require.php در composer.json، .tool-versions8.2، 8.3، 8.48.3
RubyRUBY_VERSION، .ruby-version، .tool-versions، Gemfile، Gemfile.lock3.1 تا 3.43.3
RustRUST_VERSION، rust-toolchain.tomlنسخه‌های پایدار 1.xآخرین نسخهٔ پایدار

متغیرهای NODE_VERSION و بقیه را مثل هر متغیر دیگری روی سرویس تعریف کنید. نسخه را می‌شود به شکل بازه نوشت (>=20، ^22، lts/*). اگر چند نسخهٔ موجود داخل بازه باشند، گردو نزدیک‌ترینشان به نسخهٔ پیش‌فرض را انتخاب می‌کند؛ برای نسخهٔ مشخص، عدد دقیق بنویسید (24).

خط اول گزارش ساخت نشان می‌دهد چه نسخه‌ای انتخاب شده و از کجا، مثلاً:

Using Node.js 24 (from .nvmrc: "lts/*")

اگر نسخهٔ اعلام‌شده موجود نباشد، ساخت متوقف نمی‌شود. گردو نزدیک‌ترین نسخهٔ موجود را برمی‌دارد و در گزارش می‌نویسد:

Node.js 18 is not available on Gerdoo; using 22 instead. Supported: 22, 24, 26.

ساخت با Dockerfile

اگر Dockerfile در ریشه (یا «پوشهٔ ریشه») باشد، گردو همان را می‌سازد. اگر Dockerfile جای دیگری است، «مسیر Dockerfile» را بدهید (مثلاً docker/api.Dockerfile) و اگر لازم است «زمینهٔ ساخت»، یعنی پوشه‌ای که COPYها از آن خوانده می‌شوند.

  • برنامه همچنان باید روی PORT یا «پورت داخلی» سرویس گوش بدهد. EXPOSE در Dockerfile به تنهایی کافی نیست.
  • متغیرهای زمان ساخت بعد از هر خط FROM به شکل ENV اضافه می‌شوند، پس در همهٔ مرحله‌های ساخت در دسترس‌اند و لازم نیست ARG تعریف کنید. اگر Dockerfile بعداً با ENV همان نام را دوباره مقدار بدهد، مقدار Dockerfile برنده است.
  • ساخت چندمرحله‌ای (multi-stage) پشتیبانی می‌شود و برای کوچک‌تر شدن ایمیج توصیه می‌شود.

سایت‌هایی که از Vercel آمده‌اند

اگر سایت استاتیک یا React/Vue/Astro/SvelteKit شما vercel.json دارد، گردو redirectها، rewriteها، هدرها و cleanUrls آن را اعمال می‌کند. جزئیات و محدودیت‌ها در فایل‌های پیکربندی.

اگر ساخت شکست خورد

گزارش ساخت را از زبانهٔ «استقرارها» باز کنید و از آخر به بالا بخوانید. رایج‌ترین دلیل‌ها و راه‌حلشان در عیب‌یابی ساخت آمده است.

وابستگی‌ها از آینه‌های داخلی npm، PyPI و Go نصب می‌شوند تا ساخت از ایران سریع و پایدار باشد. لازم نیست چیزی تنظیم کنید.

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