دیپلوی از Docker Image سریعترین راه است: image از registry دریافت میشود و container بدونِ build اجرا میگردد.
پیشنیاز#
- یک image عمومی روی Docker Hub، GHCR یا registryِ عمومیِ دیگر. image خصوصی فعلاً پشتیبانی نمیشود — برای کدِ خصوصی از ساخت از Git استفاده کنید.
- tag مشخص، مثلاً
myorg/api:1.4.0(در production ازlatestپرهیز کنید). - پورتی که اپ داخلِ container رویش گوش میدهد، و bind روی
0.0.0.0(نه فقطlocalhost).
مراحل#
- SERVICES → + NEW SERVICE → Custom app.
- مرحلهی NAME & SIZE: نامِ اپ (هر نامی که دوست دارید) و پک.
- مرحلهی SOURCE: گزینهی Docker Image و نامِ کاملِ image، مثلاً
nginx:alpine. این فیلد نامِ imageی است که اجرا میشود، نه نامِ اپ. پنل قبل از ساخت بررسی میکند که این image در registry وجود دارد؛ اگر پیدا نشود همانجا خطا میدهد. - مرحلهی OPTIONS: پورت (پیشفرض
80). اگر دیتابیس دارید، همینجا میتوانید آن را وصل کنید. - مرحلهی REVIEW: CREATE & DEPLOY.
ویزارد وضعیت و لاگ را زنده نشان میدهد؛ پنجره را ببندید هم دیپلوی ادامه دارد. وقتی RUNNING شد، اپ روی زیردامنهی weblines.ir خودش باز میشود.
| فیلد | نمونه | نکته |
|---|---|---|
| Docker Image | ghcr.io/myorg/api:1.4.0 | کامل، با registry اگر Docker Hub نیست |
| Name | api | در پنل و زیردامنه دیده میشود |
| Port | 3000 | باید با پورتِ واقعیِ اپ یکی باشد |
متغیرهای محیطی#
متغیرهای محیطی را در تبِ Environment تنظیم کنید (متغیرها و گروهها). برای پیکربندیهای غیرمحرمانه دو راه دارید:
- اتصالِ دیتابیس،
DATABASE_URLوDB_*را خودکار تزریق میکند. اتصال به دیتابیس - پیکربندیهای دیگر را در خودِ image بگذارید (بدونِ secret)، یا برای نیازِ خاص تیکت بزنید.
بهروزرسانی#
image اپ بعد از ساخت در پنل عوض نمیشود. برای انتشارِ نسخهی جدید، یک tagِ ثابت مثلِ stable بسازید، هر بار همان را در registry بهروز کنید و روی کارتِ اپ DEPLOY را بزنید تا container با image جدید بالا بیاید. برای جابهجاییِ کامل به imageی دیگر، اپِ جدید بسازید.
خطاهای رایج#
| نشانه | علتِ محتمل |
|---|---|
| RUNNING نمیشود و بارها ریاستارت میشود | پورت اشتباه، یا bind روی localhost |
| image دریافت نمیشود | image خصوصی است، tag وجود ندارد، یا بهجای image نامِ اپ نوشته شده |
exec format error | image برای arm64 ساخته شده؛ amd64 لازم است |
جزئیات بیشتر: خطای دیپلوی. قبل از دیپلوی، image را محلی امتحان کنید:
docker run --rm -p 3000:3000 myorg/api:1.4.0
