နားလည်ထားရမယ့် အချက်
Application တစ်ခုကို "deploy" လုပ်တယ်ဆိုတာ developer ရဲ့ ကိုယ်ပိုင် computer ကနေ အင်တာနက်ပေါ်က user အစစ်တွေ ရောက်နိုင်တဲ့ နေရာသို့ ရွှေ့တာကို ဆိုလိုပါတယ်။
Code ရေးမယ်
Local machine ပေါ်မှာ လွတ်လပ်စွာ ရေးသား စမ်းသပ်တယ်။
Build
Compile/bundle/optimize လုပ်ပြီး run နိုင်တဲ့ ပုံစံ ဖြစ်လာတယ်။
Deploy
Build ပြီးသား ရလဒ်ကို server (သို့) cloud platform ပေါ် တင်တယ်။
Domain ချိတ်မယ်
Domain name က အဲဒီ server ကို ညွှန်ပြပေးတယ်။
User တွေ ဖွင့်ကြည့်
User တွေက domain ကို browser ထဲရိုက်ပြီး app ကို ဖွင့်ကြည့်ကြတယ်။
စတင်လေ့လာသူများ အထင်အမှားများသည် deployment ဆိုတာ ဓာတ်ပုံကို USB drive ပေါ် copy ကူးသလိုမျိုး ဖိုင်တွေကို server ပေါ် upload လုပ်ရုံပဲလို့ ထင်ကြပါတယ်။ တကယ်တော့ deployment မှာ build process, environment configuration နဲ့ keyboard ကနေ ထွက်သွားပြီးနောက်လည်း အလုပ်ဆက်လုပ်နေရမယ့် live system တစ်ခု ပါဝင်ပါတယ်။
- Development — ကိုယ့်ကိုယ်ပိုင် machine၊ လွတ်လပ်စွာ စမ်းသပ်နိုင်တယ်
- Staging — production ရဲ့ private copy၊ release မလုပ်ခင် စမ်းသပ်ဖို့
- Production — user အစစ်တွေ မှီခိုနေတဲ့ live system
ဒီ lesson ဟာ ဒီ course တစ်ခုလုံးရဲ့ မြေပုံဖြစ်ပါတယ်။ နောက်ပိုင်း lesson တွေနဲ့ ဒီ site ပေါ်က Docker, Kubernetes, Terraform, AWS, CI/CD deep-dive tutorial တွေက ဒီပုံကြီးရဲ့ အစိတ်အပိုင်းတစ်ခုစီကို အသေးစိတ် ဆက်လက် လေ့လာပေးမှာပါ။
- Deployment
- Code ကို build ပြီး user အစစ်တွေ ရောက်နိုင်တဲ့ live server (သို့) cloud platform ပေါ်ကို တင်ခြင်း လုပ်ငန်းစဉ်။
- Production
- User အစစ်တွေ တကယ် သုံးနေတဲ့ live environment — uptime, correctness, security တွေ အရေးကြီးတဲ့ နေရာ။
- Staging
- Production ရဲ့ private copy တစ်ခု — user အစစ်တွေဆီ မရောက်ခင် အပြောင်းအလဲတွေကို စမ်းသပ်ဖို့ သုံးတယ်။
FROM CODE TO USERS
------------------
[ Your Code ]
|
v
[ Build ] (compile, bundle, optimize)
|
v
[ Deploy ] (push to a server or cloud platform)
|
v
[ Server / Cloud ]
|
v
[ Domain ] (thutatech.com)
|
v
[ Users ]လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
Project အစစ်တွေက URL တစ်ခု (သို့) setting တစ်ခုတည်းကို hardcode မလုပ်ကြပါ။ အစား environment တစ်ခုစီအတွက် — development, staging, production — config သေးသေးလေးကို သတ်မှတ်ထားပြီး run နေတဲ့ app က မှန်ကန်တဲ့ config ကို ရွေးချယ်စေပါတယ်။ အောက်က ဥပမာက ဒီပုံစံရဲ့ ရိုးရှင်းတဲ့ version ဖြစ်ပါတယ် — environment တစ်ခုစီအတွက် entry တစ်ခုစီ ပါဝင်တဲ့ plain object တစ်ခု ဖြစ်ပြီး URL နဲ့ debug logging on/off ကို သိမ်းထားတယ်။
Development နဲ့ staging တို့မှာ debug logging ကို on ထားတယ် — testing လုပ်နေချိန် visibility လိုချင်လို့ပါ။ Production ကတော့ off ထားတယ် — verbose log တွေက information ပေါက်ကြားနိုင်ပြီး user အစစ်တွေရှေ့မှာ system ကို နှေးစေနိုင်လို့ပါ။
Object ကို loop ပတ်ပြီး environment တစ်ခုစီရဲ့ setting ကို print ထုတ်တာက app အစစ်တစ်ခု startup မှာ လုပ်တာနဲ့ တူတယ် — ဘယ် environment မှာ run နေလဲ ဖတ်ပြီး၊ ကိုက်ညီတဲ့ config ကို ရှာပြီး၊ အလိုက် configure လုပ်တယ်။ ဒါက ဒီ site ရဲ့ deep-dive tutorial တွေမှာ ပိုစနစ်တကျ ပုံစံနဲ့ ထပ်တွေ့ရမယ့် idea ပါ — Docker image, Terraform variable, CI/CD pipeline တွေက အလို config ကို လူတစ်ယောက်က deploy တိုင်း manual ပြင်စရာ မလိုအောင် မှန်ကန်တဲ့ environment ဆီ အလိုအလျောက် ရောက်စေဖို့ တစိတ်တပိုင်း ရှိနေကြပါတယ်။
အတူတူ စမ်းရေးကြည့်မယ်
const environments = {
development: { url: "http://localhost:3000", debug: true },
staging: { url: "https://staging.thutatech.com", debug: true },
production: { url: "https://thutatech.com", debug: false }
};
for (const [name, config] of Object.entries(environments)) {
console.log(`${name}: ${config.url} (debug: ${config.debug})`);
}development: http://localhost:3000 (debug: true)
staging: https://staging.thutatech.com (debug: true)
production: https://thutatech.com (debug: false)၅ မိနစ် စမ်းကြည့်
ကိုယ်ပိုင် project တစ်ခု (real (သို့) hypothetical) အတွက် environments object ကို ကူးရေးပြီး field တစ်ခု ထပ်ထည့်ပါ — apiTimeoutMs ဆိုပြီး production မှာ တိုတိုထား၊ development မှာ ရှည်ရှည်ထားပါ။ ပြီးရင် loop ကို run ပြီး output ဘယ်လို ပြောင်းလဲသွားလဲ ကြည့်ပါ။
သတိလေးတစ်ချက်
Deployment ဆိုတာ ဖိုင် upload ရုံပဲလို့ ထင်ခြင်း — build step, config, ongoing operation တွေကို လျစ်လျူရှုတတ်တယ်
Development, staging, production ကို ခွဲမခြားဘဲ config တစ်ခုတည်း အားလုံးမှာ သုံးမိခြင်း
Wikipedia: Deployment environment — Cloud & Deployment