گردو
راهنمای استقرار Monorepo

دیپلوی monorepo؛ چند سرویس از یک مخزن

دیپلوی monorepo روی گردو: چند سرویس از یک مخزن با Turborepo و pnpm workspace؛ تنظیم پوشه‌ی ریشه، مسیر Dockerfile، زمینه‌ی ساخت و انتشار با CLI.

پاسخ کوتاه

در گردو برای هر برنامه داخل ساختار مونوریپو، مانند apps/web یا apps/api، یک سرویس مجزا روی سکوی ابری بسازید. همه برنامه‌ها به یک مخزن و شاخه متصل می‌شوند؛ فیلد پوشه ریشه محل ساخت را تعیین کرده و مسیرهای تحت نظر از انتشار غیرضروری سایر سرویس‌ها جلوگیری می‌کنند. برای مشاهده تمام راهنماها می‌توانید بخش آموزش دیپلوی را مرور کنید.

آخرین بازبینی: ۱۴۰۵/۰۶/۱۵

مدل دیپلوی monorepo در سکوی ابری گردو

یک مخزن می‌تواند میزبان چندین سرویس مجزا باشد. در دیپلوی چند سرویس، هر برنامه دستور ساخت، دستور اجرا، متغیرهای محیطی، دامنه و مقیاس مستقل خود را دارد، اما همگی در یک پروژه مشترک قرار می‌گیرند:

repo/
├── apps/
│   ├── web/       # سرویس فرانت‌اند
│   └── api/       # سرویس بک‌اند
├── packages/
│   └── shared/    # پکیج کدهای مشترک
├── package.json
└── pnpm-lock.yaml

تنظیم پوشه ریشه، مسیر Dockerfile و زمینه ساخت

  • پوشه ریشه (Root Directory): مسیر پوشه برنامه نسبت به ریشه مخزن؛ برای مثال apps/api. تشخیص استک و اجرای اسکریپت‌ها از این پوشه آغاز می‌شود.
  • مسیر Dockerfile: مسیر فایل داکرفایل نسبت به ریشه کل مخزن، مانند apps/api/Dockerfile. در صورت نیاز به محیط ایزوله خاص، می‌توانید از بستر پیشرفته کانتینر ابری گردو بهره ببرید.
  • زمینه ساخت (Build Context): مقدار . این امکان را می‌دهد تا فایل‌های اشتراکی ریشه و lockfile در دستور COPY داکر در دسترس باشند.

دیپلوی turborepo و فضاهای کاری دارای پکیج مشترک

در فرآیند دیپلوی turborepo اگر برنامه‌ها به کدهای پوشه packages/shared نیاز دارند، کافی است زمینه ساخت را ریشه مخزن قرار دهید:

# پیکربندی استقرار در داشبورد گردو
پوشهٔ ریشه:       apps/api
مسیر Dockerfile:  apps/api/Dockerfile
زمینهٔ ساخت:       .
مسیرهای تحت نظر:
  apps/api/**
  packages/shared/**
  pnpm-lock.yaml

با این تنظیم، تغییر در پکیج‌های مشترک باعث بازسازی خودکار تمام سرویس‌های وابسته می‌شود.

مسیرهای تحت نظر (Watch Paths) و جلوگیری از بیلد اضافه

برای هر سرویس متصل به گیت، انتشار مجدد تنها در صورتی رخ می‌دهد که فایل‌های تغییریافته با الگوهای تحت نظر مطابقت داشته باشند:

  • apps/api/** تمامی فایل‌ها و زیرپوشه‌های API را پوشش می‌دهد.
  • packages/shared/** تغییرات کتابخانه‌های اشتراکی را مانیتور می‌کند.
  • افزودن نام lockfile در ریشه مخزن تضمین می‌کند به‌روزرسانی وابستگی‌ها اعمال شود.

استقرار دیپلوی چند سرویس با ابزار Gerdoo CLI

با استفاده از ابزار خط فرمان گردو، استقرار سرویس‌های مونوریپو از سیستم محلی به آسانی امکان‌پذیر است:

cd repo
gerdoo deploy . \
  --name api \
  --root-dir apps/api \
  --dockerfile apps/api/Dockerfile \
  --build-context . \
  --port 8080

سوالات پرتکرار

monorepo چیست و چه مزایایی برای تیم‌های توسعه دارد؟

در پاسخ به این که monorepo چیست باید گفت مونوریپو یک استراتژی مدیریت کد است که در آن چندین پروژه و سرویس مستقل نرم‌افزاری در یک مخزن گیت واحد نگهداری می‌شوند. این روش اشتراک کدهای مشترک، هماهنگی پکیج‌ها و بازطراحی‌های بزرگ را به شدت آسان می‌کند.

دیپلوی monorepo در گردو کلاد چگونه انجام می‌شود؟

برای دیپلوی monorepo کافی است مخزن را متصل کرده و برای هر برنامه یک سرویس مجزا با پوشه ریشه (Root Directory) مشخص تعریف کنید. سیستم با تشخیص تغییرات در مسیرهای تحت نظر (Watch Paths)، تنها سرویس‌های تغییریافته را مجدداً بیلد و منتشر می‌کند.

آیا دیپلوی turborepo و ابزارهای pnpm workspace پشتیبانی می‌شوند؟

بله، فرآیند دیپلوی turborepo و فضاهای کاری pnpm، yarn و npm با تعیین زمینه ساخت (Build Context) مناسب کاملاً پشتیبانی می‌شوند تا دسترسی به فایل‌های ریشه و بسته‌های اشتراکی حفظ گردد.

دیپلوی چند سرویس از یک مخزن واحد چه تاثیری بر مصرف منابع دارد؟

در دیپلوی چند سرویس، هر سرویس به صورت کانتینر مجزا با منابع اختصاصی رم و پردازنده اجرا می‌شود و هزینه هر یک به طور مستقل و ساعتی بر اساس مصرف واقعی محاسبه می‌گردد.