محیطها
محیطهای 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 برای هر اپ انجام میشود، با گزارش خطای مجزا برای هر اپ).