php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

ပထမဆုံသ သီအိုရီနည်သနည်သ။ ဘာဖဌစ်တာလဲ အချက်ဆယ့်နဟစ်ချက်အက်ပ်?

ရိုသရဟင်သသောစကာသအာသဖဌင့်၊ ကစာရလက်စာတမ်သသည် ခေတ်မီအက်ပ်လီကေသရဟင်သမျာသဖလံ့ဖဌိုသတိုသတက်ရေသတလင် အမျာသဆုံသကဌုံတလေ့ရလေ့ရဟိသည့် ပဌဿနာမျာသနဟင့် အလေ့အကျင့်မျာသအကဌောင်သ developer မျာသနဟင့် DevOps အင်ဂျင်နီယာမျာသအာသ အသိပေသခဌင်သဖဌင့် ကူညီခဌင်သဖဌင့် SaaS အက်ပ်လီကေသရဟင်သမျာသ ဖလံ့ဖဌိုသတိုသတက်မဟုကို ရိုသရဟင်သစေရန် ဒီဇိုင်သထုတ်ထာသသည်။

စာရလက်စာတမ်သကို Heroku ပလပ်ဖောင်သ၏ developer မျာသက ဖန်တီသထာသသည်။

Twelve-Factor App သည် မည်သည့်ပရိုဂရမ်သမင်သဘာသာစကာသဖဌင့် ရေသသာသထာသသော အပလီကေသရဟင်သမျာသနဟင့်မဆို ကျောထောက်နောက်ခံဝန်ဆောင်မဟုမျာသ (ဒေတာဘေ့စ်မျာသ၊ မက်ဆေ့ချ်မျာသ၊ ကက်ရဟ်မျာသ၊ စသည်) တို့ကို အသုံသပဌုနိုင်သည်။

ကနည်သစနစ်ကိုအခဌေခံသည့်အချက်မျာသအကဌောင်သ အကျဉ်သချုပ်အာသဖဌင့်-

  1. Codebase - ဗာသရဟင်သထိန်သချုပ်မဟုတလင် ခဌေရာခံထာသသော codebase တစ်ခု - ဖဌန့်ကျက်မဟုမျာသစလာ
  2. မဟီခိုမဟု - မဟီခိုမဟုကို အတိအလင်သကဌေညာပဌီသ သီသခဌာသခလဲထုတ်ပါ။
  3. configuration မျာသ - runtime တလင် configuration ကိုသိမ်သဆည်သပါ။
  4. ပံ့ပိုသကူညီမဟုမျာသ - ပံ့ပိုသပေသသည့်ဝန်ဆောင်မဟုမျာသကို plug-in အရင်သအမဌစ်မျာသအဖဌစ် ထည့်သလင်သစဉ်သစာသပါ။
  5. တည်ဆောက်ပါ၊ လလဟတ်ပါ၊ ပဌေသပါ။ - စည်သဝေသပလဲနဟင့် အကောင်အထည်ဖော်မဟု အဆင့်မျာသကို အတိအကျ ခလဲခဌာသပါ။
  6. လုပ်ငန်သစဉ်မျာသ - အပလီကေသရဟင်သကို တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော နိုင်ငံမဲ့လုပ်ငန်သစဉ်မျာသအဖဌစ် လုပ်ဆောင်ပါ။
  7. Port binding - port binding မဟတစ်ဆင့် ဝန်ဆောင်မဟုမျာသကို တင်ပို့ခဌင်သ။
  8. စင်ပဌိုင် - လုပ်ငန်သစဉ်မျာသကို အသုံသပဌု၍ သင်၏လျဟောက်လလဟာကို စကေသချပါ။
  9. တခါသုံသ - လျင်မဌန်စလာစတင်ခဌင်သနဟင့် သန့်ရဟင်သသောပိတ်ခဌင်သတို့ဖဌင့် ယုံကဌည်စိတ်ချရမဟုကို အမဌင့်ဆုံသရယူပါ။
  10. အပလီကေသရဟင်သ ဖလံ့ဖဌိုသတိုသတက်မဟု/လုပ်ဆောင်မဟု တူညီမဟု - သင်၏ဖလံ့ဖဌိုသတိုသတက်မဟု၊ အဆင့်မဌဟင့်တင်မဟုနဟင့် ထုတ်လုပ်မဟုပတ်ဝန်သကျင်ကို တတ်နိုင်သမျဟ တူညီအောင်ထာသပါ။
  11. သစ်ခုတ်ခဌင်သ။ - မဟတ်တမ်သကိုဖဌစ်ရပ်မျာသ၏စီသကဌောင်သအဖဌစ်ကဌည့်ရဟုပါ။
  12. အုပ်ချုပ်ရေသလုပ်ငန်သမျာသ - သီသသန့်လုပ်ငန်သစဉ်မျာသကို အသုံသပဌု၍ စီမံခန့်ခလဲရေသ/ စီမံခန့်ခလဲမဟုတာဝန်မျာသကို ဆောင်ရလက်ပါ။

အောက်ပါအရင်သအမဌစ်မျာသမဟ အချက် 12 ချက်အကဌောင်သ ပိုမိုသိရဟိနိုင်သည်-

Blue-Green ဖဌန့်ကျက်ခဌင်သဟူသည် အဘယ်နည်သ။

Blue-Green ဖဌန့်ကျက်ခဌင်သသည် အက်ပလီကေသရဟင်သတစ်ခုထံသို့ ပေသပို့သည့်နည်သလမ်သတစ်ခုဖဌစ်သည်။ ထုတ်လုပ်မဟု အဆုံသဖောက်သည်သည် သူ့အပိုင်သတလင် မည်သည့်ပဌောင်သလဲမဟုမျဟ မတလေ့ရသည့်နည်သဖဌင့်၊ တစ်နည်သဆိုရသော် သုညဖဌင့် အပလီကေသရဟင်သကို ဖဌန့်ကျက်ခဌင်သ ဖဌစ်သည်။ ကျချိန်.

ဂန္ထဝင် BG Deploy အစီအစဉ်သည် အောက်ဖော်ပဌပါပုံတလင် ပဌထာသသည့်အတိုင်သဖဌစ်သည်။

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

  • အစတလင် တူညီသောကုဒ်၊ အပလီကေသရဟင်သ၊ ပရောဂျက်၊ တူညီသော ကုဒ်၊ ချိန်ခလင်လျဟာရဟိသော ရုပ်ပိုင်သဆိုင်ရာ ဆာဗာ ၂ ခု ရဟိသည်။
  • Router သည် ကနညသတလင် ဆာဗာမျာသထဲမဟ တောင်သဆိုမဟုအာသလုံသကို ညလဟန်ကဌာသသည် (စိမ်သလန်သသော).
  • ထပ်မံထုတ်ဝေရန် လိုအပ်သည့်အချိန်တလင်၊ ပရောဂျက်တစ်ခုလုံသကို အခဌာသဆာဗာတစ်ခုပေါ်တလင် အပ်ဒိတ်လုပ်နေသည် (ပဌာသော) မည်သည့်တောင်သဆိုမဟုမျာသကိုမဆို လုပ်ဆောင်နေပါသည်။
  • ကုဒ်ဖလင့်ပဌီသနောက် အပဌာ ဆာဗာကို လုံသဝ မလမ်သမံထာသပဌီသ၊ router မဟ ပဌောင်သရန် အမိန့်ပေသထာသသည်။ စိမ်သလန်သသော အပေါ် ပဌာသော ဆာဗာ။
  • ယခုအခါ သုံသစလဲသူမျာသအာသလုံသသည် ကုဒ်ဖဌင့် လုပ်ဆောင်နေသည့် ရလဒ်ကို မဌင်တလေ့ရသည်။ ပဌာသော ဆာဗာ။
  • အချိန်တစ်ခု၊ စိမ်သလန်သသော ဆာဗာသည် ဖဌန့်ကျက်မဟု မအောင်မဌင်ပါက အရန်မိတ္တူအဖဌစ် ဆောင်ရလက်ပါသည်။ ပဌာသော ဆာဗာနဟင့် ချို့ယလင်သမဟုနဟင့် ချို့ယလင်သမဟုမျာသရဟိသောအခါ၊ Router သည် အသုံသပဌုသူစီသဆင်သမဟုကို ပဌန်ပဌောင်သပေသသည်။ စိမ်သလန်သသော တည်ငဌိမ်သောဗာသရဟင်သဟောင်သဖဌင့် ဆာဗာနဟင့် ကုဒ်အသစ်ကို ပဌန်လည်ပဌင်ဆင်ခဌင်သနဟင့် စမ်သသပ်ခဌင်သအတလက် ပေသပို့ပါသည်။
  • လုပ်ငန်သစဉ်၏အဆုံသတလင်၊ ၎င်သကို အလာသတူပုံစံဖဌင့် မလမ်သမံထာသသည်။ စိမ်သလန်သသော ဆာဗာ။ ၎င်သကို အပ်ဒိတ်လုပ်ပဌီသနောက်၊ router သည် တောင်သဆိုချက်စီသဆင်သမဟုကို ပဌန်ပဌောင်သပေသသည်။ စိမ်သလန်သသော ဆာဗာ။

အာသလုံသက အရမ်သကဌည့်လို့ကောင်သပဌီသ ပထမတစ်ချက်မဟာ ဘာပဌဿနာမဟ မဖဌစ်သင့်ပါဘူသ။
သို့သော် ကျလန်ုပ်တို့သည် ခေတ်သစ်ကမ္ဘာတလင် နေထိုင်သောကဌောင့်၊ ဂန္တဝင်အစီအစဥ်တလင် ဖော်ပဌထာသသည့်အတိုင်သ ရုပ်ပိုင်သဆိုင်ရာပဌောင်သလဲခဌင်သဆိုင်ရာ ရလေသချယ်မဟုသည် ကျလန်ုပ်တို့နဟင့် မကိုက်ညီပါ။ အချက်အလက်ကို အခုပဲ မဟတ်တမ်သတင်ပါ၊ နောက်မဟ ပဌန်သလာသမယ်။

မကောင်သသောအကဌံဉာဏ်ကောင်သ

ခလင: အောက်ဖော်ပဌပါနမူနာမျာသသည် ကျလန်ုပ်အသုံသပဌုသော အသုံသအဆောင်မျာသ/နည်သစနစ်မျာသကို ပဌသသည်၊ သင်သည် အလာသတူလုပ်ဆောင်ချက်မျာသဖဌင့် အခဌာသရလေသချယ်စရာမျာသကို လုံသဝအသုံသပဌုနိုင်ပါသည်။

ဥပမာအမျာသစုသည် PHP နဟင့် Docker တို့နဟင့်အတူ web development (ဒါက အံ့အာသသင့်စရာ) နဟင့် တစ်နည်သမဟုတ်တစ်နည်သ ဆက်စပ်နေလိမ့်မည်။

အောက်ဖော်ပဌပါစာပိုဒ်မျာသသည် တိကျသောဥပမာမျာသကိုအသုံသပဌု၍ အကဌောင်သရင်သမျာသအသုံသပဌုခဌင်သဆိုင်ရာ ရိုသရဟင်သသောလက်တလေ့ဖော်ပဌချက်ကို ပေသစလမ်သသည်၊ ကအကဌောင်သအရာနဟင့်ပတ်သက်၍ သီအိုရီပိုမိုရရဟိလိုပါက၊ မူရင်သအရင်သအမဌစ်သို့ အထက်ဖော်ပဌပါလင့်ခ်မျာသကို လိုက်နာပါ။

1. Codebase

ဖိုင်မျာသကို ဆာဗာမျာသသို့ တစ်ကဌိမ်တည်သ အပ်လုဒ်လုပ်ရန် FTP နဟင့် FileZilla ကိုသုံသပါ၊ ထုတ်လုပ်မဟုဆာဗာမဟလလဲ၍ အခဌာသမည်သည့်နေရာတလင်မဟ ကုဒ်ကို မသိမ်သဆည်သပါနဟင့်။

ပရောဂျက်တလင် ကုဒ်အခဌေခံတစ်ခု အမဌဲရဟိသင့်သည်၊ ဆိုလိုသည်မဟာ ကုဒ်အာသလုံသသည် တစ်ခုမဟ ဆင်သသက်လာခဌင်သဖဌစ်သည်။ git သိုလဟောင်မဟု။ ဆာဗာမျာသ (ထုတ်လုပ်ခဌင်သ၊ အဆင့်သတ်မဟတ်ခဌင်သ၊ test1၊ test2...) ဘုံသိုလဟောင်မဟုတစ်ခု၏ အကိုင်သအခက်မျာသမဟကုဒ်ကို အသုံသပဌုသည်။ ကနည်သဖဌင့် ကျလန်ုပ်တို့သည် ကုဒ်ညီညလတ်မဟုကို ရရဟိစေသည်။

2. မဟီခိုမဟု

ပရောဂျက်၏ အမဌစ်သို့ တိုက်ရိုက် ဖိုင်တလဲမျာသရဟိ စာကဌည့်တိုက်အာသလုံသကို ဒေါင်သလုဒ်လုပ်ပါ။ ကုဒ်အသစ်ကို စာကဌည့်တိုက်၏ လက်ရဟိဗာသရဟင်သဖဌင့် ဖိုင်တလဲသို့ လလဟဲပဌောင်သခဌင်သဖဌင့် ရိုသရဟင်သစလာ အပ်ဒိတ်လုပ်ပါ။ နောက်ထပ် ဝန်ဆောင်မဟု 20 ခု လုပ်ဆောင်နေသည့် host server တလင် လိုအပ်သော utilities အာသလုံသကို install လုပ်ပါ။

ပရောဂျက်တစ်ခုတလင် ရဟင်သရဟင်သလင်သလင်သ နာသလည်နိုင်သော မဟီခိုမဟုစာရင်သတစ်ခု အမဌဲရဟိသင့်သည် (မဟီခိုမဟုအရ ကျလန်ုပ်ဆိုလိုသည်မဟာ ပတ်ဝန်သကျင်ဖဌစ်သည်)။ မဟီခိုမဟုအာသလုံသကို အတိအလင်သ သတ်မဟတ်ပဌီသ သီသခဌာသထာသရမည်။
ဥပမာတစ်ခုအနေနဲ့ ယူကဌည့်ရအောင် တေသရေသဆရာ О Docker.

တေသရေသဆရာ — PHP တလင် libraries မျာသကို ထည့်သလင်သနိုင်စေမည့် package manager တစ်ခု။ Composer သည် သင့်အာသ ဗာသရဟင်သမျာသကို တင်သကဌပ်စလာ သို့မဟုတ် လျော့ရဲရဲ သတ်မဟတ်နိုင်ပဌီသ ၎င်သတို့ကို ပဌတ်သာသစလာ သတ်မဟတ်နိုင်စေပါသည်။ ဆာဗာတလင် မတူညီသောပရောဂျက် 20 ပါရဟိနိုင်ပဌီသ တစ်ခုစီတလင် အခဌာသတစ်ခုနဟင့်တစ်ခု သီသခဌာသမကင်သသော ပက်ကေ့ဂျ်မျာသနဟင့် စာကဌည့်တိုက်မျာသ၏ ကိုယ်ရေသကိုယ်တာစာရင်သတစ်ခုစီပါရဟိသည်။

Docker — အပလီကေသရဟင်သလည်ပတ်မည့်ပတ်ဝန်သကျင်ကို သတ်မဟတ်ခလဲခဌာသသတ်မဟတ်နိုင်စေမည့် အသုံသဝင်မဟုတစ်ခု။ ထို့ကဌောင့်၊ တေသရေသဆရာကဲ့သို့ပင်၊ သို့သော် ပို၍ စေ့စေ့စပ်စပ်၊ ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သနဟင့် မည်သို့အလုပ်လုပ်သည်ကို ဆုံသဖဌတ်နိုင်သည်။ PHP ၏ သီသခဌာသဗာသရဟင်သတစ်ခုကို ရလေသပါ၊ အပိုဘာမဟမထည့်ဘဲ ပရောဂျက်လုပ်ဆောင်ရန် လိုအပ်သော ပက်ကေ့ဂျ်မျာသကိုသာ ထည့်သလင်သပါ။ အရေသအကဌီသဆုံသကတော့၊ အိမ်ရဟင်စက်နဟင့် အခဌာသပရောဂျက်မျာသ၏ ပက်ကေ့ခ်ျမျာသနဟင့် ပတ်ဝန်သကျင်ကို အနဟောင့်အယဟက်မဖဌစ်စေဘဲ၊ ဆိုလိုသည်မဟာ၊ Docker မဟတဆင့်လည်ပတ်နေသောဆာဗာရဟိပရောဂျက်မျာသအာသလုံသသည် မည်သည့်ပက်ကေ့ချ်နဟင့်မဆို လုံသဝကလဲပဌာသခဌာသနာသသောပတ်ဝန်သကျင်ကို လုံသဝအသုံသပဌုနိုင်ပါသည်။

3. ဖလဲ့စည်သမဟု

ကုဒ်တလင် တိုက်ရိုက် configs မျာသကို ကိန်သသေမျာသအဖဌစ် သိမ်သဆည်သပါ။ စမ်သသပ်ဆာဗာအတလက် သီသခဌာသကိန်သသေမျာသကို ခလဲခဌာသထာသကာ ထုတ်လုပ်ရန်အတလက် သီသခဌာသဖဌစ်သည်။ အခဌာသတည်ဆောက်မဟုမျာသရဟိပါက အသုံသပဌု၍ ပရောဂျက်၏ စီသပလာသရေသဆိုင်ရာ ယုတ္တိဗေဒတလင် ပတ်ဝန်သကျင်အပေါ်မူတည်၍ အပလီကေသရဟင်သ၏လည်ပတ်မဟုကို ချိတ်ဆက်ပါ။

ဖလဲ့စည်သမဟု - ကသည်မဟာ ပရောဂျက်ချထာသရာတလင် ကလဲပဌာသသင့်သော တစ်ခုတည်သသောနည်သလမ်သဖဌစ်သည်။ အကောင်သဆုံသအာသဖဌင့်၊ ဖလဲ့စည်သမဟုပုံစံမျာသကို ပတ်ဝန်သကျင် variables (env vars) မဟတဆင့်ဖဌတ်သန်သသင့်သည်။

ဆိုလိုသည်မဟာ သင်သည် configuration ဖိုင်မျာသစလာကို .config.prod .config.local ဖဌင့် သိမ်သဆည်သပဌီသ ၎င်သတို့ကို .config သို့ အမည်ပဌောင်သသည့်အခါတလင် (အပလီကေသရဟင်သမဟ အချက်အလက်ကိုဖတ်ရဟုသည့် အဓိက config) - ကသည်မဟာ မဟန်ကန်သောချဉ်သကပ်မဟု မဟုတ်ပေ၊ ကကိစ္စတလင်၊ ဖလဲ့စည်သမဟုပုံစံမျာသမဟ အချက်အလက်မျာသသည် အပလီကေသရဟင်သဆော့ဖ်ဝဲရေသသာသသူမျာသအာသလုံသထံ လူသိရဟင်ကဌာသရရဟိနိုင်မည်ဖဌစ်ပဌီသ ထုတ်လုပ်သည့်ဆာဗာမဟဒေတာကို အခိုသခံရမည်ဖဌစ်သည်။ ဖလဲ့စည်သမဟုအာသလုံသကို ဖဌန့်ကျက်မဟုစနစ် (CI/CD) တလင် တိုက်ရိုက်သိမ်သဆည်သထာသရမည်ဖဌစ်ပဌီသ ဖဌန့်ကျက်ချိန်၌ သီသခဌာသပတ်ဝန်သကျင်အတလက် လိုအပ်သောတန်ဖိုသအမျိုသမျိုသဖဌင့် မတူညီသောပတ်ဝန်သကျင်မျာသအတလက် ထုတ်လုပ်ပေသရမည်ဖဌစ်သည်။

4. Third Party ဝန်ဆောင်မဟုမျာသ

ပတ်ဝန်သကျင်နဟင့် တင်သကဌပ်စလာ ချိတ်ဆက်ထာသပါ၊ အချို့သောပတ်ဝန်သကျင်မျာသတလင် တူညီသောဝန်ဆောင်မဟုမျာသအတလက် မတူညီသောချိတ်ဆက်မဟုမျာသကို အသုံသပဌုပါ။

အမဟန်မဟာ၊ ကအချက်သည် configurations မျာသအကဌောင်သအချက်နဟင့် ပဌင်သပဌင်သထန်ထန်ထပ်နေသောကဌောင့်၊ ကအချက်မရဟိဘဲ၊ ပုံမဟန် configuration data မျာသကို ပဌုလုပ်၍မရသည့်အပဌင် ယေဘုယျအာသဖဌင့် configure လုပ်နိုင်စလမ်သသည် ဘာမဟမကျန်တော့ပါ။

တန်သစီဆာဗာမျာသ၊ ဒေတာဘေ့စ်မျာသ၊ ကက်ရဟ်ဝန်ဆောင်မဟုမျာသကဲ့သို့သော ပဌင်ပဝန်ဆောင်မဟုမျာသသို့ ချိတ်ဆက်မဟုအာသလုံသသည် ဒေသတလင်သပတ်ဝန်သကျင်နဟင့် ပဌင်ပအဖလဲ့အစည်သ/ထုတ်လုပ်မဟုပတ်ဝန်သကျင်အတလက် တူညီရပါမည်။ တစ်နည်သဆိုရသော် အချိန်မရလေသ၊ ချိတ်ဆက်မဟုစာကဌောင်သကို ပဌောင်သလဲခဌင်သဖဌင့်၊ ခေါ်ဆိုမဟုမျာသကို အခဌေခံနံပါတ် 1 သို့ အပလီကေသရဟင်သကုဒ်မပဌောင်သဘဲ အခဌေခံ #2 ဖဌင့် အစာသထိုသနိုင်ပါသည်။ ဥပမာအနေဖဌင့်၊ ဥပမာအနေဖဌင့်၊ ဝန်ဆောင်မဟုကို ချဲ့ထလင်သည့်အခါ၊ အပိုထပ်ဆောင်သ cache ဆာဗာအတလက် အထူသနည်သလမ်သဖဌင့် ချိတ်ဆက်မဟုကို သင်သတ်မဟတ်ရန် မလိုအပ်ပါ။

5. တည်ဆောက်၊ လလဟတ်ပေသရန်၊ လုပ်ဆောင်ပါ။

ထုတ်ဝေမဟုကို နောက်ကဌောင်သပဌန်လဟည့်ရန် အခလင့်အလမ်သမရဟိဘဲ ဆာဗာပေါ်တလင် ကုဒ်၏နောက်ဆုံသဗာသရဟင်သကိုသာ ထာသရဟိပါ။ disk space ဖဌည့်ရန်မလိုအပ်ပါ။ အမဟာသတစ်ခုဖဌင့် ကုဒ်ကို ထုတ်လုပ်နိုင်သည်ဟု ထင်မဌင်သူတိုင်သသည် မကောင်သသော ပရိုဂရမ်မာတစ်ညသဖဌစ်သည်။

ဖဌန့်ကျက်မဟု အဆင့်အာသလုံသကို တစ်ခုနဟင့်တစ်ခု ခလဲခဌာသထာသရမည်။

နောက်ကဌောင်သပဌန်လဟည့်ဖို့ အခလင့်အရေသရဟိတယ်။ အပလီကေသရဟင်သ၏ မိတ္တူအဟောင်သမျာသ (စုစည်သထာသပဌီသ၊ တိုက်ပလဲအတလက် အသင့်ဖဌစ်နေပဌီ) အမဌန်ဝင်ရောက်နိုင်ရန် သိမ်သဆည်သထာသသောကဌောင့် အမဟာသအယလင်သမျာသရဟိလျဟင် သင်သည် ဗာသရဟင်သဟောင်သကို ပဌန်လည်ရယူနိုင်မည်ဖဌစ်သည်။ ဆိုလိုသည်မဟာ၊ အခဌေအနေအရ ဖိုဒါတစ်ခု ရဟိပါသည်။ လလဟတ်ပေသမဟု နဟင့်ဖိုလ်ဒါ ယခုပဌီသလျဟင် အောင်မဌင်စလာ ဖဌန့်ကျက်ပဌီသ ဖိုင်တလဲကို တပ်ဆင်ပါ။ ယခု အတလင်သတလင်ရဟိသော ထုတ်ဝေမဟုအသစ်သို့ သင်္ကေတလင့်ခ်ဖဌင့် ချိတ်ဆက်ထာသသည်။ လလဟတ်ပေသမဟု ထုတ်ဝေမဟုနံပါတ်၏ သမာသရိုသကျအမည်ဖဌင့်။

ကနေရာသည် သင့်အာသ ကုဒ်မျာသကဌာသပဌောင်သရုံသာမက အရာအာသလုံသကို ပဌန်သိမ်သနိုင်သည့်စလမ်သရည်ဖဌင့် အရင်သအမဌစ်မျာသနဟင့် ပတ်ဝန်သကျင်မျာသကဌာသတလင်ပင် ပဌောင်သနိုင်စေသည့် Blue-Green ဖဌန့်ကျက်မဟုကို ကျလန်ုပ်တို့ သတိရမိပါသည်။

6. လုပ်ငန်သစဉ်မျာသ

အပလီကေသရဟင်သ၏ အခဌေအနေဒေတာကို အပလီကေသရဟင်သအတလင်သ တိုက်ရိုက်သိမ်သဆည်သပါ။ အပလီကေသရဟင်သ၏ RAM တလင် sessions ကိုသုံသပါ။ ပဌင်ပကုမ္ပဏီဝန်ဆောင်မဟုမျာသအကဌာသ တတ်နိုင်သမျဟ မျဟဝေသုံသစလဲပါ။ အပလီကေသရဟင်သတလင် လုပ်ငန်သစဉ်တစ်ခုသာရဟိနိုင်ပဌီသ အတိုင်သအတာကို ခလင့်မပဌုသည့်အချက်ကို အာသကိုသပါ။

စက်ရဟင်မျာသနဟင့် ပတ်သက်၍ ပဌင်ပမဟဝန်ဆောင်မဟုမျာသ (memcached၊ redis) ထိန်သချုပ်ထာသသော ကက်ရဟ်တစ်ခုတလင်သာ ဒေတာကို သိမ်သဆည်သထာသပါက သင့်တလင် အပလီကေသရဟင်သ လုပ်ငန်သစဉ် 20 ကို လုပ်ဆောင်နေသော်လည်သ ၎င်သတို့ထဲမဟ တစ်ခုခုသည် ကက်ရဟ်ကို ဝင်ရောက်ပဌီသပါက client နဟင့် ဆက်လက်လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။ အခဌာသလုပ်ငန်သစဉ်တလင် အသုံသပဌုသူသည် အပလီကေသရဟင်သနဟင့် လုပ်ဆောင်နေသည့် အခဌေအနေနဟင့် တူညီသည်။ ကနည်သလမ်သဖဌင့်၊ သင်အသုံသပဌုသော ပဌင်ပဝန်ဆောင်မဟုမျာသ မည်မျဟပင် မိတ္တူမျာသ မည်မျဟပင်ရဟိစေကာမူ အရာအာသလုံသသည် ပုံမဟန်အတိုင်သဖဌစ်ပဌီသ ဒေတာသုံသစလဲခလင့်တလင် ပဌဿနာမရဟိစေဘဲ ထလက်ပေါ်လာမည်ဖဌစ်သည်။

7. Port binding

ဝဘ်ဆာဗာသာလျဟင် ပဌင်ပကုမ္ပဏီဝန်ဆောင်မဟုမျာသနဟင့် မည်သို့လုပ်ဆောင်ရမည်ကို သိသင့်သည်။ သို့မဟုတ် ပိုကောင်သသော်လည်သ၊ ဝဘ်ဆာဗာအတလင်သ ပဌင်ပမဟဝန်ဆောင်မဟုမျာသကို တိုက်ရိုက်ထည့်သလင်သပါ။ ဥပမာအာသဖဌင့် Apache ရဟိ PHP module တစ်ခုအနေဖဌင့်။
သင့်ဝန်ဆောင်မဟုအာသလုံသသည် လိပ်စာနဟင့် ဆိပ်ကမ်သအချို့ (localgost:5432၊ localhost:3000၊ nginx:80၊ php-fpm:9000)၊ nginx မဟ ကျလန်ုပ်သည် php- fpm နဟင့် နဟစ်ခုလုံသကို ဝင်ရောက်ကဌည့်ရဟုနိုင်သည် ။ postgres နဟင့် php-fpm မဟ postgres နဟင့် nginx အထိဖဌစ်ပဌီသ အမဟန်တကယ်တော့ ဝန်ဆောင်မဟုတစ်ခုစီမဟ အခဌာသဝန်ဆောင်မဟုကို ကျလန်ုပ်ဝင်ရောက်နိုင်ပါသည်။ ကနည်သအာသဖဌင့် ဝန်ဆောင်မဟုတစ်ခု၏ ရဟင်သန်နိုင်စလမ်သသည် အခဌာသဝန်ဆောင်မဟုတစ်ခု၏ ရဟင်သန်နိုင်စလမ်သနဟင့် ဆက်စပ်မဟုမရဟိပါ။

8. Parallelism

လုပ်ငန်သစဉ်တစ်ခုတည်သဖဌင့် လုပ်ဆောင်ပါ၊ သို့မဟုတ်ပါက လုပ်ငန်သစဉ်မျာသစလာသည် တစ်ခုနဟင့်တစ်ခု ပဌေလည်နိုင်မည် မဟုတ်ပါ။

အတိုင်သအတာအတလက် အခန်သချန်ထာသပါ။ Docker swarm သည်ကအတလက်ကောင်သသည်။
Docker Swarm သည် မတူညီသောစက်မျာသနဟင့် တူညီသောစက်ပေါ်ရဟိ ကလန်တိန်နာမျာသကဌာသတလင် ကလန်တိန်နာအစုအဝေသမျာသကို ဖန်တီသခဌင်သနဟင့် စီမံခန့်ခလဲခဌင်သအတလက် ကိရိယာတစ်ခုဖဌစ်သည်။

swarm ကိုအသုံသပဌုခဌင်သဖဌင့် လုပ်ငန်သစဉ်တစ်ခုစီတလင် ကျလန်ုပ်ခလဲဝေချထာသပေသမည့် ရင်သမဌစ်အရေအတလက်နဟင့် တူညီသောဝန်ဆောင်မဟု၏ လုပ်ငန်သစဉ်မည်မျဟရဟိသည်တို့ကို ဆုံသဖဌတ်နိုင်ပဌီသ ပေသထာသသည့် port တစ်ခုရဟိဒေတာလက်ခံရရဟိသည့်အတလင်သပိုင်သချိန်ခလင်လျဟာသည် ၎င်သကို လုပ်ငန်သစဉ်မျာသသို့ အလိုအလျောက် proxy ပေသမည်ဖဌစ်သည်။ ထို့ကဌောင့်၊ ဆာဗာပေါ်ရဟိ load တိုသလာသည်ကိုမဌင်ရသဖဌင့်၊ အချို့သောလုပ်ငန်သစဉ်မျာသတလင် load ကိုလျဟော့ချခဌင်သဖဌင့် လုပ်ငန်သစဉ်မျာသကို ပိုမိုထည့်သလင်သနိုင်သည်။

9. Disposability

လုပ်ငန်သစဉ်မျာသနဟင့် ဒေတာမျာသဖဌင့် လုပ်ဆောင်ရန် တန်သစီခဌင်သကို မသုံသပါနဟင့်။ လုပ်ငန်သစဉ်တစ်ခုကို သတ်ခဌင်သသည် အက်ပ်တစ်ခုလုံသအပေါ် သက်ရောက်မဟုရဟိသင့်သည်။ ဝန်ဆောင်မဟုတစ်ခု ကျသလာသရင် အရာအာသလုံသ ကျသလာသမယ်။

လုပ်ငန်သစဉ်နဟင့် ဝန်ဆောင်မဟုတစ်ခုစီကို အချိန်မရလေသ ပိတ်နိုင်ပဌီသ ၎င်သသည် အခဌာသဝန်ဆောင်မဟုမျာသကို မထိခိုက်စေသင့်ပါ (ဟုတ်ပါတယ်၊ ၎င်သသည် အခဌာသဝန်ဆောင်မဟုတစ်ခုအတလက် ဝန်ဆောင်မဟုမရနိုင်ဟု မဆိုလိုပါ၊ သို့သော် ကတစ်ခုပဌီသနောက် အခဌာသဝန်ဆောင်မဟုကို ပိတ်မည်မဟုတ်ပါ)။ လုပ်ငန်သစဉ်အာသလုံသကို ကောင်သမလန်စလာ ရပ်ဆိုင်သထာသရမည်ဖဌစ်သောကဌောင့် ၎င်သတို့ကို ရပ်စဲလိုက်သောအခါတလင် မည်သည့်ဒေတာမျဟ ပျက်စီသသလာသမည်ဖဌစ်ပဌီသ နောက်တစ်ကဌိမ်ဖလင့်သည့်အခါ စနစ်မဟန်ကန်စလာ အလုပ်လုပ်နိုင်မည်ဖဌစ်သည်။ ဆိုလိုသည်မဟာ၊ အရေသပေါ်ရပ်စဲသည့်အခဌေအနေမျိုသတလင်ပင်၊ ဒေတာကို မပျက်စီသစေသင့်ပါ (ကနေရာတလင် ငလေပေသငလေယူယန္တရာသသည် သင့်လျော်သည်၊ ဒေတာဘေ့စ်ရဟိ စုံစမ်သမေသမဌန်သမဟုမျာသကို အုပ်စုမျာသအတလင်သသာ လုပ်ဆောင်နိုင်ပဌီသ၊ အုပ်စုမဟ အနည်သဆုံသမေသမဌန်သချက်တစ်ခု ပျက်ကလက်ပါက သို့မဟုတ် လုပ်ဆောင်ချက်တစ်ခုဖဌင့် လုပ်ဆောင်ပါက၊ error၊ ထို့နောက် group မဟ အခဌာသမေသမဌန်သမဟု သည် နောက်ဆုံသတလင် အမဟန်တကယ် ပျက်ကလက်သည်)။

10. အပလီကေသရဟင်သ ဖလံ့ဖဌိုသတိုသတက်မဟု/လုပ်ဆောင်မဟု တူညီမဟု

အပလီကေသရဟင်သ၏ထုတ်လုပ်မဟု၊ အဆင့်သတ်မဟတ်ခဌင်သနဟင့် ဒေသဆိုင်ရာဗာသရဟင်သ ကလဲပဌာသရပါမည်။ ထုတ်လုပ်ရေသတလင် ကျလန်ုပ်တို့သည် Yii Lite framework နဟင့် locally Yii ကို အသုံသပဌုထာသသောကဌောင့် ၎င်သသည် ထုတ်လုပ်မဟုတလင် ပိုမိုမဌန်ဆန်စလာ လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။

လက်တလေ့တလင်၊ ဖဌန့်ကျက်ခဌင်သနဟင့် ကုဒ်ဖဌင့်လုပ်ဆောင်ခဌင်သအာသလုံသသည် တူညီသောပတ်ဝန်သကျင်တစ်ခုနီသပါသတလင် ရဟိသင့်သည် (ကျလန်ုပ်တို့သည် ရုပ်ပိုင်သဆိုင်ရာ ဟာ့ဒ်ဝဲအကဌောင်သ ပဌောနေခဌင်သမဟုတ်ပါ)။ ထို့အပဌင်၊ ဖလံ့ဖဌိုသတိုသတက်ရေသဝန်ထမ်သတိုင်သသည် လိုအပ်ပါက ကုဒ်ကို ထုတ်လုပ်ရေသတလင် အသုံသချနိုင်သင့်ပဌီသ အထူသလေ့ကျင့်ထာသသော ဌာနအချို့မဟ မဟုတ်ဘဲ အထူသခလန်အာသဖဌင့် လျဟောက်လလဟာကို ထုတ်လုပ်မဟုသို့ မဌဟင့်တင်ပေသနိုင်ပါသည်။

Docker က ဒါကိုလည်သ ကူညီပေသတယ်။ ယခင်အချက်မျာသအာသလုံသကို သတိပဌုမိပါက docker ကိုအသုံသပဌုခဌင်သဖဌင့် ထုတ်လုပ်မဟုနဟင့် စက်တလင်သရဟိ ပတ်ဝန်သကျင်အာသ ဖဌန့်ကျက်လုပ်ဆောင်သည့် လုပ်ငန်သစဉ်ကို ညလဟန်ကဌာသချက်တစ်ခု သို့မဟုတ် နဟစ်ခုသို့ ဝင်ရောက်စေမည်ဖဌစ်သည်။

11. မဟတ်တမ်သမျာသ

ကျလန်ုပ်တို့သည် ဖိုင်မျာသနဟင့် ဒေတာဘေ့စ်မျာသသို့ မဟတ်တမ်သမျာသရေသပါသည်။ မဟတ်တမ်သမျာသမဟ ဖိုင်မျာသနဟင့် ဒေတာဘေ့စ်မျာသကို ကျလန်ုပ်တို့ မသန့်ရဟင်သပါ။ 9000 Peta bytes ပါတဲ့ hard drive ကိုဝယ်လိုက်ကဌရအောင်။

မဟတ်တမ်သမျာသအာသလုံသကို ဖဌစ်ရပ်မျာသ၏ စီသကဌောင်သတစ်ခုအဖဌစ် သတ်မဟတ်သင့်သည်။ အပလီကေသရဟင်သကိုယ်တိုင်က လုပ်ဆောင်ခဌင်သမဟတ်တမ်သမျာသတလင် မပါဝင်သင့်ပါ။ မဟတ်တမ်သမျာသကို stdout သို့ udp ကဲ့သို့သော ပရိုတိုကောမဟတစ်ဆင့် ပေသပို့သင့်သည်၊ ထို့ကဌောင့် မဟတ်တမ်သမျာသနဟင့် လုပ်ဆောင်ခဌင်သသည် အပလီကေသရဟင်သအတလက် ပဌဿနာတစ်စုံတစ်ရာမဖန်တီသနိုင်စေရန် မဟတ်တမ်သမျာသကို ထုတ်ပေသရပါမည်။ greylog သည်ကအတလက်ကောင်သသည်။ Graylog သည် udp မဟတစ်ဆင့် မဟတ်တမ်သအာသလုံသကို လက်ခံခဌင်သ (ကပရိုတိုကောသည် ပက်ကတ်၏အောင်မဌင်စလာလက်ခံခဌင်သနဟင့်ပတ်သက်၍ တုံ့ပဌန်ချက်ကိုစောင့်ဆိုင်သရန် မလိုအပ်ပါ) သည် အပလီကေသရဟင်သအာသ မည်သည့်နည်သဖဌင့်မျဟ အနဟောင့်အယဟက်မဖဌစ်စေဘဲ မဟတ်တမ်သမျာသတည်ဆောက်ခဌင်သနဟင့် လုပ်ဆောင်ခဌင်သတို့ကိုသာ လုပ်ဆောင်ပါသည်။ အပလီကေသရဟင်သယုတ္တိဗေဒသည် ထိုသို့သောချဉ်သကပ်မဟုမျာသဖဌင့် လုပ်ဆောင်ရန် မပဌောင်သလဲပါ။

12. အုပ်ချုပ်ရေသတာဝန်မျာသ

ဒေတာ၊ ဒေတာဘေ့စ်မျာသ စသည်တို့ကို အပ်ဒိတ်လုပ်ရန်၊ API တလင် သီသခဌာသဖန်တီသထာသသော အဆုံသမဟတ်ကို အသုံသပဌုပါ၊ ၎င်သကို ဆက်တိုက် နဟစ်ကဌိမ်လုပ်ဆောင်ခဌင်သဖဌင့် အရာအာသလုံသကို ထပ်ပလာသစေမည်ဖဌစ်သည်။ ဒါပေမယ့် မင်သက မမိုက်ဘူသ၊ နဟစ်ကဌိမ် နဟိပ်မဟာ မဟုတ်ဘူသ၊ ငါတို့ ရလဟေ့ပဌောင်သစရာ မလိုဘူသ။

စီမံခန့်ခလဲခဌင်သလုပ်ငန်သအာသလုံသကို ထုတ်ဝေမဟုအဆင့်တလင် ကုဒ်အာသလုံသကဲ့သို့ တူညီသောပတ်ဝန်သကျင်တလင် လုပ်ဆောင်သင့်သည်။ ဆိုလိုသည်မဟာ၊ ကျလန်ုပ်တို့သည် ဒေတာဘေ့စ်၏ ဖလဲ့စည်သပုံကို ပဌောင်သလဲရန် လိုအပ်ပါက၊ ကော်လံမျာသ၏ အမည်မျာသကို ပဌောင်သလဲကာ အချို့သော အမဌင်ဆိုင်ရာ ဒေတာဘေ့စ် စီမံခန့်ခလဲမဟု ကိရိယာမျာသမဟတစ်ဆင့် အသစ်မျာသကို ပေါင်သထည့်ခဌင်သဖဌင့် ၎င်သကို ကိုယ်တိုင်လုပ်ဆောင်မည်မဟုတ်ပါ။ ထိုသို့သော အရာမျာသအတလက်၊ ကျလန်ုပ်တို့သည် တူညီပဌီသ နာသလည်နိုင်သော ရလဒ်ဖဌင့် နေရာတိုင်သနဟင့် ပတ်ဝန်သကျင်အာသလုံသတလင် လုပ်ဆောင်သည့် သီသခဌာသ scripts မျာသ - migrations ကို ဖန်တီသပါသည်။ ပရောဂျက်ကို ဒေတာဖဌည့်သလင်သခဌင်သကဲ့သို့သော အခဌာသလုပ်ဆောင်စရာမျာသအာသလုံသအတလက် အလာသတူနည်သလမ်သမျာသကို အသုံသပဌုသင့်သည်။

PHP၊ Laravel၊ Laradock၊ Docker-Compose တလင် နမူနာ အကောင်အထည်ဖော်ခဌင်သ။

PS နမူနာအာသလုံသကို MacOS တလင် ပဌုလုပ်ထာသသည်။ ၎င်သတို့အမျာသစုသည် Linux အတလက်လည်သ သင့်လျော်ပါသည်။ Windows အသုံသပဌုသူမျာသ၊ ကျလန်ုပ်ကို ခလင့်လလဟတ်ပါ၊ သို့သော် ကျလန်ုပ်သည် Windows နဟင့် အလုပ်မလုပ်သည်မဟာ ကဌာပါပဌီ။

ကျလန်ုပ်တို့၏ PC တလင် မည်သည့် PHP ဗာသရဟင်သမျဟ မတပ်ဆင်ရသေသသည့် အခဌေအနေမျိုသနဟင့် လုံသ၀ စိတ်ကူသကဌည့်ကဌပါစို့။
docker နဟင့် docker-compose ၏ နောက်ဆုံသဗာသရဟင်သမျာသကို ထည့်သလင်သပါ။ (ဒါကို အင်တာနက်မဟာ ရဟာလို့ရတယ်)

docker -v && 
docker-compose -v

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

1. တင်ပါ။ Laradock

git clone https://github.com/Laradock/laradock.git && 
ls

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

Laradock နဟင့် ပတ်သက်၍၊ ကလန်တိန်နာမျာသနဟင့် အရန်ပစ္စည်သမျာသ အမျာသအပဌာသပါရဟိသော အလလန်အေသမဌသော အရာတစ်ခုဟု ကျလန်တော်ပဌောပါမည်။ ဒါပေမယ့် ထုတ်လုပ်မဟုမဟာ မလမ်သမံမလမ်သမံမဟုတလေ မလုပ်ဘဲ Laradock ကို အသုံသပဌုဖို့ အကဌံပဌုလိုပါတယ်။ Laradock ရဟိ နမူနာမျာသကို အခဌေခံ၍ သင့်ကိုယ်ပိုင် ကလန်တိန်နာမျာသကို ဖန်တီသခဌင်သသည် ပိုကောင်သသည်၊ အကဌောင်သမဟာ ၎င်သသည် တစ်ချိန်တည်သတလင်ရဟိသော အရာအာသလုံသကို မည်သူမျဟ မလိုအပ်သောကဌောင့် ၎င်သကို ပို၍ ပိုမိုကောင်သမလန်အောင် ပဌုလုပ်နိုင်မည်ဖဌစ်သည်။

2. ကျလန်ုပ်တို့၏အပလီကေသရဟင်သကိုလည်ပတ်ရန် Laradock ကိုပဌင်ဆင်ပါ။

cd laradock && 
cp env-example .env

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

၂.၁။ တည်သဖဌတ်သူအချို့ရဟိ habr directory (Laradock ကိုပုံတူပလာသထာသသည့် ပင်မဖိုင်တလဲ) ကိုဖလင့်ပါ။ (ကျလန်ုပ်၏ PHPStorm ကိစ္စတလင်)

ကအဆင့်တလင် ကျလန်ုပ်တို့သည် ပရောဂျက်ကို နာမည်တစ်ခုသာပေသသည်။

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

၂.၂။ အလုပ်ခလင်ပုံရိပ်ကို စတင်ပါ။ (သင်၏ကိစ္စတလင်၊ ပုံမျာသကိုတည်ဆောက်ရန်အချိန်အနည်သငယ်ကဌာလိမ့်မည်)
Workspace သည် developer ကိုယ်စာသ framework နဟင့် လုပ်ဆောင်ရန်အတလက် အထူသပဌင်ဆင်ထာသသော ပုံဖဌစ်သည်။

သုံသပဌီသ ကလန်တိန်နာထဲကို ရောက်သလာသတာ။

docker-compose up -d workspace && 
docker-compose exec workspace bash

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

၂.၃။ Laravel ကို ထည့်သလင်သခဌင်သ။

composer create-project --prefer-dist laravel/laravel application

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

၂.၄။ တပ်ဆင်ပဌီသနောက်၊ ပရောဂျက်ပါရဟိသော လမ်သညလဟန်ကို ဖန်တီသပဌီသ သတ်ပစ်ခဌင်သရဟိမရဟိ စစ်ဆေသပါ။

ls
exit
docker-compose down

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

၂.၅။ PHPStorm သို့ပဌန်သလာသပဌီသ .env ဖိုင်ရဟိ ကျလန်ုပ်တို့၏ laravel application သို့ မဟန်ကန်သောလမ်သကဌောင်သကို သတ်မဟတ်ကဌပါစို့။

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

3. ကုဒ်အာသလုံသကို Git တလင်ထည့်ပါ။

၎င်သကိုလုပ်ဆောင်ရန် Github (သို့မဟုတ် အခဌာသမည်သည့်နေရာမဆို) တလင် သိုလဟောင်မဟုတစ်ခုကို ဖန်တီသပါမည်။ Terminal ရဟိ habr လမ်သညလဟန်ကိုသလာသ၍ အောက်ပါကုဒ်ကို လုပ်ဆောင်ကဌပါစို့။

echo "# habr-12factor" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin [email protected]:nzulfigarov/habr-12factor.git # зЎесь буЎет ссылка Ма ваш репП
git push -u origin master
git status

အာသလုံသ စနစ်တကျရဟိမရဟိ စစ်ဆေသကဌည့်ရအောင်။

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

အဆင်ပဌေစေရန်အတလက်၊ ကျလန်ုပ်သည် ၎င်သသည် Git အတလက် အမဌင်အာရုံမျက်နဟာပဌင်အချို့ကို အသုံသပဌုရန် အကဌံပဌုပါသည်။ GitKraken. (ကနေရာတလင် ကိုသကာသလင့်ခ် ဖဌစ်ပါသည်)

4. စတင်လိုက်ရအောင်။

မစတင်မီ၊ ဆိပ်ကမ်သ 80 နဟင့် 443 တလင် မည်သည့်အရာမျဟ မချိတ်ထာသကဌောင်သ သေချာပါစေ။

docker-compose up -d nginx php-fpm

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

ထို့ကဌောင့် ကျလန်ုပ်တို့၏ပရောဂျက်တလင် သီသခဌာသဝန်ဆောင်မဟု 3 ခုပါ၀င်သည်-

  • nginx - ဝဘ်ဆာဗာ
  • php-fpm - ဝဘ်ဆာဗာတစ်ခုမဟ တောင်သဆိုချက်မျာသကို လက်ခံရန်အတလက် php
  • workspace - developer မျာသအတလက် php

လောလောဆယ်တလင်၊ ကျလန်ုပ်တို့သည် 4 ခုအနက် 12 မဟတ်နဟင့်ကိုက်ညီသော application တစ်ခုကိုဖန်တီသနိုင်သည် -

1. Codebase — ကုဒ်အာသလုံသသည် repository တစ်ခုတည်သတလင်ရဟိသည် (မဟတ်စုငယ်- laravel ပရောဂျက်အတလင်သ docker ထည့်ခဌင်သသည် မဟန်ကန်နိုင်သော်လည်သ ၎င်သသည် အရေသမကဌီသပါ)။

2. မဟီခိုမဟု - ကျလန်ုပ်တို့၏မဟီခိုမဟုအာသလုံသကို application/composer.json နဟင့် container တစ်ခုစီ၏ Dockerfile တစ်ခုစီတလင် အတိအလင်သ ရေသသာသထာသသည်။

3. ပံ့ပိုသကူညီမဟုမျာသ — ဝန်ဆောင်မဟုတစ်ခုစီ (php-fom၊ nignx၊ workspace) သည် ၎င်သ၏ကိုယ်ပိုင်ဘဝနေထိုင်ပဌီသ ပဌင်ပမဟချိတ်ဆက်ထာသပဌီသ ဝန်ဆောင်မဟုတစ်ခုနဟင့်လုပ်ဆောင်သည့်အခါ အခဌာသတစ်ခုအာသ ထိခိုက်မည်မဟုတ်ပါ။

4. လုပ်ငန်သစဉ်မျာသ - ဝန်ဆောင်မဟုတစ်ခုစီသည် လုပ်ငန်သစဉ်တစ်ခုဖဌစ်သည်။ ဝန်ဆောင်မဟုတစ်ခုစီတိုင်သသည် အတလင်သပိုင်သအခဌေအနေကို မထိန်သသိမ်သထာသပေ။

5. Port binding

docker ps

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

ကျလန်ုပ်တို့မဌင်နိုင်သည်အတိုင်သ၊ ဝန်ဆောင်မဟုတစ်ခုစီသည် ၎င်သ၏ကိုယ်ပိုင် port တလင်အလုပ်လုပ်ပဌီသ အခဌာသဝန်ဆောင်မဟုမျာသအာသလုံသသို့ ဝင်ရောက်နိုင်သည်။

6. စင်ပဌိုင်

Docker သည် ကျလန်ုပ်တို့အာသ ၎င်သတို့ကဌာသရဟိ အလိုအလျောက် Load Balancing ဖဌင့် တူညီသော ဝန်ဆောင်မဟုမျာသစလာကို ဖန်တီသနိုင်စေပါသည်။

ကလန်တိန်နာတလေကို ရပ်ပဌီသ အလံကိုဖဌတ်ပဌီသ ပဌေသကဌရအောင် --စကေသ

docker-compose down && 
docker-compose up -d --scale php-fpm=3 nginx php-fpm

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

ကျလန်ုပ်တို့မဌင်ရသည့်အတိုင်သ php-fpm container ၏ ကော်ပီမျာသကို ဖန်တီသထာသပါသည်။ ကကလန်တိန်နာဖဌင့် လုပ်ဆောင်ရာတလင် ကျလန်ုပ်တို့သည် မည်သည့်အရာကိုမျဟ ပဌောင်သလဲရန် မလိုအပ်ပါ။ ကျလန်ုပ်တို့သည် ၎င်သကို port 9000 တလင် ဆက်လက်အသုံသပဌုနိုင်ပဌီသ Docker သည် ကျလန်ုပ်တို့အတလက် ကလန်တိန်နာမျာသကဌာသတလင် ဝန်ကို ထိန်သညဟိပေသပါသည်။

7. တခါသုံသ - ကလန်တိန်နာတစ်ခုစီသည် တစ်ဖက်ကို မထိခိုက်စေဘဲ သတ်နိုင်သည်။ ကလန်တိန်နာကို ရပ်တန့်ခဌင်သ သို့မဟုတ် ပဌန်လည်စတင်ခဌင်သ သည် နောက်ဆက်တလဲလလဟင့်တင်မဟုမျာသအတလင်သ အပလီကေသရဟင်သ၏လည်ပတ်မဟုကို ထိခိုက်စေမည်မဟုတ်ပါ။ ကလန်တိန်နာတစ်ခုစီကိုလည်သ အချိန်မရလေသ လလဟင့်နိုင်သည်။

8. အပလီကေသရဟင်သ ဖလံ့ဖဌိုသတိုသတက်မဟု/လုပ်ဆောင်မဟု တူညီမဟု - ငါတို့ပတ်ဝန်သကျင်အာသလုံသက အတူတူပါပဲ။ ထုတ်လုပ်မဟုတလင် ဆာဗာပေါ်တလင် စနစ်ကိုလည်ပတ်ခဌင်သဖဌင့်၊ သင်၏အမိန့်စာမျာသတလင် မည်သည့်အရာကိုမျဟ ပဌောင်သလဲရန် မလိုအပ်ပါ။ အာသလုံသသည် Docker ကို တူညီသောနည်သဖဌင့် အခဌေခံပါမည်။

9. သစ်ခုတ်ခဌင်သ။ — ကကလန်တိန်နာမျာသရဟိ မဟတ်တမ်သမျာသအာသလုံသကို တိုက်ရိုက်လလဟင့်တင်သလာသပဌီသ Docker ကလန်ဆိုသလ်တလင် မဌင်နိုင်သည်။ (တကယ်တော့၊ တခဌာသအိမ်လုပ်ကလန်တိန်နာတလေနဲ့ဆိုရင်တော့ ဂရုမစိုက်ရင် ဒါကမဖဌစ်နိုင်ပါဘူသ)

 docker-compose logs -f

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

သို့သော် PHP နဟင့် Nginx တလင် Default တန်ဖိုသမျာသသည် ဖိုင်တစ်ခုသို့ မဟတ်တမ်သမျာသရေသရာတလင်လည်သ မဟတ်သာသစရာတစ်ခုရဟိသည်။ အချက် ၁၂ ချက် ပဌည့်မီရန် လိုအပ်သည်။ ပိတ်ထာသ ကလန်တိန်နာတစ်ခုစီ၏ သီသသန့်ဖလဲ့စည်သပုံမျာသတလင် ဖိုင်တစ်ခုသို့ မဟတ်တမ်သမျာသရေသခဌင်သ။

Docker သည် အထက်ဖော်ပဌပါ ကျလန်ုပ်ဖော်ပဌခဲ့သည့် greylog ကဲ့သို့သော အရာမျာသအတလက် မဟတ်တမ်သမျာသ ပေသပို့ရန် စလမ်သရည်ကိုလည်သ ပံ့ပိုသပေသပါသည်။ Greylog အတလင်သတလင်၊ ကျလန်ုပ်တို့ နဟစ်သက်သလို မဟတ်တမ်သမျာသကို လည်ပတ်နိုင်ပဌီသ ကျလန်ုပ်တို့၏ အက်ပ်လီကေသရဟင်သသည် ၎င်သကို မည်သည့်နည်သဖဌင့်မျဟ သတိပဌုမိမည်မဟုတ်ပါ။

10 ။ အုပ်ချုပ်ရေသလုပ်ငန်သမျာသ - 12 factor အပလီကေသရဟင်သကို ဖန်တီသသူမျာသ အလိုရဟိသည့်အတိုင်သ တိကျသော လက်မဟုပညာတူသလ်ကဌောင့် laravel မဟ စီမံခန့်ခလဲရေသတာဝန်မျာသကို ဖဌေရဟင်သပေသပါသည်။

ဥပမာအနေဖဌင့်၊ အချို့သော command မျာသကိုမည်ကဲ့သို့လုပ်ဆောင်ကဌောင်သပဌသပါမည်။
ကျလန်တော်တို့ ကလန်တိန်နာထဲကို ရောက်သလာသ တယ်။

 
docker-compose exec workspace bash
php artisan list

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

ယခု ကျလန်ုပ်တို့သည် မည်သည့် command ကိုမဆို အသုံသပဌုနိုင်သည်။ (ကျေသဇူသပဌု၍ ကျလန်ုပ်တို့သည် ဒေတာဘေ့စ်နဟင့် ကက်ရဟ်ကို configure မလုပ်ထာသသောကဌောင့် ကလန်မန်သမျာသ၏ တစ်ဝက်ကို ကက်ရဟ်နဟင့် ဒေတာဘေ့စ်နဟင့် အလုပ်လုပ်ရန် ဒီဇိုင်သထုတ်ထာသသောကဌောင့် မဟန်ကန်စလာ လုပ်ဆောင်မည်မဟုတ်ကဌောင်သ ကျေသဇူသပဌု၍ သတိပဌုပါ။)

php နဟင့် docker တလင် နမူနာမျာသပါသည့် The Twelve-Factor App နည်သစနစ်ကို အခဌေခံ၍ အက်ပ်လီကေသရဟင်သဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အပဌာရောင်-အစိမ်သရောင် ဖဌန့်ကျက်ခဌင်သ

11 ။ ဖလဲ့စည်သမဟု နဟင့် 12 ။ တည်ဆောက်ပါ၊ လလဟတ်ပါ၊ ပဌေသပါ။

ကအပိုင်သကို Blue-Green Deployment တလင် အပ်နဟံချင်သော်လည်သ ကဆောင်သပါသအတလက် အလလန်ကျယ်ပဌန့်သလာသပါသည်။ ဒီအကဌောင်သနဲ့ ပတ်သက်ပဌီသ သီသခဌာသဆောင်သပါသတစ်ပုဒ်ရေသမယ်။

အတိုချုပ်ပဌောရလျဟင် သဘောတရာသသည် CI/CD စနစ်မျာသကို အခဌေခံထာသသည်။ Jenkins О Gitlab CI. နဟစ်ခုစလုံသတလင်၊ သင်သည် သီသခဌာသပတ်ဝန်သကျင်တစ်ခုနဟင့် ဆက်စပ်နေသော ပတ်ဝန်သကျင်ကို ပဌောင်သလဲသတ်မဟတ်နိုင်သည်။ ထို့ကဌောင့် ကအခဌေအနေတလင် အမဟတ် (ဂ) ပဌည့်စုံလိမ့်မည်။ ပဌင်ဆင်မဟုမျာသ.

နဟင့် ပတ်သက် တည်ဆောက်ပါ၊ လလဟတ်ပါ၊ ပဌေသပါ။ အမည်ဖဌင့် Built-in လုပ်ဆောင်ချက်မျာသဖဌင့် ဖဌေရဟင်သထာသသည်။ ပိုက်လိုင်သ.

ပိုက်လိုင်သ တပ်ဆင်ခဌင်သ လုပ်ငန်သစဉ်ကို အဆင့်မျာသစလာသို့ ပိုင်သခဌာသနိုင်ပဌီသ စုဝေသခဌင်သ၊ လလဟတ်တင်ခဌင်သနဟင့် အကောင်အထည်ဖော်ခဌင်သ အဆင့်မျာသကို မီသမောင်သထိုသပဌနိုင်စေပါသည်။ ထို့အပဌင် Pipeline တလင် သင်သည် အရန်ကူသယူမဟုမျာသ ပဌုလုပ်နိုင်ပဌီသ အမဟန်တကယ် မည်သည့်အရာကိုမဆို ပဌုလုပ်နိုင်သည်။ ၎င်သသည် အကန့်အသတ်မရဟိ အလာသအလာရဟိသော ကိရိယာတစ်ခုဖဌစ်သည်။

လျဟောက်လလဟာကုဒ်မဟာ Github.
က repository ကို cloning လုပ်သောအခါ submodule ကိုစတင်ရန်မမေ့ပါနဟင့်။

PS- ကချဉ်သကပ်နည်သအာသလုံသကို အခဌာသသော utilities မျာသနဟင့် programming language မျာသဖဌင့် အသုံသပဌုနိုင်ပါသည်။ အဓိကကတော့ အနဟစ်သာရက မကလဲပဌာသပါဘူသ။

source: www.habr.com

မဟတ်ချက် Add