استقرار از Monorepo
ابرکلیک از استقرار یک زیرپوشهی خاص از یک monorepo بزرگتر پشتیبانی میکند. این قابلیت به شما امکان میدهد بدون نیاز به جدا کردن مخزنها، هر اپلیکیشن درون monorepo را بهصورت مستقل استقرار دهید.
مفهوم root_dir
فیلد root_dir مشخص میکند کدام زیرپوشه از مخزن شما بهعنوان ریشهی build و استقرار در نظر گرفته شود. تنها محتوای همان پوشه آپلود میشود — نه کل مخزن.
Build context = root_dir. فقط محتوای پوشهی root_dir به سرور آپلود میشود. فایلهای خارج از آن پوشه در دسترس build قرار ندارند.
روشهای تنظیم root_dir
۱. فایل abrclick.json
فایل abrclick.json را در ریشهی مخزن (نه root_dir) ایجاد کنید:
{
"app": "my-api",
"root_dir": "apps/api"
}
با این روش، هر بار که abrclick deploy را اجرا میکنید، مقدار root_dir بهصورت خودکار اعمال میشود.
۲. فلگ CLI
میتوانید مستقیماً در دستور deploy مسیر را مشخص کنید:
abrclick deploy --root-dir apps/web
۳. تنظیمات اپ در داشبورد
در داشبورد ابرکلیک، به بخش Settings اپ مربوطه بروید و فیلد Root Directory را پر کنید.
ساخت اپ با root_dir
هنگام ایجاد اپ جدید، میتوانید root_dir را از همان ابتدا تنظیم کنید:
abrclick apps create --name api --runtime nodejs --root-dir apps/api
abrclick apps create --name frontend --runtime nodejs --root-dir apps/frontend
مثالهای رایج
pnpm Workspace
ساختار معمول یک pnpm workspace:
my-monorepo/
├── pnpm-workspace.yaml
├── package.json
├── apps/
│ ├── api/
│ │ ├── package.json
│ │ └── src/
│ └── web/
│ ├── package.json
│ └── src/
└── packages/
└── shared/
استقرار سرویس api:
abrclick deploy --root-dir apps/api
یا در abrclick.json:
{
"app": "my-api",
"root_dir": "apps/api"
}
برای پروژههای pnpm workspace، مطمئن شوید که pnpm-workspace.yaml در root_dir یا در parent directory وجود دارد تا pnpm dependencies را resolve کند.
Turborepo
ساختار معمول یک پروژهی Turborepo:
my-turborepo/
├── turbo.json
├── package.json
├── apps/
│ ├── frontend/
│ │ ├── package.json
│ │ └── src/
│ └── backend/
│ ├── package.json
│ └── src/
└── packages/
└── ui/
استقرار اپ frontend:
abrclick deploy --root-dir apps/frontend
Nx Monorepo
ساختار معمول یک پروژهی Nx:
my-nx-workspace/
├── nx.json
├── package.json
├── apps/
│ ├── service/
│ │ ├── project.json
│ │ └── src/
│ └── admin/
│ ├── project.json
│ └── src/
└── libs/
└── common/
استقرار سرویس service:
abrclick deploy --root-dir apps/service
هر اپ = یک اپلیکیشن مستقل
هر برنامه در monorepo باید بهعنوان یک اپلیکیشن جداگانه در ابرکلیک تعریف شود و استقرار مستقل داشته باشد.
# ساخت اپهای جداگانه برای هر سرویس
abrclick apps create --name my-api --runtime nodejs --root-dir apps/api
abrclick apps create --name my-frontend --runtime nodejs --root-dir apps/frontend
abrclick apps create --name my-worker --runtime nodejs --root-dir apps/worker
هر اپ آدرس مستقل خود را دارد:
https://my-api.apps.abrclick.cloud
https://my-frontend.apps.abrclick.cloud
https://my-worker.apps.abrclick.cloud
مدیریت Shared Packages
چون فقط محتوای root_dir آپلود میشود، پکیجهای مشترک (مثل packages/shared) در دسترس build قرار ندارند.
برای استفاده از کد مشترک، یکی از روشهای زیر را بهکار ببرید:
۱. Bundle کردن پکیجهای مشترک:
قبل از استقرار، پکیجهای مشترک را با ابزارهایی مثل tsup یا esbuild bundle کرده و خروجی را درون root_dir قرار دهید.
۲. انتشار پکیج در رجیستری:
پکیج مشترک را در npm (یا رجیستری خصوصی خود) منتشر کنید و در package.json اپ بهعنوان dependency معمول اضافه کنید:
{
"dependencies": {
"@my-org/shared": "1.0.0"
}
}
۳. استفاده از Dockerfile سفارشی:
یک Dockerfile سفارشی در root_dir بنویسید که با COPY فایلهای مورد نیاز از پوشههای دیگر را نیز کپی کند. در این حالت، build context کل مخزن خواهد بود.
اگر Dockerfile در root_dir وجود داشته باشد، ابرکلیک از آن استفاده میکند و build context به ریشهی کل آپلود تغییر میکند.