လွယ်လွယ်ပြောရရင် Environment Variable ဆိုတာ Program ကို run တဲ့အခါ အပြင်ကနေ ပေးလိုက်တဲ့ တန်ဖိုးတွေပါ။ Password, API Key, Database လိပ်စာလို လျှို့ဝှက်ထားရမယ့် အရာတွေကို Code ထဲမှာ တိုက်ရိုက် မရေးဘဲ၊ အပြင်ကနေ သီးသန့် ပေးတဲ့နည်းပဲ။
ကျွန်တော် ဒီသင်ခန်းစာကို ခက်ခက်ခဲခဲ သင်ခဲ့ရတယ်။ အစောပိုင်းက project တစ်ခုမှာ Stripe API Key ကို Code ထဲမှာ တိုက်ရိုက်ရေးထားမိတယ်။ ပြီးတော့ အဲဒီ Code ကို GitHub မှာ Public တင်လိုက်မိတယ်။ ကံကောင်းလို့ သူငယ်ချင်းတစ်ယောက်က မြန်မြန်သတိပေးလို့ Key ကို ချက်ချင်း ဖျက်ပြီး အသစ်ထုတ်နိုင်ခဲ့တယ်။ အဲဒီတုန်းက တစ်ကယ်လန့်သွားတယ်။ Key တစ်ခု Leak ဖြစ်ရင် သူစိမ်းက ကိုယ့်အကောင့်နဲ့ ငွေသုံးလို့ရတယ်။ ဒီအမှားကို ဘယ်တော့မှ ထပ်မလုပ်တော့ဘူး။
အိမ်သော့နဲ့ နှိုင်းရင်
အိမ်သော့ကို တံခါးပေါ်မှာ ကပ်ထားမလား? ဘယ်သူမှ မလုပ်ဘူး။ သော့ကို အိတ်ထဲမှာ သီးသန့် သိမ်းတယ်၊ လိုတဲ့အချိန်မှ ထုတ်သုံးတယ်။ Environment Variable ကလည်း အဲဒီလိုပဲ။ လျှို့ဝှက်ချက်ကို Code ထဲမှာ မရေးဘဲ၊ Code က run တဲ့အချိန်မှ အပြင်ကနေ ဖတ်ယူတယ်။
Code ထဲမှာ တိုက်ရိုက်ရေးထားရင် ဘာဖြစ်မလဲ? Code ကို တစ်နေရာရာမှာ Share လိုက်မိတာနဲ့ လျှို့ဝှက်ချက်ပါ ပါသွားတယ်။ GitHub မှာ Public တင်မိတာ၊ Screenshot ရိုက်ပြီး ပြမိတာ၊ သူငယ်ချင်းကို zip ပို့မိတာ — တစ်ခုခု ဖြစ်တာနဲ့ Key က ပေါက်ကြားပြီ။ အဲဒီအပြင် Code ကို Server အသစ်မှာ run တဲ့အခါ Key က ပြောင်းရင် Code ကို ပြန်ပြင်ရတယ်။ Environment Variable သုံးရင် Code ကို မထိဘဲ အပြင်က တန်ဖိုးပဲ ပြောင်းလိုက်ရုံပဲ။
လက်တွေ့ ဘယ်လို သုံးလဲ?
အသုံးအများဆုံး နည်းက .env ဖိုင်ပဲ။ Project Folder ထဲမှာ .env ဆိုတဲ့ ဖိုင်တစ်ခု ထားပြီး အထဲမှာ အဲဒီလို ရေးတယ် —
STRIPE_API_KEY=sk_live_xxxxxxxxxxxx
DATABASE_URL=postgres://user:pass@localhost:5432/mydb
ပြီးတော့ Code ထဲမှာ အဲဒီလို ဖတ်ယူတယ် —
Python မှာ os.getenv("STRIPE_API_KEY")
Node.js မှာ process.env.STRIPE_API_KEY
Django မှာ settings.py ထဲကနေ os.environ.get("DATABASE_URL")
ဒီလို လုပ်ထားရင် Code က Key ကို မသိဘူး။ Run တဲ့အချိန်မှ ပတ်ဝန်းကျင် (Environment) ကနေ ဖတ်ယူတာ။ Server ပေါ်မှာ run ရင် Server ရဲ့ setting ထဲမှာ တန်ဖိုးကို ထည့်ပေးလိုက်ရုံပဲ။ ကိုယ့်ကွန်ပျူတာမှာ run ရင် ကိုယ့် .env ထဲက တန်ဖိုးကို သုံးတယ်။ Code တစ်ထပ်တည်းပဲ၊ ပတ်ဝန်းကျင်အလိုက် တန်ဖိုးပဲ ကွဲတယ်။
မဖြစ်မနေ လုပ်ရမယ့် အချက်တွေ
.env ဖိုင်ကို Git ထဲ ဘယ်တော့မှ မထည့်နဲ့ — .gitignore ထဲမှာ .env လို့ ရေးထားပါ။ ဒါမှ Code ကို Push လုပ်တဲ့အခါ .env က အလိုလို ချန်ခဲ့မှာ။.env.example ဖိုင် ထားပေးပါ — အထဲမှာ Key နာမည်တွေပဲ ရေးပြီး တန်ဖိုးနေရာမှာ ဗလာထားတာ။ သူငယ်ချင်း project ကို run ချင်ရင် ဘာတွေ လိုလဲဆိုတာ ဒီနမူနာကြည့်ပြီး သိတယ်။
Key တစ်ခု Leak ဖြစ်သွားရင် ချက်ချင်း အသစ်ထုတ်ပါ — Key ကို ဖျက်ပြီး ပြန်ထုတ်တာပဲ တစ်ခုတည်းသော ဖြေရှင်းနည်းပါ။ “လူသိပ်မသိသေးဘူး” လို့ တွေးပြီး ထားလို့မရဘူး။ Bot တွေက GitHub ကို စက္ကန့်ပိုင်းအတွင်း Scan လုပ်နေတာ။
Production မှာ .env ဖိုင်ထက် Secret Manager သုံးပါ — project ကြီးလာရင် AWS Secrets Manager, HashiCorp Vault လို tool တွေက Key ကို ပိုလုံခြုံအောင် သိမ်းပေးတယ်။ ဘယ်သူက ဘယ်အချိန်မှာ Key ကို သုံးသွားလဲဆိုတာပါ မှတ်တမ်းရှိတယ်။
Development Key နဲ့ Production Key ကို ခွဲထားပါ — စမ်းတဲ့အခါ test key သုံးပြီး တကယ့် ငွေနဲ့ ပတ်သက်လာမှ live key သုံးတာ။ Test key leak ဖြစ်လည်း ငွေမဆုံးဘူး။
Environment Variable နဲ့ မဆိုင်တာတွေ
တစ်ခုသတိထားဖို့က Environment Variable က လျှို့ဝှက်ချက်ကို Code ထဲက ဖယ်ပေးရုံပဲ။ Key ကိုယ်တိုင်ကို လုံခြုံအောင် မလုပ်ပေးဘူး။ .env ဖိုင်ကို တစ်ယောက်ယောက် ဖတ်မိရင် Key က ပေါက်ကြားတာပဲ။ ဒါကြောင့် .env ဖိုင်ကိုလည်း ခွင့်ပြုချက်မရှိသူ မဖတ်နိုင်အောင် ထားရတယ်။ Server ပေါ်မှာ file permission ကို ကိုယ်တစ်ယောက်တည်းပဲ ဖတ်လို့ရအောင် သတ်မှတ်ထားပါ။
နောက်တစ်ခုက Frontend Code (Browser မှာ run တဲ့ JavaScript) ထဲမှာ Environment Variable သုံးရင် သတိထားရမယ်။ Browser မှာ run တဲ့ Code က User ရဲ့ ကွန်ပျူတာပေါ်မှာ ရောက်သွားတာ။ အဲဒီထဲမှာ ထည့်ထားတဲ့ Key ကို ဘယ်သူမဆို မြင်လို့ရတယ်။ ဒါကြောင့် တကယ့် Secret Key ကို Frontend မှာ ဘယ်တော့မှ မထည့်ပါနဲ့။ Public Key လောက်ပဲ ထည့်လို့ရတယ်။ Secret က Backend မှာပဲ ရှိရမယ်။
ကျွန်တော့်အတွက်ကတော့ Environment Variable ဆိုတာ အခြေခံကျဆုံး လုံခြုံရေးအလေ့အထတစ်ခုပဲ။ API Key ကို Code ထဲ တိုက်ရိုက်ရေးတာက အိမ်သော့ကို တံခါးပေါ် ကပ်ထားသလိုပဲ — အဆင်ပြေပေမယ့် တစ်နေ့နေ့ ဒုက္ခရောက်မယ်။ ဒီနေ့က စပြီး project တိုင်းမှာ .env သုံးကြည့်ပါ။ 🙂