Loading...

محیط‌ها

محیط‌های blue/green (preprod ⇄ prod)

یک نسخه preprod از برنامه خود اجرا کنید، هر چقدر لازم است بدون دست‌زدن به production تست کنید، سپس دامنه زنده را فوراً به آن تغییر دهید و به همان سرعت بازگردانید.

بازگشت به راهنمای پلتفرم

چگونه کار می‌کند

  • هر پروژه دو محیط دارد: prod (زنده) و preprod. هرکدام یک برنامه عادی با زیردامنه تست اختصاصی ca-*.cdn.com.tr هستند.
  • Promote دامنه production را در عرض چند ثانیه و بدون قطعی از prod به preprod می‌برد؛ Rollback به همان سرعت بازمی‌گرداند.
  • در تب Platforms حساب → Managed Container Apps، پنل «محیط‌های Blue/Green» (درست بالای برنامه‌های شما) شامل Create preprod، Promote و Rollback است.

ساخت و تست preprod

  • روی برنامه prod دکمه "Create preprod" را بزنید: image، env، secretها، منابع و health check در یک برنامه preprod جدید کلون می‌شود.
  • برنامه preprod را deploy کنید و در زیردامنه خودش هر چقدر لازم است تست کنید؛ production دست‌نخورده می‌ماند.
  • وقتی آماده شد، Promote را بزنید تا preprod زنده شود؛ اگر مشکلی بود، Rollback فوراً به برنامه قبلی بازمی‌گردد.
  • اگر مخزن با auto-deploy متصل باشد، Deployment pipeline را ترجیح دهید: هر push به‌طور خودکار Staging را مستقر می‌کند و production فقط هنگام Promote تغییر می‌کند (به راهنمای «Deployment pipeline» مراجعه کنید).

وضعیت (پایگاه‌داده و استاتیک) و بازگشت‌پذیری

  • shared: preprod از همان DB/Redis مدیریت‌شده و همان bucketهای object storage مانند prod استفاده می‌کند (بدون کپی). مناسب تغییرات کد/UI.
  • clone: preprod یک MySQL مدیریت‌شده اختصاصی با کپی داده‌های prod می‌گیرد؛ برای تغییرات داده/اسکیما امن است.
  • isolated: preprod از حالت پاک شروع می‌کند.
  • Promote ابتدا یک snapshot خودکار از DB می‌گیرد؛ Rollback آن را بازمی‌گرداند، بنابراین تغییرات داده هم بازگشت‌پذیرند. استاتیک روی volume دائمی قابل اشتراک است (RWX) تا آپلودها سازگار بمانند.

ساخت و تست یک preprod

  • یک حالت state انتخاب کنید و روی Create preprod کلیک کنید (تک‌اپ، یا «from all apps» برای کل حساب). این کار image، env، secretها، منابع و health check هر اپ را در یک اپ preprod جدید کلون می‌کند.
  • اپ(های) preprod را مستقر کنید و روی زیردامنه‌های ca-* اختصاصی‌شان هر چقدر لازم دارید تست کنید — production در تمام این مدت فعال و دست‌نخورده باقی می‌ماند.
  • وقتی آماده شد، روی Promote کلیک کنید؛ اگر پس از انتشار چیزی درست به‌نظر نرسید، روی Rollback کلیک کنید تا ترافیک بی‌درنگ به اپ‌های قبلی بازگردد.

State (پایگاه‌داده و فایل‌های ثابت) — چه چیزی را preprod با prod به اشتراک می‌گذارد

  • shared (پیش‌فرض): preprod از همان DB/Redis مدیریت‌شده و باکت‌های object-storage مشترک با prod استفاده می‌کند، از طریق ارجاع‌های امن بین‌اپی (بدون کپی). بهترین گزینه برای تغییرات کد/UI.
  • clone: preprod یک MySQL مدیریت‌شده اختصاصی با یک کپی از داده‌های prod می‌گیرد — برای تست تغییرات داده یا schema امن است؛ داده‌های prod دست‌نخورده می‌ماند. (کپی داده Postgres هنوز پشتیبانی نمی‌شود — خالی شروع می‌شود.)
  • isolated: preprod تمیز و با افزونه‌های تازه اختصاصی خود شروع می‌شود.
  • فایل‌های ثابت روی یک persistent volume می‌توانند به اشتراک گذاشته شوند (CephFS RWX) تا آپلودها در همه محیط‌ها یکسان بمانند.

برگشت‌پذیری و محدودیت‌ها

  • ترافیک — با دامنه اختصاصی متصل‌شده: Promote ابتدا دامنه را به اپ جدید متصل می‌کند، سپس اپ قدیمی را آزاد می‌کند (بدون وقفه)؛ Rollback همان جابه‌جایی در جهت معکوس است — در حد چند ثانیه، نه یک بازسازی.
  • ترافیک — production فقط روی زیردامنه ca-*.cdn.com.tr خود: Promote، image تست‌شده Staging را با یک rolling update بدون وقفه روی اپ production اعمال می‌کند (pod قدیمی تا آماده‌شدن pod جدید سرویس می‌دهد). آدرس‌ها ثابت می‌مانند؛ پیکربندی (env/secrets) به‌عمد همراه image منتقل نمی‌شود.
  • داده: Promote ابتدا یک snapshot خودکار از پایگاه‌داده می‌گیرد و Rollback آن را بازیابی می‌کند، بنابراین تغییرات داده‌ای که پس از انتشار اعمال شده‌اند نیز قابل بازگشت هستند.
  • دامنه اثر: همه‌چیز درون یک حساب انجام می‌شود، بنابراین مالکیت DNS و گواهی production هرگز تحت تأثیر قرار نمی‌گیرند.
  • هنوز پشتیبانی نمی‌شود: ارتقای بین‌حسابی، کپی داده Postgres هنگام clone، و promote کاملاً تراکنشی همه‌یا‌هیچ روی چند اپ (این کار به‌صورت best-effort برای هر اپ انجام می‌شود، با گزارش خطای مجزا برای هر اپ).