ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

የሪፖርቱን ግልባጭ ለማንበብ ሀሳብ አቀርባለሁ አሌክሳንደር ሲጋቼቭ ከ Inventos "የልማት እና የሙከራ ሂደት ከዶከር + ጊትላብ CI"

በ Docker + Gitlab CI ላይ የተመሰረተ የእድገት እና የፈተና ሂደትን ተግባራዊ ለማድረግ ገና እየጀመሩ ያሉ ብዙ ጊዜ መሰረታዊ ጥያቄዎችን ይጠይቃሉ። የት መጀመር? እንዴት ማደራጀት ይቻላል? እንዴት መሞከር ይቻላል?

ይህ ዘገባ ጥሩ ነው ምክንያቱም ዶከር እና ጊትላብ ሲአይን በመጠቀም ስለ ልማት እና የፈተና ሂደት በተዋቀረ መንገድ ይናገራል። ሪፖርቱ ራሱ ከ2017 ነው። እኔ እንደማስበው ከዚህ ዘገባ መሰረታዊ ፣ ዘዴ ፣ ሀሳብ ፣ የአጠቃቀም ልምድ መማር ይችላሉ።

ማን ያስባል እባካችሁ ከድመቷ በታች።

ስሜ አሌክሳንደር ሲጋቼቭ ነው። ለ Inventos ነው የምሰራው። ዶከርን ስለመጠቀም ያለኝን ልምድ እና በኩባንያው ውስጥ ባሉ ፕሮጀክቶች ላይ ቀስ በቀስ እንዴት ተግባራዊ እንደምናደርግ እነግርዎታለሁ።

የዝግጅት አቀራረብ ርዕስ፡ ዶከር እና ጊትላብ ሲአይ በመጠቀም የእድገት ሂደት።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ስለ ዶከር ሁለተኛው ንግግርዬ ነው። በመጀመሪያው ሪፖርት ጊዜ Docker in Development በገንቢ ማሽኖች ላይ ብቻ ነበር የተጠቀምነው። ዶከርን የተጠቀሙ ሰራተኞች ቁጥር ከ2-3 ሰዎች ነበር። ቀስ በቀስ, ልምድ ተገኘ እና ትንሽ ወደ ፊት ተጓዝን. ወደ እኛ አገናኝ የመጀመሪያ ሪፖርት.

በዚህ ሪፖርት ውስጥ ምን ይሆናል? ምን አይነት ሬክ እንደሰበሰብን፣ ምን አይነት ችግሮችን እንደፈታን ልምዳችንን እናካፍላለን። በሁሉም ቦታ ቆንጆ አልነበረም ነገር ግን እንዲቀጥል ተፈቅዶለታል።

መፈክራችን፡- በእጃችን ማግኘት የምንችለውን ነገር ሁሉ ወደብ አድርግ።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ምን ችግሮች እየፈታን ነው?

በአንድ ኩባንያ ውስጥ ብዙ ቡድኖች ሲኖሩ, ፕሮግራሚው የጋራ መገልገያ ነው. ፕሮግራመር ከአንድ ፕሮጀክት አውጥቶ ለተወሰነ ጊዜ ለሌላ ፕሮጀክት የሚሰጥበት ደረጃዎች አሉ።

የፕሮግራም አድራጊው በፍጥነት እንዲረዳው የፕሮጀክቱን ምንጭ ኮድ ማውረድ እና አካባቢውን በተቻለ ፍጥነት ማስጀመር ያስፈልገዋል, ይህም የዚህን ፕሮጀክት ችግሮች ለመፍታት የበለጠ እንዲንቀሳቀስ ያስችለዋል.

ብዙውን ጊዜ, ከባዶ ከጀመሩ, ከዚያም በፕሮጀክቱ ውስጥ ትንሽ ሰነዶች አሉ. እንዴት ማዋቀር እንደሚቻል መረጃ የሚገኘው ለድሮ ጊዜ ሰሪዎች ብቻ ነው። ሰራተኞች በአንድ ወይም በሁለት ቀናት ውስጥ የስራ ቦታቸውን በራሳቸው ያዘጋጃሉ. ይህንን ለማፋጠን ዶከርን ተጠቀምን።

የሚቀጥለው ምክንያት በልማት ውስጥ የቅንጅቶች መደበኛነት ነው. በእኔ ልምድ፣ ገንቢዎች ሁልጊዜ ቅድሚያውን ይወስዳሉ። በእያንዳንዱ አምስተኛው ጉዳይ, ብጁ ጎራ ገብቷል, ለምሳሌ, vasya.dev. ከእሱ ቀጥሎ የተቀመጠው ጎረቤቱ ፔትያ ነው, የእሱ ጎራ petya.dev ነው. ይህንን የጎራ ስም በመጠቀም ድረ-ገጽ ወይም አንዳንድ የስርዓቱን አካል ያዘጋጃሉ።

ስርዓቱ ሲያድግ እና እነዚህ የጎራ ስሞች ወደ ውቅሮች ውስጥ መግባት ሲጀምሩ, ከዚያም የልማት አካባቢ ግጭት ይነሳል እና የጣቢያው መንገድ እንደገና ይጻፋል.

በመረጃ ቋት ቅንጅቶችም ተመሳሳይ ነው። አንድ ሰው በደህንነት ላይ አይጨነቅም እና በባዶ root የይለፍ ቃል ይሰራል። በመጫን ደረጃ MySQL አንድ ሰው የይለፍ ቃል ጠይቆ የይለፍ ቃሉ 123 ሆኖ ተገኝቷል። ብዙ ጊዜ ዳታቤዝ ውቅር እንደ ገንቢው ቁርጠኝነት እየተለወጠ ነው። አንድ ሰው አስተካክሏል፣ የሆነ ሰው አወቃቀሩን አላስተካከለም። አንድ ዓይነት የሙከራ ውቅረት ስናወጣ ዘዴዎች ነበሩ። .gitignore እና እያንዳንዱ ገንቢ የውሂብ ጎታውን መጫን ነበረበት. ይህም ለመጀመር አስቸጋሪ አድርጎታል። ከሌሎች ነገሮች በተጨማሪ ስለ የውሂብ ጎታ ማስታወስ አስፈላጊ ነው. ዳታቤዙ መጀመር አለበት፣ የይለፍ ቃል መግባት አለበት፣ ተጠቃሚ መመዝገብ አለበት፣ ሠንጠረዥ መፈጠር አለበት፣ ወዘተ.

ሌላው ችግር የተለያዩ የቤተ-መጻህፍት ስሪቶች ነው። ብዙውን ጊዜ ገንቢ ከተለያዩ ፕሮጀክቶች ጋር ሲሰራ ይከሰታል. ከአምስት ዓመት በፊት (ከ2017 - ed. note) የጀመረ የLegacy ፕሮጀክት አለ። በተጀመረበት ጊዜ፣ በ MySQL 5.5 ጀመርን። ተጨማሪ ዘመናዊ የ MySQL ስሪቶችን ለመተግበር የምንሞክርባቸው ዘመናዊ ፕሮጀክቶች አሉ, ለምሳሌ, 5.7 ወይም ከዚያ በላይ (በ 2017 - ed. note)

ከ MySQL ጋር የሚሰራ ማንኛውም ሰው እነዚህ ቤተ-መጻሕፍት ጥገኝነቶችን እንደሚያመጡ ያውቃል። 2 መሠረቶችን አንድ ላይ መሮጥ በጣም አስቸጋሪ ነው. ቢያንስ፣ የድሮ ደንበኞች ከአዲሱ ዳታቤዝ ጋር ለመገናኘት ችግር አለባቸው። ይህ ደግሞ በርካታ ችግሮችን ይፈጥራል.

የሚቀጥለው ችግር አንድ ገንቢ በአካባቢው ማሽን ላይ ሲሰራ, የአካባቢ ሀብቶችን, አካባቢያዊ ፋይሎችን, አካባቢያዊ ራም ይጠቀማል. ለችግሮች መፍትሄ በሚዘጋጅበት ጊዜ ሁሉም መስተጋብር የሚከናወነው በአንድ ማሽን ላይ በሚሠራው እውነታ ማዕቀፍ ውስጥ ነው. ለምሳሌ በፕሮዳክሽን 3 ውስጥ የኋላ አገልጋይ ሲኖረን እና ገንቢው ፋይሎችን ወደ ስርወ ማውጫው ሲያስቀምጥ እና ከዚያ nginx ለጥያቄው ምላሽ ለመስጠት ፋይሎችን ይወስዳል። እንዲህ ዓይነቱ ኮድ ወደ ፕሮዳክሽን ሲገባ ፋይሉ ከ 3 አገልጋዮች በአንዱ ላይ እንዳለ ይገለጻል።

የማይክሮ ሰርቪስ አቅጣጫ አሁን እያደገ ነው። ትላልቅ አፕሊኬሽኖቻችንን እርስ በርሳችን የሚገናኙ ወደ አንዳንድ ትናንሽ አካላት ስንከፋፍል። ይህ ለተወሰኑ ስራዎች ስራዎች ቴክኖሎጂዎችን እንዲመርጡ ያስችልዎታል. እንዲሁም በገንቢዎች መካከል ሥራን እና ኃላፊነቶችን እንድታካፍሉ ይፈቅድልሃል።

Frondend-ገንቢ፣ በJS ላይ እያደገ፣ በBackend ላይ ምንም ተጽእኖ የለውም ማለት ይቻላል። የኋለኛው ገንቢ በተራው፣ በእኛ ሁኔታ Ruby on Rails እና በFrondend ላይ ጣልቃ አይገባም። ግንኙነቱ የሚከናወነው ኤፒአይን በመጠቀም ነው።

እንደ ጉርሻ፣ በ Docker እገዛ፣ በ Staging ላይ ሀብቶችን እንደገና ጥቅም ላይ ማዋል ችለናል። እያንዳንዱ ፕሮጄክት ፣ በልዩ ሁኔታ ፣ የተወሰኑ ቅንብሮችን ይፈልጋል። በአካል፣ ወይ ቨርቹዋል ሰርቨር መመደብ እና ለየብቻ ማዋቀር፣ ወይም አንዳንድ አይነት ተለዋዋጭ አካባቢ እና ፕሮጀክቶችን ማጋራት አስፈላጊ ነበር፣ እንደ ቤተ-መጻሕፍቱ ሥሪት፣ እርስበርስ ተጽዕኖ ሊያሳድሩ ይችላሉ።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

መሳሪያዎች. ምን እንጠቀማለን?

  • ዶከር ራሱ። Dockerfile የአንድ መተግበሪያ ጥገኝነቶችን ይገልጻል።
  • Docker-compose የእኛን Docker አፕሊኬሽኖች ጥቂቶቹን የሚያሰባስብ ጥቅል ነው።
  • የምንጭ ኮዱን ለማከማቸት GitLab እንጠቀማለን።
  • ለስርዓት ውህደት GitLab-CI እንጠቀማለን።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ሪፖርቱ ሁለት ክፍሎች አሉት.

የመጀመሪያው ክፍል ዶከር በገንቢዎች ማሽኖች ላይ እንዴት እንደሚሰራ ይናገራል።

ሁለተኛው ክፍል ከ GitLab ጋር እንዴት መስተጋብር እንዳለብን፣ ፈተናዎችን እንዴት እንደምናሄድ እና ወደ Staging እንዴት እንደምንለቀቅ ይናገራል።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ዶከር አስፈላጊ የሆኑትን ክፍሎች ለመግለጽ (ገላጭ አቀራረብን በመጠቀም) የሚፈቅድ ቴክኖሎጂ ነው. ይህ Dockerfile ምሳሌ ነው። እዚህ ከኦፊሴላዊው Ruby:2.3.0 Docker ምስል እንደምንወርስ እናውጃለን። የተጫነው Ruby ስሪት 2.3 ይዟል. አስፈላጊውን የግንባታ ቤተ-መጽሐፍት እና NodeJS እንጭነዋለን. ማውጫ እንደፈጠርን እንገልፃለን። /app. የመተግበሪያውን ማውጫ እንደ የስራ ማውጫ ያዋቅሩት። በዚህ ማውጫ ውስጥ የሚፈለገውን አነስተኛ Gemfile እና Gemfile.lock እናስቀምጣለን። ከዚያ ይህን የጥገኝነት ምስል የሚጭኑ ፕሮጀክቶችን እንገነባለን. ኮንቴይነሩ በውጫዊ ወደብ 3000 ለመስማት ዝግጁ እንደሚሆን እንገልፃለን. የፕሮጀክት ጅምር ትዕዛዙን ከፈጸምን, አፕሊኬሽኑ የተገለጸውን ትዕዛዝ ለማስኬድ እና ለማስኬድ ይሞክራል.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ይህ የዶክተር አዘጋጅ ፋይል አነስተኛ ምሳሌ ነው። በዚህ ሁኔታ, በሁለት መያዣዎች መካከል ግንኙነት እንዳለ እናሳያለን. ይህ በቀጥታ በመረጃ ቋት አገልግሎት እና በድር አገልግሎት ውስጥ ነው. የእኛ የድር መተግበሪያ በአብዛኛዎቹ ሁኔታዎች መረጃን ለማከማቸት እንደ የጀርባ ድጋፍ አንዳንድ ዓይነት የውሂብ ጎታ ያስፈልጋቸዋል። MySQL እየተጠቀምን ስለሆነ ምሳሌው ከ MySQL ጋር ነው - ነገር ግን ሌላ የውሂብ ጎታ (PostgreSQL, Redis) እንዳንጠቀም የሚከለክለን ምንም ነገር የለም.

ከኦፊሴላዊው ምንጭ ከ Docker hub የ MySQL 5.7.14 ምስልን ያለምንም ለውጦች እንወስዳለን. ለድር መተግበሪያችን ኃላፊነት የሆነውን ምስል አሁን ካለው ማውጫ እንሰበስባለን። በመጀመሪያው ጅምር ወቅት ለእኛ ምስል ይሰበስበናል። ከዚያ እኛ እዚህ የምንፈጽመውን ትዕዛዝ ያስኬዳል. ወደ ኋላ ከተመለስን፣ በፑማ በኩል የማስጀመሪያው ትዕዛዝ እንደተገለጸ እናያለን። ፑማ በሩቢ የተጻፈ አገልግሎት ነው። በሁለተኛው ጉዳይ ላይ እንሽራለን. ይህ ትእዛዝ እንደ ፍላጎታችን ወይም እንደ ተግባራችን የዘፈቀደ ሊሆን ይችላል።

በኮንቴይነር ወደብ ላይ ከ3000 እስከ 3000 ባለው የገንቢ ማስተናገጃ ማሽን ላይ ወደብ ማስተላለፍ እንዳለብን እንገልፃለን። ይህ በቀጥታ በ Docker ውስጥ የተካተተውን iptables እና ዘዴውን በመጠቀም በራስ-ሰር ይከናወናል።

ገንቢው እንደበፊቱ ማንኛውንም የአይ ፒ አድራሻ መድረስ ይችላል፡ ለምሳሌ፡ 127.0.0.1 የማሽኑ አካባቢያዊ ወይም ውጫዊ አይፒ አድራሻ ነው።

የመጨረሻው መስመር የድረ-ገጽ መያዣው በዲቢ መያዣው ላይ የተመሰረተ ነው. የዌብ ኮንቴይነሩ መጀመሪያ ብለን ስንጠራ፣ docker-compose በመጀመሪያ የውሂብ ጎታውን ያስጀምረናል። ቀድሞውኑ በመረጃ ቋቱ መጀመሪያ ላይ (በእውነቱ ፣ መያዣው ከተጀመረ በኋላ! ይህ የመረጃ ቋቱን ዝግጁነት አያረጋግጥም) አፕሊኬሽኑን ይጀምራል ፣ የእኛ የጀርባ።

ይህ የመረጃ ቋቱ ካልተነሳ ስህተቶችን ያስወግዳል እና የመረጃ ቋቱን ስናቆም ሀብቶችን ይቆጥባል ፣ ስለሆነም ለሌሎች ፕሮጀክቶች ሀብቶችን ነፃ ያደርጋል ።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

በፕሮጀክቱ ላይ የመረጃ ቋት (ዳታቤዝ) አጠቃቀምን ምን ይሰጠናል. ለሁሉም ገንቢዎች የ MySQL ስሪት እናስተካክላለን። ይህ ስሪቶች ሲለያዩ ሊከሰቱ የሚችሉ አንዳንድ ስህተቶችን ያስወግዳል፣ አገባብ፣ ውቅረት፣ ነባሪ ቅንጅቶች ሲቀየሩ። ይህ የውሂብ ጎታ, መግቢያ, የይለፍ ቃል የተለመደ የአስተናጋጅ ስም እንዲገልጹ ያስችልዎታል. ቀደም ብለን ከነበሩት የውቅረት ፋይሎች ውስጥ ካሉት የስም እና ግጭቶች መካነ አራዊት እየራቅን ነው።

ለልማት አካባቢ የበለጠ ጥሩ ውቅረትን ለመጠቀም እድሉ አለን ፣ ይህም ከነባሪው የተለየ ይሆናል። MySQL በነባሪነት ለደካማ ማሽኖች ተዋቅሯል እና ከሳጥኑ ውጭ ያለው አፈጻጸም በጣም ደካማ ነው።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ዶከር የሚፈለገውን እትም Python፣ Ruby፣ NodeJS፣ PHP አስተርጓሚ እንድትጠቀም ይፈቅድልሃል። አንድ ዓይነት ስሪት አስተዳዳሪን የመጠቀም ፍላጎትን እናስወግዳለን። ቀደም ሲል, Ruby በፕሮጀክቱ ላይ በመመስረት ስሪቱን እንዲቀይሩ የሚያስችልዎትን የ rpm ጥቅል ተጠቅሟል. እንዲሁም ለዶከር ኮንቴይነር ምስጋና ይግባውና ኮዱን በተቀላጠፈ ሁኔታ ለማዛወር እና ከጥገኛዎች ጋር አብሮ እንዲሰራው ያስችላል። የሁለቱም የአስተርጓሚውን እና የኮዱን ቅጂ ለመረዳት ምንም ችግር የለብንም። ስሪቱን ለማዘመን የድሮውን መያዣ ይቀንሱ እና አዲሱን መያዣውን ከፍ ያድርጉት። የሆነ ችግር ከተፈጠረ, አዲሱን መያዣውን ዝቅ ማድረግ, የድሮውን መያዣ ከፍ ማድረግ እንችላለን.

ምስሉን ከተገነባ በኋላ በሁለቱም ልማት እና ምርት ውስጥ ያሉት መያዣዎች ተመሳሳይ ይሆናሉ. ይህ በተለይ ለትላልቅ ጭነቶች እውነት ነው.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት በ Frontend JavaScipt እና NodeJS እንጠቀማለን።

አሁን በReacJS ላይ የመጨረሻውን ፕሮጀክት አለን። ገንቢው በመያዣው ውስጥ ያለውን ነገር ሁሉ ሮጦ ትኩስ-ዳግም መጫንን በመጠቀም አዳብሯል።

በመቀጠል የJavaScipt የመሰብሰቢያ ተግባር ተጀምሯል እና ወደ ስታቲክስ የተጠናቀረው ኮድ በ nginx ቁጠባ ሃብቶች በኩል ይሰጣል።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

እዚህ የመጨረሻውን ፕሮጄክታችንን እቅድ ሰጥቻለሁ.

ምን ተግባራት ተፈትተዋል? ተንቀሳቃሽ መሳሪያዎች የሚገናኙበት ስርዓት መገንባት ያስፈልገናል. ውሂብ ይቀበላሉ. አንዱ አማራጭ የግፋ ማሳወቂያዎችን ወደዚህ መሣሪያ መላክ ነው።

ለዚህ ምን አደረግን?

አፕሊኬሽኑን እንደ እነዚህ ክፍሎች ከፋፍለናል፡ የአስተዳዳሪው ክፍል በJS ላይ፣ የጀርባው ክፍል፣ በ Ruby on Rails ስር በ REST በይነገጽ በኩል ይሰራል። የጀርባው ክፍል ከመረጃ ቋቱ ጋር ይገናኛል። የሚፈጠረው ውጤት ለደንበኛው ይሰጣል. የአስተዳዳሪው ፓኔል ከጀርባ እና ከዳታቤዝ ጋር በREST በይነገጽ በኩል ይገናኛል።

የግፋ ማሳወቂያዎችን መላክም ያስፈልገን ነበር። ከዚያ በፊት ወደ ሞባይል መድረኮች ማሳወቂያዎችን የማድረስ ኃላፊነት ያለበትን ዘዴ ተግባራዊ የሚያደርግ ፕሮጀክት ነበረን።

የሚከተለውን እቅድ አዘጋጅተናል-ከአሳሹ ውስጥ ያለው ኦፕሬተር ከአስተዳዳሪ ፓነል ጋር ይገናኛል, የአስተዳዳሪ ፓነል ከጀርባው ጋር ይገናኛል, ተግባሩ የግፊት ማስታወቂያዎችን መላክ ነው.

የግፋ ማሳወቂያዎች በ NodeJS ውስጥ ከተተገበረ ሌላ አካል ጋር መስተጋብር ይፈጥራሉ።

ወረፋዎች ተገንብተዋል ከዚያም ማሳወቂያዎች እንደ ስልታቸው ይላካሉ።

ሁለት የውሂብ ጎታዎች እዚህ ተሳሉ። በአሁኑ ጊዜ, በ Docker እርዳታ, በምንም መልኩ እርስ በርስ የማይዛመዱ 2 ገለልተኛ የውሂብ ጎታዎችን እንጠቀማለን. በተጨማሪም, የጋራ ምናባዊ አውታረ መረብ አላቸው, እና አካላዊ መረጃ በገንቢው ማሽን ላይ በተለያዩ ማውጫዎች ውስጥ ተከማችቷል.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ተመሳሳይ ነገር ግን በቁጥር. ኮድን እንደገና መጠቀም አስፈላጊ የሆነው እዚህ ላይ ነው።

ቀደም ሲል በቤተ-መጽሐፍት መልክ ኮድን እንደገና ስለመጠቀም ከተነጋገርን ፣ በዚህ ምሳሌ ውስጥ ፣ ለግፋ ማሳወቂያዎች ምላሽ የሚሰጥ አገልግሎታችን እንደ ሙሉ አገልጋይ እንደገና ጥቅም ላይ ይውላል። ኤፒአይ ያቀርባል። እና አዲሱ እድገታችን ቀድሞውኑ ከእሱ ጋር ይገናኛል።

በዚያን ጊዜ፣ የ NodeJS ስሪት 4 እንጠቀም ነበር። አሁን (በ 2017 - ed. note) በቅርብ ጊዜ የተደረጉ እድገቶች የ NodeJS ስሪት 7 እንጠቀማለን. አዳዲስ የቤተ-መጻህፍት ስሪቶችን ለማሳተፍ በአዲስ አካላት ውስጥ ምንም ችግር የለም።

አስፈላጊ ከሆነ፣ ከግፋ የማሳወቂያ አገልግሎት የ NodeJS ሥሪቱን እንደገና ማደስ እና ማንሳት ይችላሉ።

እና የኤፒአይ ተኳሃኝነትን መጠበቅ ከቻልን ከዚህ ቀደም ጥቅም ላይ በዋሉት ሌሎች ፕሮጀክቶች መተካት ይቻላል።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ዶከርን ለመጨመር ምን ያስፈልግዎታል? አስፈላጊዎቹን ጥገኝነቶች የሚገልጽ Dockerfile ወደ ማከማቻችን እንጨምራለን ። በዚህ ምሳሌ, ክፍሎቹ በምክንያታዊነት የተከፋፈሉ ናቸው. ይህ ዝቅተኛው የበስተጀርባ ገንቢ ስብስብ ነው።

አዲስ ፕሮጀክት ስንፈጥር, Dockerfile እንፈጥራለን, የሚፈለገውን ስነ-ምህዳር (Python, Ruby, NodeJS) እንገልፃለን. በ docker-compose ውስጥ, አስፈላጊውን ጥገኝነት ይገልጻል - የውሂብ ጎታ. የእንደዚህ አይነት እና የእንደዚህ አይነት ስሪት የውሂብ ጎታ እንደሚያስፈልገን እንገልፃለን, እዚያ እና እዚያ ውሂብ ያከማቹ.

የማይንቀሳቀስ አገልግሎት ለማቅረብ የተለየ ሶስተኛ መያዣ ከ nginx ጋር እንጠቀማለን። ስዕሎችን መስቀል ይቻላል. Backend በቅድመ-ዝግጁ መጠን ውስጥ ያስቀምጣቸዋል, እሱም ደግሞ በ nginx መያዣ ውስጥ ተጭኗል, ይህም የማይለዋወጥ ይሰጣል.

የ nginx, mysql ውቅረትን ለማከማቸት, አስፈላጊ የሆኑትን ውቅሮች የምናከማችበት Docker አቃፊን ጨምረናል. አንድ ገንቢ በማሽኑ ላይ የጊት ክሎን ማከማቻ ሲያደርግ፣ አስቀድሞ ለአካባቢ ልማት ዝግጁ የሆነ ፕሮጀክት አለው። የትኛውን ወደብ ወይም ምን ዓይነት መቼቶች እንደሚተገበሩ ምንም ጥያቄ የለም.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

በመቀጠል, ብዙ አካላት አሉን: አስተዳዳሪ, መረጃ-ኤፒአይ, የግፋ ማሳወቂያዎች.

ይህን ሁሉ ለመጀመር ሌላ ማከማቻ ፈጠርን ይህም ዶከርራይዝድ-አፕ ብለን እንጠራዋለን። በአሁኑ ጊዜ ከእያንዳንዱ አካል በፊት ብዙ ማከማቻዎችን እንጠቀማለን. እነሱ በምክንያታዊነት የተለዩ ናቸው - በ GitLab ውስጥ አቃፊ ይመስላል ፣ ግን በገንቢው ማሽን ላይ ፣ ለአንድ የተወሰነ ፕሮጀክት አቃፊ። አንድ ደረጃ ወደታች የሚጣመሩ አካላት ናቸው.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ይህ የዶክተሮች መተግበሪያ ይዘቶች ምሳሌ ነው። እንዲሁም ለሁሉም አካላት መስተጋብር የሚያስፈልጉትን ውቅሮች የምንሞላበትን የዶከር ማውጫ እዚህ እናመጣለን። ፕሮጀክቱን እንዴት ማስኬድ እንደሚቻል በአጭሩ የሚገልጽ README.md አለ።

እዚህ ላይ ሁለት ዶከር-አጻጻፍ ፋይሎችን ተግባራዊ አድርገናል። ይህ የሚደረገው በደረጃዎች ለመሮጥ ነው. አንድ ገንቢ ከዋናው ጋር ሲሰራ የግፋ ማሳወቂያዎች አያስፈልገውም፣ በቀላሉ ዶከር-አጻጻፍ ፋይልን ይጀምራል እና በዚህ መሠረት ሀብቱ ይቀመጣል።

ከፑሽ ማሳወቂያዎች ጋር መዋሃድ ካስፈለገ ዶከር-ማቀናበር.yaml እና docker-compose-push.yaml ተጀምረዋል።

docker-compose.yaml እና docker-compose-push.yaml አቃፊ ውስጥ ስለሆኑ አንድ ነጠላ ምናባዊ አውታረ መረብ በራስ-ሰር ይፈጠራል።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

የአካል ክፍሎች መግለጫ. ይህ ለክፍሎች ስብስብ ኃላፊነት ያለው የበለጠ የላቀ ፋይል ነው። እዚህ ምን አስደናቂ ነገር አለ? እዚህ ላይ ሚዛናዊውን ክፍል እናስተዋውቃለን.

ይህ nginx የሚያሄድ ዝግጁ የሆነ Docker ምስል እና በ Docker ሶኬት ላይ የሚያዳምጥ መተግበሪያ ነው። ተለዋዋጭ፣ መያዣዎች ሲበሩ እና ሲጠፉ፣ የ nginx ውቅረትን ያድሳል። ክፍሎችን አያያዝ በሶስተኛ ደረጃ የጎራ ስሞች እናሰራጫለን።

ለልማት አካባቢ፣ የ.dev domain - api.informer.devን እንጠቀማለን። የ.dev ጎራ ያላቸው አፕሊኬሽኖች በገንቢው የውስጥ ማሽን ላይ ይገኛሉ።

በተጨማሪም, ውቅሮች ወደ እያንዳንዱ ፕሮጀክት ይተላለፋሉ እና ሁሉም ፕሮጀክቶች በአንድ ጊዜ ይጀመራሉ.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

በስዕላዊ መልኩ ደንበኛው የእኛ አሳሽ ነው ወይም ወደ ሚዛኑ የምንጠይቅበት መሳሪያ ነው።

የጎራ ስም ሚዛኑ የትኛውን መያዣ ማግኘት እንዳለበት ይወስናል።

ለአስተዳዳሪ JS የሚሰጠው nginx ሊሆን ይችላል። ይህ nginx ሊሆን ይችላል፣ እሱም ኤፒአይን የሚሰጥ፣ ወይም static files፣ ለ nginx በምስል ሰቀላ መልክ የተሰጡ።

ስዕሉ እንደሚያሳየው ኮንቴይነሮቹ በቨርቹዋል ኔትወርክ የተገናኙ እና ከፕሮክሲው ጀርባ የተደበቁ ናቸው።

በገንቢው ማሽን ላይ አይፒውን በማወቅ መያዣውን መድረስ ይችላሉ, ነገር ግን በመርህ ደረጃ ይህንን አንጠቀምም. ቀጥተኛ መዳረሻ በተግባር አያስፈልግም።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

መተግበሪያዎን ለመቆጠብ የትኛውን ምሳሌ ማየት አለብዎት? በእኔ አስተያየት ጥሩ ምሳሌ ለ MySQL ኦፊሴላዊው የዶክተር ምስል ነው።

በጣም ፈታኝ ነው። ብዙ ስሪቶች አሉ። ነገር ግን ተግባራቱ ተጨማሪ የእድገት ሂደት ውስጥ ሊነሱ የሚችሉ ብዙ ፍላጎቶችን ለመሸፈን ያስችልዎታል. ጊዜ ካጠፉ እና ሁሉም እንዴት እንደሚገናኙ ካወቁ, እራስን በመተግበር ላይ ምንም ችግር አይኖርብዎትም ብዬ አስባለሁ.

Hub.docker.com ብዙውን ጊዜ ወደ github.com የሚወስዱ አገናኞችን ይይዛል፣ይህም ምስሉን እራስዎ መገንባት የሚችሉበት ጥሬ መረጃ ይዟል።

በተጨማሪም በዚህ ማከማቻ ውስጥ ለመጀመሪያ ጅምር እና ለተጨማሪ የመተግበሪያ ማስጀመር ኃላፊነት ያለው docker-endpoint.sh ስክሪፕት አለ።

በተጨማሪም በዚህ ምሳሌ ውስጥ የአካባቢ ተለዋዋጮችን በመጠቀም የማዋቀር ችሎታ አለ. ነጠላ ኮንቴይነር ሲሰራ ወይም በዶክተር ኮምፖስ (docker-compose) አማካኝነት የአካባቢን ተለዋዋጭነት በመግለጽ፣ MySQL ላይ ወይም የምንፈልገውን ሁሉ ለማሰር ዶከር ባዶ የይለፍ ቃል ማዘጋጀት አለብን ማለት እንችላለን።

የዘፈቀደ የይለፍ ቃል ለመፍጠር አንድ አማራጭ አለ። ተጠቃሚ እንፈልጋለን እንላለን፣ ለተጠቃሚው የይለፍ ቃል ማዘጋጀት አለብን፣ እና ዳታቤዝ መፍጠር አለብን።

በፕሮጀክቶቻችን ውስጥ፣ የማስጀመር ሃላፊነት የሆነውን Dockerfile ን በትንሹ አንድ አድርገናል። እዚያም አፕሊኬሽኑ የሚጠቀምባቸውን የተጠቃሚ መብቶች ማራዘሚያ ለማድረግ እንደፍላጎታችን አስተካክለነዋል። ይህ በኋላ ላይ ከመተግበሪያ ኮንሶል በቀላሉ የውሂብ ጎታ እንድንፈጥር አስችሎናል። Ruby አፕሊኬሽኖች የውሂብ ጎታዎችን ለመፍጠር፣ ለማሻሻል እና ለመሰረዝ ትእዛዝ አላቸው።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ይህ በgithub.com ላይ የተወሰነ የ MySQL ስሪት ምን እንደሚመስል የሚያሳይ ምሳሌ ነው። Dockerfile ን መክፈት እና መጫኑ እዚያ እንዴት እንደሚካሄድ ማየት ይችላሉ።

docker-endpoint.sh የመግቢያ ነጥብ ኃላፊነት ያለው ስክሪፕት ነው። በመነሻ ጅምር ወቅት አንዳንድ የዝግጅት ደረጃዎች ያስፈልጋሉ, እና እነዚህ ሁሉ ድርጊቶች የሚከናወኑት በመነሻ ስክሪፕት ውስጥ ብቻ ነው.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ወደ ሁለተኛው ክፍል እንሂድ።

የምንጭ ኮዶችን ለማከማቸት ወደ gitlab ቀይረናል። ይህ ምስላዊ በይነገጽ ያለው በጣም ኃይለኛ ስርዓት ነው።

ከጊትላብ አካላት አንዱ Gitlab CI ነው። በኋላ ላይ የኮድ ማቅረቢያ ስርዓትን ለማደራጀት ወይም አውቶማቲክ ሙከራን ለማካሄድ ጥቅም ላይ የሚውሉ ተከታታይ ትዕዛዞችን እንዲገልጹ ያስችልዎታል.

Gitlab CI 2 ንግግር https://goo.gl/uohKjI - ከ Ruby Russia ክለብ ዘገባ - በጣም ዝርዝር እና ምናልባት እርስዎን ይስብዎታል።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

አሁን Gitlab CI ን ለማንቃት ምን እንደሚያስፈልግ እንመለከታለን. Gitlab CIን ለመጀመር የ.gitlab-ci.yml ፋይልን በፕሮጀክቱ ስር ማስገባት ብቻ ያስፈልገናል።

እዚህ እንደ ሙከራ ፣ ማሰማራት ያሉ የግዛቶችን ቅደም ተከተል ማስፈፀም እንደምንፈልግ እንገልፃለን።

አፕሊኬሽኑን ለመገንባት ወደ ዶከር-ኮምፖዝ የሚጠሩ ስክሪፕቶችን እንፈፅማለን። ይህ የጀርባ ምሳሌ ብቻ ነው።

በመቀጠል, የውሂብ ጎታውን ለመለወጥ እና ሙከራዎችን ለማካሄድ ማይግሬሽን ማካሄድ አስፈላጊ ነው እንላለን.

ስክሪፕቶቹ በትክክል ከተፈጸሙ እና የስህተት ኮድ ካልመለሱ, ስርዓቱ ወደ ማሰማራቱ ሁለተኛ ደረጃ ይቀጥላል.

የማሰማራቱ ደረጃ በአሁኑ ጊዜ ለመዘጋጀት ተተግብሯል. ዜሮ-አልባ ዳግም ማስጀመር አላደራጀንም።

ሁሉንም ኮንቴይነሮች በግዳጅ እናጠፋለን, ከዚያም በሙከራው ወቅት በመጀመሪያ ደረጃ የተሰበሰቡትን ሁሉንም መያዣዎች እንደገና እናነሳለን.

አሁን ላለው የአካባቢ ተለዋዋጭ በገንቢዎች የተፃፉ የውሂብ ጎታ ፍልሰትን እያሄድን ነው።

ይህ ለዋናው ቅርንጫፍ ብቻ እንደሚተገበር ማስታወሻ አለ.

ሌሎች ቅርንጫፎችን ሲቀይሩ አይተገበርም.

በቅርንጫፎች ግልበጣዎችን ማደራጀት ይቻላል.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ይህንን የበለጠ ለማደራጀት Gitlab Runnerን መጫን አለብን።

ይህ መገልገያ የተፃፈው በጎላንግ ነው። በጎልአንግ ዓለም ውስጥ እንደተለመደው አንድ ነጠላ ፋይል ነው, እሱም ምንም አይነት ጥገኛ አያስፈልገውም.

ሲጀመር የጊትላብ ሯጭን እንመዘግባለን።

ቁልፉን በ Gitlab ድር በይነገጽ ውስጥ እናገኛለን።

ከዚያም በትእዛዝ መስመር ላይ የመነሻ ትዕዛዙን እንጠራዋለን.

Gitlab Runnerን በይነተገናኝ (ሼል፣ ዶከር፣ ቨርቹዋልቦክስ፣ ኤስኤስኤች) ያዋቅሩ።

በGitlab Runner ላይ ያለው ኮድ በ.gitlab-ci.yml ቅንብር ላይ በመመስረት በእያንዳንዱ ቃል ላይ ይሰራል።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

በድር በይነገጽ ውስጥ በ Gitlab ውስጥ በእይታ እንዴት እንደሚታይ። GITlab CI ን ካገናኘን በኋላ በአሁኑ ጊዜ የግንባታውን ሁኔታ የሚያሳይ ባንዲራ አለን።

ከ 4 ደቂቃዎች በፊት ቁርጠኝነት እንደተፈፀመ እናያለን, ይህም ሁሉንም ፈተናዎች ያለፈ እና ምንም ችግር አላመጣም.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ግንባታዎቹን በቅርበት መመልከት እንችላለን። እዚህ ላይ ሁለት ግዛቶች አልፈዋል. የሙከራ ሁኔታ እና የማሰማራት ሁኔታ በማዘጋጀት ላይ።

በአንድ የተወሰነ ግንባታ ላይ ጠቅ ካደረግን በ .gitlab-ci.yml መሠረት በሂደቱ ውስጥ የተከናወኑ ትዕዛዞች የኮንሶል ውጤት ይኖራል።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

የምርት ታሪካችን ይህን ይመስላል። የተሳካ ሙከራዎች እንደነበሩ አይተናል። ፈተናዎች ሲገቡ ወደሚቀጥለው ደረጃ አይሄድም እና የዝግጅት ኮድ አይዘመንም.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ዶከርን ስንተገበር በማዘጋጀት ላይ ምን ተግባራትን ፈታን? ስርዓታችን አካላትን ያቀፈ ነው እና እንደገና ማስጀመር ያስፈልገን ነበር፣ በማከማቻው ውስጥ ከተዘመኑት ክፍሎች የተወሰነው ብቻ እንጂ አጠቃላይ ስርዓቱ አይደለም።

ይህንን ለማድረግ ሁሉንም ነገር ወደ ተለያዩ አቃፊዎች መሰባበር አለብን።

ይህን ካደረግን በኋላ፣ ዶከር-ኮምፖዝ ለእያንዳንዱ አባት የራሱ የሆነ የአውታረ መረብ ቦታ ስለሚፈጥር እና የጎረቤቱን አካላት አለማየቱ ችግር አጋጥሞናል።

ለመዞር፣ በዶከር ውስጥ ያለውን ኔትወርክ በእጅ ፈጠርን። ለዚህ ፕሮጀክት እንደዚህ አይነት አውታር እንደሚጠቀሙ በDocker-compose ተጽፏል።

ስለዚህ, በዚህ ጥልፍልፍ የሚጀምር እያንዳንዱ አካል በሌሎች የስርዓቱ ክፍሎች ውስጥ ክፍሎችን ይመለከታል.

የሚቀጥለው እትም በበርካታ ፕሮጄክቶች መከፋፈል ነው።

ይህ ሁሉ ቆንጆ ለመምሰል እና በተቻለ መጠን ለምርት ቅርብ እንዲሆን በ WEB ውስጥ በሁሉም ቦታ ጥቅም ላይ የሚውለውን ወደብ 80 ወይም 443 መጠቀም ጥሩ ነው.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

እንዴት ነው የፈታነው? ለሁሉም ዋና ፕሮጀክቶች አንድ Gitlab Runner መድበናል።

Gitlab ብዙ የተከፋፈሉ የጊትላብ ሯጮችን እንዲያካሂዱ ይፈቅድልዎታል፣ ይህም በቀላሉ ሁሉንም ስራዎች በተዘበራረቀ መልኩ ወስዶ ያካሂዳል።

ቤት እንዳይኖረን የፕሮጀክቶቻችንን ቡድን በአንድ ጂትላብ ሯጭ ብቻ ወሰንን ይህም በጥራዞች ላይ ያለ ችግር ይቋቋማል።

Nginx-proxyን ወደ የተለየ የማስጀመሪያ ስክሪፕት አንቀሳቅሰናል እና በውስጡ ላሉት ፕሮጀክቶች ፍርግርግ ጨምረናል።

የእኛ ፕሮጀክት አንድ ፍርግርግ አለው፣ እና ሚዛኑ በፕሮጀክት ስሞች በርካታ ፍርግርግ አለው። በጎራ ስሞች ተጨማሪ ፕሮክሲ ማድረግ ይችላል።

ጥያቄዎቻችን በፖርት 80 ላይ ባለው ጎራ በኩል ይመጣሉ እና ይህንን ጎራ የሚያገለግል የእቃ መያዢያ ቡድን እንዲሆኑ ተደርገዋል።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ሌሎች ምን ችግሮች ነበሩ? ይሄ ሁሉም ኮንቴይነሮች በነባሪ እንደ ስር የሚሰሩ ናቸው። ይህ ስርወ ከስርዓቱ ስርወ አስተናጋጅ ጋር እኩል ያልሆነ ነው።

ነገር ግን ወደ መያዣው ከገቡ ሩት ይሆናል እና በዚህ ኮንቴይነር ውስጥ የፈጠርነው ፋይል የ root መብቶችን ያገኛል።

ገንቢው ወደ መያዣው ውስጥ ከገባ እና ፋይሎችን የሚያመነጩ አንዳንድ ትዕዛዞችን ካደረገ እና መያዣውን ከተወው, እሱ በእሱ ውስጥ የማይገባ ፋይል አለው.

እንዴትስ ሊፈታ ይችላል? በመያዣው ውስጥ የሚሆኑ ተጠቃሚዎችን ማከል ይችላሉ።

ተጠቃሚውን ስንጨምር ምን ችግሮች ተፈጠሩ?

ተጠቃሚ ስንፈጥር ብዙ ጊዜ ተመሳሳይ የቡድን መታወቂያ (UID) እና የተጠቃሚ መታወቂያ (ጂአይዲ) የለንም::

ይህንን ችግር በመያዣው ውስጥ ለመፍታት መታወቂያ 1000 ያላቸውን ተጠቃሚዎች እንጠቀማለን።

በእኛ ሁኔታ፣ ሁሉም ማለት ይቻላል ገንቢዎች የኡቡንቱ ስርዓተ ክወና ከሚጠቀሙበት እውነታ ጋር ተመሳሳይ ነው። እና በኡቡንቱ ላይ የመጀመሪያው ተጠቃሚ የ1000 መታወቂያ አለው።

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

እቅድ አለን?

የዶከር ሰነድ ያንብቡ። ፕሮጀክቱ በንቃት እያደገ ነው, ሰነዱ እየተቀየረ ነው. ከሁለት ወይም ሶስት ወራት በፊት የተቀበለው መረጃ ቀስ በቀስ ጊዜው ያለፈበት ነው።

የተወሰኑት የፈታናቸው ችግሮች በመደበኛ ዘዴዎች የተፈቱ ሊሆኑ ይችላሉ።

ስለዚህ ወደ ኦርኬስትራ በቀጥታ ለመሄድ አስቀድመው መሄድ እፈልጋለሁ.

አንድ ምሳሌ ከሳጥኑ ውስጥ የሚወጣው Docker Swarm የሚባል የዶከር አብሮገነብ ዘዴ ነው። በ Docker Swarm ቴክኖሎጂ ላይ በመመስረት በምርት ውስጥ የሆነ ነገር ማሄድ እፈልጋለሁ።

የእቃ ማጠራቀሚያዎች ከሎግ ጋር ለመስራት የማይመች ያደርገዋል. አሁን ምዝግብ ማስታወሻዎቹ ተለይተዋል. በመያዣዎች ላይ ተበታትነው ይገኛሉ. ከተግባሮቹ አንዱ በድር በይነገጽ በኩል ወደ ምዝግብ ማስታወሻዎች ምቹ መዳረሻ ማድረግ ነው.

ከ Docker እና Gitlab CI ጋር የእድገት እና የሙከራ ሂደት

ምንጭ: hab.com

አስተያየት ያክሉ