යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

පළමුව, කුඩා න්යායක්. සිදුවුයේ කුමක් ද දොළොස් සාධක යෙදුම?

සරල වචන වලින් කිවහොත්, මෙම ලේඛනය නිර්මාණය කර ඇත්තේ SaaS යෙදුම් සංවර්ධනය සරල කිරීම සඳහා වන අතර, නවීන යෙදුම් සංවර්ධනය කිරීමේදී බොහෝ විට මුහුණ දෙන ගැටළු සහ භාවිතයන් පිළිබඳව සංවර්ධකයින් සහ DevOps ඉංජිනේරුවන් දැනුවත් කිරීමට උපකාරී වේ.

ලේඛනය Heroku වේදිකාවේ සංවර්ධකයින් විසින් නිර්මාණය කරන ලදී.

දොළොස්-සාධක යෙදුම ඕනෑම ක්‍රමලේඛන භාෂාවකින් ලියා ඇති යෙදුම් සඳහා සහ ඕනෑම ආධාරක සේවා (දත්ත සමුදායන්, පණිවිඩ පෝලිම්, හැඹිලි, ආදිය) භාවිතා කළ හැක.

මෙම ක්‍රමවේදය පදනම් වන සාධක ගැන කෙටියෙන්:

  1. කේත පදනම - අනුවාද පාලනයේ එක් කේත පදනමක් ලුහුබැඳ ඇත - බහුවිධ යෙදවීම්
  2. යැපීම් - යැපීම් පැහැදිලිව ප්‍රකාශ කිරීම සහ හුදකලා කිරීම
  3. වින්‍යාසය - ධාවන කාලය තුළ වින්‍යාසය සුරකින්න
  4. පිටුබලය සේවා - ප්ලග් ඉන් සම්පත් ලෙස පිටුබලය සේවා සලකා බලන්න
  5. ගොඩනඟන්න, නිදහස් කරන්න, ධාවනය කරන්න - එකලස් කිරීම සහ ක්රියාත්මක කිරීමේ අදියර දැඩි ලෙස වෙන් කරන්න
  6. ක්රියාවලි - යෙදුම අස්ථායී ක්‍රියාවලි එකක් හෝ කිහිපයක් ලෙස ක්‍රියාත්මක කරන්න
  7. වරාය බැඳීම - වරාය බැඳීම හරහා අපනයන සේවා
  8. සමගාමී මුදල් - ක්‍රියාවලි භාවිතයෙන් ඔබගේ යෙදුම පරිමාණය කරන්න
  9. ඉවත දැමීමේ හැකියාව - වේගවත් ආරම්භය සහ පිරිසිදු වසා දැමීම සමඟ විශ්වසනීයත්වය උපරිම කරන්න
  10. යෙදුම් සංවර්ධනය / මෙහෙයුම් සමානාත්මතාවය - ඔබේ සංවර්ධනය, වේදිකාගත කිරීම සහ නිෂ්පාදන පරිසරය හැකි තරම් සමානව තබා ගන්න
  11. ලොග් කිරීම - සිදුවීම් ප්‍රවාහයක් ලෙස ලොගය බලන්න
  12. පරිපාලන කාර්යයන් - තාවකාලික ක්‍රියාවලීන් භාවිතයෙන් පරිපාලන/කළමනාකරණ කාර්යයන් ඉටු කරන්න

පහත සම්පත් වලින් ඔබට සාධක 12 ගැන වැඩි විස්තර ලබා ගත හැක:

නිල්-කොළ යෙදවීම යනු කුමක්ද?

නිල්-කොළ යෙදවීම යනු යෙදුමක් ලබා දීමේ ක්‍රමයකි නිෂ්පාදනය අවසාන සේවාදායකයාට ඔහුගේ පැත්තෙන් කිසිදු වෙනසක් නොපෙනෙන ආකාරයෙන්. වෙනත් වචන වලින් කිවහොත්, ශුන්‍ය සමඟ යෙදුමක් යෙදවීම අක්‍රීයයි.

සම්භාව්‍ය BG Deploy යෝජනා ක්‍රමය පහත රූපයේ පෙන්වා ඇති ආකාරයට පෙනේ.

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

  • ආරම්භයේ දී සම්පූර්ණයෙන්ම එකම කේතය, යෙදුම, ව්‍යාපෘතිය සහිත භෞතික සේවාදායකයන් 2 ක් ඇති අතර රවුටරයක් ​​(බැලන්සර්) ඇත.
  • රවුටරය මුලින් සියලුම ඉල්ලීම් එක් සේවාදායකයකට යොමු කරයි (කොළ පාටයි).
  • ඔබට නැවත නිකුත් කිරීමට අවශ්‍ය මොහොතේදී, සම්පූර්ණ ව්‍යාපෘතිය වෙනත් සේවාදායකයක යාවත්කාලීන වේ (නිල්), දැනට කිසිදු ඉල්ලීමක් ක්‍රියාවට නංවන්නේ නැත.
  • කේතය ක්‍රියාත්මක වූ පසු නිල් සේවාදායකය සම්පූර්ණයෙන්ම යාවත්කාලීන කර ඇත, රවුටරයට මාරු වීමට විධානයක් ලබා දී ඇත කොළ මත නිල් සේවාදායකය.
  • දැන් සියලුම සේවාලාභීන් විසින් ධාවනය වන කේතයේ ප්රතිඵලය දකියි නිල් සේවාදායකය.
  • ටික කාලයක්, කොළ පාටයි වෙත අසාර්ථක යෙදවීමකදී සේවාදායකය උපස්ථ පිටපතක් ලෙස සේවය කරයි නිල් සේවාදායකය සහ අසාර්ථක සහ දෝෂ වලදී, රවුටරය පරිශීලක ප්‍රවාහය ආපසු මාරු කරයි කොළ පාටයි පැරණි ස්ථාවර අනුවාදය සහිත සේවාදායකය, සහ නව කේතය සංශෝධනය සහ පරීක්ෂා කිරීම සඳහා යවනු ලැබේ.
  • තවද ක්‍රියාවලිය අවසානයේදී, එය එකම ආකාරයකින් යාවත්කාලීන වේ කොළ පාටයි සේවාදායකය. එය යාවත්කාලීන කිරීමෙන් පසුව, රවුටරය නැවත ඉල්ලීම් ප්‍රවාහය මාරු කරයි කොළ පාටයි සේවාදායකය.

ඒ සියල්ල ඉතා හොඳ පෙනුමක් ඇති අතර මුලින්ම බැලූ බැල්මට එය සමඟ ගැටළු ඇති නොවිය යුතුය.
නමුත් අප ජීවත් වන්නේ නූතන ලෝකයේ බැවින්, සම්භාව්ය යෝජනා ක්රමයේ දක්වා ඇති පරිදි භෞතික මාරු කිරීම සමඟ විකල්පය අපට ගැලපෙන්නේ නැත. දැනට තොරතුරු වාර්තා කරන්න, අපි පසුව එය වෙත ආපසු යන්නෙමු.

නරක සහ හොඳ උපදෙස්

වගකීමෙන් යුතුව ඔබ එවන: පහත උදාහරණ මගින් මා භාවිතා කරන උපයෝගිතා/ක්‍රමවේද පෙන්වයි, ඔබට සමාන කාර්යයන් සහිත ඕනෑම විකල්පයක් භාවිතා කළ හැක.

බොහෝ උදාහරණ එක් ආකාරයකින් හෝ වෙනත් ආකාරයකින් PHP සහ Docker සමඟ වෙබ් සංවර්ධනය සමඟ (මෙය පුදුමයකි) ඡේදනය වේ.

පහත ඡේදවල නිශ්චිත උදාහරණ භාවිතා කරමින් සාධක භාවිතය පිළිබඳ සරල ප්‍රායෝගික විස්තරයක් සපයයි; ඔබට මෙම මාතෘකාව පිළිබඳ වැඩි න්‍යායක් ලබා ගැනීමට අවශ්‍ය නම්, මුල් මූලාශ්‍රයට ඉහත සබැඳි අනුගමනය කරන්න.

1. කේත පදනම

FTP සහ FileZilla භාවිතා කර එකින් එක සර්වර් වෙත ගොනු උඩුගත කරන්න, නිෂ්පාදන සේවාදායකයේ හැර වෙනත් තැනක කේතය ගබඩා නොකරන්න.

ව්‍යාපෘතියට සෑම විටම තනි කේත පදනමක් තිබිය යුතුය, එනම් සියලුම කේතයන් එකකින් පැමිණේ Git ගබඩාව. සේවාදායකයන් (නිෂ්පාදනය, වේදිකාගත කිරීම, test1, test2...) එක් පොදු ගබඩාවක ශාඛා වලින් කේතය භාවිතා කරයි. මේ ආකාරයෙන් අපි කේත අනුකූලතාවයක් ලබා ගනිමු.

2. යැපීම්

ෆෝල්ඩරවල ඇති සියලුම පුස්තකාල ව්‍යාපෘතියේ මූලයට කෙලින්ම බාගන්න. නව කේතය පුස්තකාලයේ වත්මන් අනුවාදය සමඟ ෆෝල්ඩරයට මාරු කිරීමෙන් යාවත්කාලීන කරන්න. තවත් සේවා 20ක් ක්‍රියාත්මක වන සත්කාරක සේවාදායකයේ අවශ්‍ය සියලුම උපයෝගිතා සෘජුවම ස්ථාපනය කරන්න.

ව්‍යාපෘතියකට සෑම විටම පැහැදිලිව තේරුම් ගත හැකි පරායත්ත ලැයිස්තුවක් තිබිය යුතුය (පරාධීන් යන්නෙන් මා අදහස් කරන්නේ පරිසරය ද වේ). සියලු පරායත්තතා පැහැදිලිව නිර්වචනය කර හුදකලා කළ යුතුය.
අපි උදාහරණයක් ලෙස ගනිමු සංයුක්තය и Docker.

සංයුක්තය — PHP හි පුස්තකාල ස්ථාපනය කිරීමට ඔබට ඉඩ සලසන පැකේජ කළමනාකරු. නිර්මාපකයා ඔබට අනුවාද දැඩිව හෝ ලිහිල්ව නියම කිරීමට සහ ඒවා පැහැදිලිව නිර්වචනය කිරීමට ඉඩ දෙයි. සේවාදායකයේ විවිධ ව්‍යාපෘති 20ක් තිබිය හැකි අතර ඒ සෑම එකක්ම අනෙකෙන් ස්වාධීනව පුද්ගලික පැකේජ සහ පුස්තකාල ලැයිස්තුවක් ඇත.

Docker - යෙදුම ක්‍රියාත්මක වන පරිසරය නිර්වචනය කිරීමට සහ හුදකලා කිරීමට ඔබට ඉඩ සලසන උපයෝගීතාවයකි. ඒ අනුව, නිර්මාපකයෙකු මෙන්, නමුත් වඩාත් හොඳින්, යෙදුම ක්‍රියා කරන්නේ කුමක් දැයි අපට තීරණය කළ හැකිය. PHP හි නිශ්චිත අනුවාදයක් තෝරන්න, අමතර කිසිවක් එකතු නොකර ව්‍යාපෘතිය ක්‍රියා කිරීමට අවශ්‍ය පැකේජ පමණක් ස්ථාපනය කරන්න. සහ වඩාත්ම වැදගත් දෙය නම්, ධාරක යන්ත්‍රයේ සහ අනෙකුත් ව්‍යාපෘතිවල පැකේජ සහ පරිසරයට බාධා නොකර. එනම්, Docker හරහා ක්‍රියාත්මක වන සේවාදායකයේ ඇති සියලුම ව්‍යාපෘති සඳහා ඕනෑම පැකේජ කට්ටලයක් සහ සම්පූර්ණයෙන්ම වෙනස් පරිසරයක් භාවිතා කළ හැක.

3. වින්යාසය

වින්‍යාසයන් නියතයන් ලෙස කෙලින්ම කේතයේ ගබඩා කරන්න. පරීක්ෂණ සේවාදායකය සඳහා වෙනම නියතයන්, නිෂ්පාදනය සඳහා වෙනම. පරිසරය මත පදනම්ව යෙදුමේ ක්‍රියාකාරිත්වය කෙලින්ම ව්‍යාපෘතියේ ව්‍යාපාරික තර්කය තුළ වෙනත් ඉදිකිරීම් නම් භාවිතා කරන්න.

සැකසුම් - ව්‍යාපෘති යෙදවීම වෙනස් විය යුතු එකම ක්‍රමය මෙයයි. ඉතා මැනවින්, වින්‍යාසයන් පාරිසරික විචල්‍යයන් (env vars) හරහා ගමන් කළ යුතුය.

එනම්, ඔබ .config.prod .config.local වින්‍යාස ගොනු කිහිපයක් ගබඩා කර ඒවා යෙදවීමේදී .config (යෙදුම දත්ත කියවන ප්‍රධාන වින්‍යාසය) ලෙස නැවත නම් කළත් - මෙය නිවැරදි ප්‍රවේශය නොවනු ඇත. මෙම අවස්ථාවෙහිදී වින්‍යාසයෙන් ලැබෙන තොරතුරු සියලුම යෙදුම් සංවර්ධකයින්ට ප්‍රසිද්ධියේ ලබා ගත හැකි අතර නිෂ්පාදන සේවාදායකයෙන් ලැබෙන දත්ත සම්මුතියකට ලක් වේ. සියලුම වින්‍යාසයන් සෘජුවම යෙදවීමේ පද්ධතියේ (CI/CD) ගබඩා කළ යුතු අතර, යෙදවීමේදී නිශ්චිත පරිසරයක් සඳහා අවශ්‍ය විවිධ අගයන් සහිත විවිධ පරිසරයන් සඳහා ජනනය කළ යුතුය.

4. තෙවන පාර්ශවීය සේවා

පරිසරයට දැඩි ලෙස බැඳී සිටින්න, ඇතැම් පරිසරයන් තුළ එකම සේවාවන් සඳහා විවිධ සම්බන්ධතා භාවිතා කරන්න.

ඇත්ත වශයෙන්ම, මෙම ලක්ෂ්‍යය වින්‍යාස කිරීම් පිළිබඳ කරුණ සමඟ දැඩි ලෙස අතිච්ඡාදනය වේ, මන්ද මෙම ලක්ෂ්‍යය නොමැතිව සාමාන්‍ය වින්‍යාස දත්ත සෑදිය නොහැකි අතර සාමාන්‍යයෙන් වින්‍යාස කිරීමේ හැකියාව කිසිවකට පහත වැටෙන්නේ නැත.

පෝලිම් සේවාදායක, දත්ත සමුදායන්, හැඹිලි සේවා වැනි බාහිර සේවා සඳහා වන සියලුම සම්බන්ධතා දේශීය පරිසරය සහ තෙවන පාර්ශවීය / නිෂ්පාදන පරිසරය යන දෙකටම සමාන විය යුතුය. වෙනත් වචන වලින් කිවහොත්, ඕනෑම අවස්ථාවක, සම්බන්ධතා තන්තුව වෙනස් කිරීමෙන්, යෙදුම් කේතය වෙනස් නොකර පාදම #1 සමඟින් #2 පාදයට ඇමතුම් ප්‍රතිස්ථාපනය කළ හැක. නැතහොත්, ඉදිරිය දෙස බලන විට, උදාහරණයක් ලෙස, සේවාව පරිමාණය කිරීමේදී, ඔබට අතිරේක හැඹිලි සේවාදායකයක් සඳහා විශේෂ ආකාරයකින් සම්බන්ධතාවය සඳහන් කිරීමට සිදු නොවේ.

5. ගොඩනැගීම, මුදා හැරීම, ක්රියාත්මක කිරීම

නිකුතුව ආපසු පෙරළීමේ අවස්ථාවක් නොමැතිව, කේතයේ අවසාන අනුවාදය පමණක් සේවාදායකයේ තබා ගන්න. තැටියේ ඉඩ පිරවීම අවශ්ය නොවේ. දෝෂයක් සමඟ නිෂ්පාදනයට කේතය මුදා හැරිය හැකි යැයි සිතන ඕනෑම අයෙකු නරක ක්‍රමලේඛකයෙකි!

යෙදවීමේ සියලුම අදියරයන් එකිනෙකින් වෙන් කළ යුතුය.

ආපසු පෙරළීමට අවස්ථාවක් තිබේ. ඉක්මන් ප්‍රවේශයකින් සුරකින ලද යෙදුමේ පැරණි පිටපත් (දැනටමත් එකලස් කර ඇති සහ සටනට සූදානම්) සමඟ නිකුතු කරන්න, එවිට දෝෂ ඇති වුවහොත් ඔබට පැරණි අනුවාදය ප්‍රතිසාධනය කළ හැකිය. එනම්, කොන්දේසි සහිතව ෆෝල්ඩරයක් ඇත නිකුත්වේ සහ ෆෝල්ඩරය දැනට, සහ ෆෝල්ඩරය සාර්ථකව යෙදවීමෙන් සහ එකලස් කිරීමෙන් පසුව දැනට ඇතුළත ඇති නව නිකුතුවට සංකේතාත්මක සබැඳියක් මගින් සම්බන්ධ කර ඇත නිකුත්වේ මුදා හැරීමේ අංකයේ සාම්ප්‍රදායික නම සමඟ.

ඔබට කේතය අතර මාරු වීමට පමණක් නොව, සියල්ල ආපසු හැරවීමේ හැකියාව ඇති සියලු සම්පත් සහ පරිසරයන් අතර පවා මාරු වීමට ඉඩ සලසන Blue-Green යෙදවීම අපට මතක ඇති ස්ථානය මෙයයි.

6. ක්රියාවලි

යෙදුම් තත්ත්‍ව දත්ත සෘජුවම යෙදුම තුළම ගබඩා කරන්න. යෙදුමේම RAM හි සැසි භාවිතා කරන්න. තුන්වන පාර්ශ්ව සේවා අතර හැකිතාක් බෙදාගැනීම භාවිතා කරන්න. යෙදුමට තිබිය හැක්කේ එක් ක්‍රියාවලියක් පමණක් වන අතර පරිමාණය කිරීමට ඉඩ නොදෙන්න.

සැසි සම්බන්ධයෙන්, තෙවන පාර්ශවීය සේවාවන් (memcached, redis) මගින් පාලනය වන හැඹිලියක පමණක් දත්ත ගබඩා කරන්න, එබැවින් ඔබට යෙදුම් ක්‍රියාවලි 20 ක් ක්‍රියාත්මක වුවද, ඒවායින් ඕනෑම එකක්, හැඹිලියට ප්‍රවේශ වී, සේවාදායකයා සමඟ දිගටම වැඩ කිරීමට හැකි වනු ඇත. පරිශීලකයා වෙනත් ක්‍රියාවලියක යෙදුම සමඟ වැඩ කළ එකම තත්වය. මෙම ප්රවේශය සමඟින්, ඔබ තෙවන පාර්ශවීය සේවාවන් කොපමණ පිටපත් භාවිතා කළත්, සෑම දෙයක්ම සාමාන්යයෙන් සහ දත්ත වෙත ප්රවේශ වීමේ ගැටළු නොමැතිව ක්රියා කරනු ඇත.

7. වරාය බැඳීම

තෙවන පාර්ශවීය සේවාවන් සමඟ වැඩ කරන්නේ කෙසේදැයි දැනගත යුත්තේ වෙබ් සේවාදායකය පමණි. නැතහොත් වඩා හොඳ, තෙවන පාර්ශවීය සේවාවන් සෘජුවම වෙබ් සේවාදායකය තුළ ස්ථාපනය කරන්න. උදාහරණයක් ලෙස, Apache හි PHP මොඩියුලයක් ලෙස.
ඔබගේ සියලුම සේවාවන් යම් ලිපිනයකට සහ තොටකට (localgost:5432, localhost:3000, nginx:80, php-fpm:9000) ප්‍රවේශය හරහා එකිනෙකාට ප්‍රවේශ විය යුතුය, එනම්, nginx වෙතින් මට php-fpm සහ වෙත යන දෙකටම ප්‍රවේශ විය හැක. postgres, සහ php-fpm සිට postgres සහ nginx දක්වා සහ ඇත්ත වශයෙන්ම සෑම සේවාවකින්ම මට වෙනත් සේවාවකට ප්‍රවේශ විය හැක. මේ ආකාරයට, සේවාවක ශක්‍යතාව වෙනත් සේවාවක ශක්‍යතාව හා බැඳී නැත.

8. සමාන්තරකරණය

එක් ක්‍රියාවලියක් සමඟ වැඩ කරන්න, එසේ නොමැතිනම් ක්‍රියාවලීන් කිහිපයකට එකිනෙකා සමඟ සම්බන්ධ වීමට නොහැකි වනු ඇත!

පරිමාණය සඳහා ඉඩ තබන්න. මේ සඳහා ඩොකර් රංචුව විශිෂ්ටයි.
Docker Swarm යනු විවිධ යන්ත්‍ර සහ එකම යන්ත්‍රයේ බහාලුම් පොකුරක් අතර බහාලුම් පොකුරු නිර්මාණය කිරීම සහ කළමනාකරණය කිරීම සඳහා වූ මෙවලමකි.

රංචුව භාවිතයෙන්, මම එක් එක් ක්‍රියාවලියට කොපමණ සම්පත් ප්‍රමාණයක් වෙන් කරනවාද සහ එම සේවාවේම ක්‍රියාවලි කීයක් දියත් කරනවාද යන්න මට තීරණය කළ හැකි අතර, ලබා දී ඇති වරායක දත්ත ලබා ගන්නා අභ්‍යන්තර සමතුලිතකය එය ක්‍රියාවලීන් වෙත ස්වයංක්‍රීයව ප්‍රොක්සි කරයි. මේ අනුව, සේවාදායකයේ බර වැඩි වී ඇති බව දැක, මට තවත් ක්‍රියාවලි එකතු කළ හැකිය, එමඟින් ඇතැම් ක්‍රියාවලීන් මත පැටවීම අඩු කරයි.

9. ඉවත දැමීමේ හැකියාව

ක්‍රියාවලි සහ දත්ත සමඟ වැඩ කිරීමට පෝලිම් භාවිතා නොකරන්න. එක් ක්‍රියාවලියක් මරා දැමීම සමස්ත යෙදුමටම බලපෑ යුතුය. එක් සේවාවක් අඩු වුවහොත්, සියල්ල පහත වැටේ.

සෑම ක්‍රියාවලියක්ම සහ සේවාවක් ඕනෑම වේලාවක අක්‍රිය කළ හැකි අතර මෙය වෙනත් සේවාවන්ට බල නොපායි (ඇත්ත වශයෙන්ම, මෙම සේවාව වෙනත් සේවාවක් සඳහා නොමැති බව මින් අදහස් නොවේ, නමුත් මෙම සේවාවෙන් පසුව වෙනත් සේවාවක් අක්‍රිය නොවනු ඇත). සියලුම ක්‍රියාවලීන් අලංකාර ලෙස අවසන් කළ යුතුය, එවිට ඒවා අවසන් කළ විට, කිසිදු දත්තයකට හානි නොවන අතර ඊළඟ වතාවේ ඔබ එය ක්‍රියාත්මක කරන විට පද්ධතිය නිවැරදිව ක්‍රියා කරයි. එනම්, හදිසි අවසන් කිරීමකදී පවා දත්ත වලට හානි නොකළ යුතුය (ගණුදෙණු යාන්ත්‍රණය මෙහි සුදුසු වේ, දත්ත සමුදායේ විමසුම් ක්‍රියා කරන්නේ කණ්ඩායම් වශයෙන් පමණි, සහ සමූහයෙන් අවම වශයෙන් එක් විමසුමක් අසාර්ථක වුවහොත් හෝ ක්‍රියාත්මක වන්නේ නම් දෝෂය, එවිට සමූහයෙන් වෙනත් කිසිදු විමසීමක් අවසානයේ අසාර්ථක නොවේ).

10. යෙදුම් සංවර්ධනය/මෙහෙයුම් සමානාත්මතාවය

යෙදුමේ නිෂ්පාදනය, වේදිකාගත කිරීම සහ දේශීය අනුවාදය වෙනස් විය යුතුය. නිෂ්පාදනයේදී අපි Yii Lite රාමුව සහ දේශීයව Yii භාවිතා කරමු, එවිට එය නිෂ්පාදනයේදී වේගයෙන් ක්‍රියා කරයි!

යථාර්ථය නම්, සියලුම යෙදවීම් සහ කේතය සමඟ වැඩ කිරීම පාහේ සමාන පරිසරයක තිබිය යුතුය (අපි භෞතික දෘඩාංග ගැන කතා නොකරමු). එසේම, ඕනෑම සංවර්ධන සේවකයෙකුට අවශ්‍ය නම් නිෂ්පාදනයට කේතය යෙදවීමට හැකි විය යුතු අතර, විශේෂ පුහුණුව ලත් සමහර ඩෙවොස් දෙපාර්තමේන්තුවක් නොවේ, විශේෂ ශක්තියට ස්තූතිවන්ත වන්නට පමණක් යෙදුම නිෂ්පාදනයට ඔසවා තැබිය හැකිය.

මේ සඳහා Docker ද අපට උපකාර කරයි. පෙර සියලු කරුණු නිරීක්ෂණය කළ හොත්, ඩොකර් භාවිතයෙන් නිෂ්පාදනය සහ දේශීය යන්ත්‍රය මත පරිසරය යෙදවීමේ ක්‍රියාවලිය විධාන එකක් හෝ දෙකක් ඇතුළත් කිරීමට ගෙන එනු ඇත.

11. ලඝු-සටහන්

අපි ලිපිගොනු සහ දත්ත සමුදායන් වෙත ලොග් ලියන්නෙමු! අපි ලොග් වලින් ගොනු සහ දත්ත සමුදායන් පිරිසිදු නොකරමු. අපි පෙටා බයිට් 9000ක් තියෙන හාඩ් එකක් ගමු, ඒක හරි.

සියලුම ලඝු-සටහන් සිදුවීම් ධාරාවක් ලෙස සැලකිය යුතුය. යෙදුමම ලඝු-සටහන් සැකසීමට සම්බන්ධ නොවිය යුතුය. ලඝු-සටහන් stdout වෙත ප්‍රතිදානය කළ යුතුය, නැතහොත් udp වැනි ප්‍රොටෝකෝලයක් හරහා යැවිය යුතුය, එවිට ලඝු-සටහන් සමඟ වැඩ කිරීමෙන් යෙදුමට කිසිදු ගැටළුවක් ඇති නොවේ. graylog මේ සඳහා හොඳයි. udp හරහා සියලුම ලොග් ලබා ගන්නා Graylog (මෙම ප්‍රොටෝකෝලය පැකට්ටුව සාර්ථක ලෙස පිළිගැනීම පිළිබඳ ප්‍රතිචාරයක් බලා සිටීම අවශ්‍ය නොවේ) යෙදුමට කිසිදු ආකාරයකින් බාධා නොකරන අතර ලොග ව්‍යුහගත කිරීම සහ සැකසීම සම්බන්ධයෙන් පමණක් කටයුතු කරයි. එවැනි ප්රවේශයන් සමඟ වැඩ කිරීමට යෙදුම් තර්කනය වෙනස් නොවේ.

12. පරිපාලන කාර්යයන්

දත්ත, දත්ත සමුදායන් යනාදිය යාවත්කාලීන කිරීම සඳහා, API හි වෙන වෙනම සාදන ලද අන්ත ලක්ෂ්‍යයක් භාවිතා කරන්න, එය පේළියකට 2 වතාවක් ක්‍රියාත්මක කිරීමෙන් සියල්ල අනුපිටපත් වේ. නමුත් ඔබ මෝඩ නැත, ඔබ දෙවරක් ක්ලික් නොකරනු ඇත, සහ අපට සංක්රමණය අවශ්ය නොවේ.

සියලුම පරිපාලන කාර්යයන් නිකුත් කිරීමේ මට්ටමින් සියලුම කේතයන් මෙන් එකම පරිසරයක සිදු කළ යුතුය. එනම්, අපට දත්ත සමුදායේ ව්‍යුහය වෙනස් කිරීමට අවශ්‍ය නම්, සමහර දෘශ්‍ය දත්ත සමුදා කළමනාකරණ මෙවලම් හරහා තීරු වල නම් වෙනස් කිරීමෙන් සහ නව ඒවා එකතු කිරීමෙන් අපි එය අතින් සිදු නොකරමු. එවැනි දේ සඳහා, අපි වෙනම ස්ක්‍රිප්ට් නිර්මාණය කරමු - සංක්‍රමණ, ඒවා සෑම තැනකම සහ සෑම පරිසරයකම එකම ආකාරයකින් පොදු සහ තේරුම්ගත හැකි ප්‍රතිඵලයක් සමඟ ක්‍රියාත්මක වේ. දත්ත සමඟ ව්‍යාපෘතිය පිරවීම වැනි අනෙකුත් සියලුම කාර්යයන් සඳහා සමාන ක්‍රමවේද භාවිතා කළ යුතුය.

PHP, Laravel, Laradock, Docker-Compose හි උදාහරණ ක්‍රියාත්මක කිරීම

P.S සියලුම උදාහරණ MacOS මත සාදන ලදී. ඒවායින් බොහොමයක් ලිනක්ස් සඳහා ද සුදුසු ය. වින්ඩෝස් භාවිතා කරන්නන්, මට සමාවෙන්න, නමුත් මම දිගු කලක් වින්ඩෝස් සමඟ වැඩ කර නැත.

අපගේ පරිගණකයේ PHP හි කිසිදු අනුවාදයක් ස්ථාපනය කර නොමැති සහ කිසිවක් නොමැති තත්වයක් අපි සිතමු.
docker සහ docker-compose හි නවතම අනුවාද ස්ථාපනය කරන්න. (මෙය අන්තර්ජාලයෙන් සොයා ගත හැක)

docker -v && 
docker-compose -v

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

1. දමන්න ලැරැඩොක්

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

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

Laradock සම්බන්ධයෙන්, එය බහාලුම් සහ සහායක දේවල් බොහොමයක් අඩංගු ඉතා සිසිල් දෙයක් බව මම කියමි. නමුත් එහි අතිරික්තය නිසා නිෂ්පාදනයේ වෙනස් කිරීම් නොමැතිව Laradock භාවිතා කිරීම මම නිර්දේශ නොකරමි. Laradock හි උදාහරණ මත පදනම්ව ඔබේම බහාලුම් නිර්මාණය කිරීම වඩා හොඳය, මෙය වඩාත් ප්‍රශස්ත වනු ඇත, මන්ද කිසිවෙකුට එහි ඇති සියල්ල එකවර අවශ්‍ය නොවේ.

2. අපගේ යෙදුම ධාවනය කිරීමට Laradock වින්‍යාස කරන්න.

cd laradock && 
cp env-example .env

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

2.1 සමහර සංස්කාරකයක habr නාමාවලිය (laradock ක්ලෝන කර ඇති මව් ෆෝල්ඩරය) විවෘත කරන්න. (මගේ PHPStorm නඩුවේ)

මෙම අදියරේදී අපි ව්යාපෘතියට නමක් පමණක් ලබා දෙන්නෙමු.

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

2.2 වැඩබිම් රූපය දියත් කරන්න. (ඔබේ නඩුවේදී, පින්තූර ගොඩනැගීමට යම් කාලයක් ගතවනු ඇත)
Workspace යනු සංවර්ධකයා වෙනුවෙන් රාමුව සමඟ වැඩ කිරීම සඳහා විශේෂයෙන් සකස් කරන ලද රූපයකි.

අපි භාවිතා කරමින් කන්ටේනරය ඇතුළට යනවා

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

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

2.3 Laravel ස්ථාපනය කිරීම

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

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

2.4 ස්ථාපනය කිරීමෙන් පසු, අපි ව්‍යාපෘතිය සමඟ නාමාවලිය නිර්මාණය කර ඇත්දැයි පරීක්ෂා කර කොම්පෝස් කරන්නෙමු.

ls
exit
docker-compose down

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

2.5 අපි නැවත PHPStorm වෙත ගොස් .env ගොනුව තුළ අපගේ laravel යෙදුමට නිවැරදි මාර්ගය සකසමු.

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

3. සියලුම කේතය Git වෙත එක් කරන්න.

මෙය සිදු කිරීම සඳහා, අපි Github (හෝ වෙනත් ඕනෑම තැනක) මත ගබඩාවක් සාදන්නෙමු. අපි terminal එකේ habr directory එකට ගිහින් පහත code එක execute කරමු.

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 හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

පහසුව සඳහා, Git සඳහා දෘශ්‍ය අතුරුමුහුණතක් භාවිතා කිරීමට මම නිර්දේශ කරමි, මගේ නඩුවේදී එය එසේ ය GitKraken. (මෙන්න යොමු සබැඳියක්)

4. අපි දියත් කරමු!

ආරම්භ කිරීමට පෙර, වරාය 80 සහ 443 මත කිසිවක් එල්ලී නොමැති බවට වග බලා ගන්න.

docker-compose up -d nginx php-fpm

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

මේ අනුව, අපගේ ව්‍යාපෘතිය වෙනම සේවාවන් 3 කින් සමන්විත වේ:

  • nginx - වෙබ් සේවාදායකය
  • php-fpm - වෙබ් සේවාදායකයකින් ඉල්ලීම් ලබා ගැනීම සඳහා php
  • වැඩබිම - සංවර්ධකයින් සඳහා php

මේ මොහොතේ, අපි ලකුණු 4 න් 12 ක් සපුරාලන යෙදුමක් නිර්මාණය කර ඇති බව අපි සාක්ෂාත් කර ඇත්තෙමු, එනම්:

1. කේත පදනම — සියලුම කේතය එක් ගබඩාවක ඇත (කුඩා සටහන: laravel ව්‍යාපෘතිය තුළ ඩොකර් එකතු කිරීම නිවැරදි විය හැක, නමුත් මෙය වැදගත් නොවේ).

2. යැපීම් - අපගේ සියලු පරායත්තතා යෙදුම්/composer.json සහ එක් එක් බහාලුම්වල එක් එක් Dockerfile තුළ පැහැදිලිව ලියා ඇත.

3. පිටුබලය සේවා - සෑම සේවාවක්ම (php-fom, nignx, Workspace) තමන්ගේම ජීවිතයක් ගත කරන අතර පිටතින් සම්බන්ධ වී ඇති අතර එක් සේවාවක් සමඟ වැඩ කරන විට අනෙකට බලපාන්නේ නැත.

4. ක්රියාවලි - සෑම සේවාවක්ම එක් ක්රියාවලියකි. සෑම සේවාවක්ම අභ්‍යන්තර තත්වය පවත්වාගෙන යන්නේ නැත.

5. වරාය බැඳීම

docker ps

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

අපට පෙනෙන පරිදි, සෑම සේවාවක්ම තමන්ගේම වරායක් මත ක්‍රියාත්මක වන අතර අනෙකුත් සියලුම සේවාවන් සඳහා ප්‍රවේශ විය හැකිය.

6. සමගාමී මුදල්

Docker අපට ඒවා අතර ස්වයංක්‍රීය බර තුලනය සමග එකම සේවාවන්හි බහු ක්‍රියාවලි බිහි කිරීමට ඉඩ සලසයි.

අපි බහාලුම් නවත්වා ධජය හරහා ධාවනය කරමු --පරිමාණ

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

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

අපට පෙනෙන පරිදි, php-fpm කන්ටේනරයේ පිටපත් නිර්මාණය කර ඇත. මෙම කන්ටේනරය සමඟ වැඩ කිරීමේදී අපට කිසිවක් වෙනස් කිරීමට අවශ්ය නොවේ. අපි එය වරාය 9000 වෙත ප්‍රවේශ වීම දිගටම කරගෙන යන අතර, Docker අප සඳහා බහාලුම් අතර බර නියාමනය කරයි.

7. ඉවත දැමීමේ හැකියාව - එක් එක් කන්ටේනරය අනෙකට හානියක් නොවන පරිදි මරා දැමිය හැකිය. කන්ටේනරය නැවැත්වීම හෝ නැවත ආරම්භ කිරීම පසුකාලීන දියත් කිරීම් වලදී යෙදුමේ ක්‍රියාකාරිත්වයට බලපාන්නේ නැත. සෑම බහාලුමක්ම ඕනෑම වේලාවක එසවිය හැකිය.

8. යෙදුම් සංවර්ධනය / මෙහෙයුම් සමානාත්මතාවය - අපගේ සියලු පරිසරයන් එක හා සමානයි. නිෂ්පාදනයේ සේවාදායකයක් මත පද්ධතිය ධාවනය කිරීමෙන්, ඔබේ විධානවල කිසිවක් වෙනස් කිරීමට ඔබට සිදු නොවේ. සෑම දෙයක්ම එකම ආකාරයෙන් Docker මත පදනම් වනු ඇත.

9. ලොග් කිරීම — මෙම බහාලුම්වල ඇති සියලුම ලොගයන් ප්‍රවාහයට යන අතර ඩොකර් කොන්සෝලය තුළ දෘශ්‍යමාන වේ. (මෙම අවස්ථාවේදී, ඇත්ත වශයෙන්ම, වෙනත් ගෙදර හැදූ බහාලුම් සමඟ, ඔබ එය රැකබලා නොගන්නේ නම් මෙය එසේ නොවිය හැකිය)

 docker-compose logs -f

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

නමුත් PHP සහ Nginx හි පෙරනිමි අගයන් ගොනුවකට ලඝු-සටහන් ලියන බවට හසුවීමක් තිබේ. සාධක 12 සපුරාලීම සඳහා, එය අවශ්ය වේ විසන්ධි කරන්න එක් එක් බහාලුම්වල වින්‍යාසය තුළ ගොනුවකට ලඝු-සටහන් වෙන වෙනම ලිවීම.

Docker මගින් stdout වලට පමණක් නොව මා ඉහතින් සදහන් කල graylog වැනි දේ වලටද logs යැවීමේ හැකියාව ලබාදේ. සහ ග්‍රේලොග් ඇතුළත, අපට කැමති පරිදි ලොග් ක්‍රියාත්මක කළ හැකි අතර අපගේ යෙදුම මෙය කිසිඳු ආකාරයකින් නොදකිනු ඇත.

10. පරිපාලන කාර්යයන් — 12 සාධක යෙදුමේ නිර්මාතෘවරුන් කැමති ආකාරයටම ශිල්පීන්ගේ මෙවලමට ස්තූතිවන්ත වන පරිදි සියලුම පරිපාලන කාර්යයන් විසඳනු ලබන්නේ laravel මගිනි.

උදාහරණයක් ලෙස, සමහර විධානයන් ක්රියාත්මක වන ආකාරය මම පෙන්වන්නම්.
අපි කන්ටේනරය තුළට යනවා.

 
docker-compose exec workspace bash
php artisan list

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

දැන් අපට ඕනෑම විධානයක් භාවිතා කළ හැකිය. (අපි දත්ත සමුදාය සහ හැඹිලිය වින්‍යාස නොකළ බව කරුණාවෙන් සලකන්න, එබැවින් විධානවලින් අඩක් නිවැරදිව ක්‍රියාත්මක නොවනු ඇත, මන්ද ඒවා හැඹිලිය සහ දත්ත සමුදාය සමඟ වැඩ කිරීමට සැලසුම් කර ඇත).

යෙදුම් සංවර්ධනය සහ නිල්-කොළ යෙදවීම, php සහ docker හි උදාහරණ සහිත දොළොස්-සාධක යෙදුම් ක්‍රමවේදය මත පදනම් වේ

11. සැකසුම් සහ 12 කි. ගොඩනඟන්න, නිදහස් කරන්න, ධාවනය කරන්න

මට මෙම කොටස Blue-Green Deployment සඳහා කැප කිරීමට අවශ්‍ය විය, නමුත් එය මෙම ලිපිය සඳහා ඉතා පුළුල් විය. මම මේ ගැන වෙනම ලිපියක් ලියන්නම්.

කෙටියෙන් කිවහොත්, සංකල්පය CI/CD වැනි පද්ධති මත පදනම් වේ ජෙන්කින්ස් и Gitlab CI. දෙකෙහිම, ඔබට නිශ්චිත පරිසරයක් හා සම්බන්ධ පරිසර විචල්‍යයන් සැකසිය හැක. ඒ අනුව, මෙම තත්ත්වය තුළ, c ලක්ෂ්යය ඉටු වනු ඇත සැකසුම්.

සහ කාරණය ගැන ගොඩනඟන්න, නිදහස් කරන්න, ධාවනය කරන්න නම සමඟ ගොඩනඟන ලද කාර්යයන් මගින් විසඳනු ලැබේ නල මාර්ගය.

නල මාර්ගය එකලස් කිරීම, මුදා හැරීම සහ ක්‍රියාත්මක කිරීම යන අදියර ඉස්මතු කරමින්, යෙදවීමේ ක්‍රියාවලිය බොහෝ අදියරවලට බෙදීමට ඔබට ඉඩ සලසයි. නල මාර්ගයේද, ඔබට උපස්ථ නිර්මාණය කළ හැකිය, ඇත්ත වශයෙන්ම ඕනෑම දෙයක්. මෙය අසීමිත විභවයක් ඇති මෙවලමකි.

යෙදුම් කේතය මෙහි ඇත Github.
මෙම ගබඩාව ක්ලෝන කිරීමේදී උප මොඩියුලය ආරම්භ කිරීමට අමතක නොකරන්න.

P.S.: මෙම සියලු ප්‍රවේශයන් වෙනත් ඕනෑම උපයෝගිතා සහ ක්‍රමලේඛන භාෂා සමඟ භාවිතා කළ හැක. ප්රධාන දෙය නම් සාරය වෙනස් නොවේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න