Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Ndicebisa ukuba ufunde umbhalo wengxelo ka-Alexander Sigachev evela kwi-Inventos "Uphuhliso kunye nenkqubo yokuvavanya ngeDocker + Gitlab CI"

Abo baqala ukuphumeza inkqubo yophuhliso kunye novavanyo olusekelwe kwi-Docker + Gitlab CI bahlala bebuza imibuzo esisiseko. Ndiqale ngaphi? Indlela yokulungelelanisa? Ukuvavanya njani?

Le ngxelo ilungile kuba ithetha ngendlela eyakhiweyo malunga nophuhliso kunye nenkqubo yokuvavanya usebenzisa i-Docker kunye ne-Gitlab CI. Ingxelo ngokwayo ivela kwi-2017. Ndicinga ukuba kule ngxelo ungaqokelela iziseko, indlela yokusebenza, umbono kunye namava okusebenzisa.

Ngubani okhathalayo, nceda phantsi kwekati.

Igama lam nguAlexander Sigachev. Ndisebenzela i-Inventos. Ndiza kukuxelela ngamava am usebenzisa iDocker kunye nendlela esiyiphumeza ngayo ngokuthe ngcembe kwiiprojekthi zenkampani.

Umxholo wengxelo: Inkqubo yophuhliso usebenzisa iDocker kunye neGitlab CI.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Le yintetho yam yesibini malunga neDocker. Ngexesha lengxelo yokuqala, sasebenzisa iDocker kuphela kuPhuhliso koomatshini bophuhlisi. Inani labasebenzi abasebenzisa iDocker lalimalunga ne-2-3 yabantu. Ngokuthe ngcembe, kwafunyanwa amava saza sahambela phambili kancinane. Ikhonkco yethu ingxelo yokuqala.

Kuza kubakho ntoni kule ngxelo? Siza kwabelana ngamava ethu malunga nokuba zeziphi iiraki esiziqokeleleyo, zeziphi iingxaki esizisombulule. Yayingentle yonke indawo, kodwa yasivumela ukuba siqhubele phambili.

Isiqubulo sethu: yenza yonke into esiyifumanayo.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Zeziphi iingxaki esizicombululayo?

Xa inkampani inamaqela amaninzi, umdwelisi wenkqubo ngumthombo okwabelwana ngawo. Kukho izigaba xa umdwelisi weprogram ekhutshwa kwiprojekthi enye kwaye anikwe enye iprojekthi ixesha elithile.

Ukuze umdwelisi aqonde ngokukhawuleza, kufuneka akhuphe ikhowudi yomthombo weprojekthi kwaye aqalise indawo engqongileyo ngokukhawuleza, okuya kumvumela ukuba aqhubele phambili ekusombululeni iingxaki zale projekthi.

Ngesiqhelo, ukuba uqala ukusuka ekuqaleni, kukho amaxwebhu amancinci kwiprojekthi. Kuphela ngabantu abadala abanolwazi malunga nendlela yokuyimisa. Abasebenzi bamisela indawo yabo yokusebenzela bebodwa ngosuku okanye ezimbini. Ukukhawulezisa oku, sasebenzisa iDocker.

Isizathu esilandelayo kukumiselwa komgangatho wezicwangciso kuPhuhliso. Kumava am, abaphuhlisi bahlala bethatha inyathelo lokuqala. Kwimeko nganye yesihlanu, i-domain yesiko ifakiwe, umzekelo vasya.dev. Uhleli ecaleni kwam ngummelwane wam uPetya, indawo yakhe ingu petya.dev. Baphuhlisa iwebhusayithi okanye inxalenye yenkqubo esebenzisa eli gama lesizinda.

Xa inkqubo ikhula kwaye la magama e-domain aqala ukufakwa kwi-configuration, ingxabano kwiindawo zoPhuhliso zivela kwaye indlela yesayithi iphinda ibhalwe.

Kwenzeka into efanayo kunye nezicwangciso zedatha. Abanye abantu abakhathazi ngokhuseleko kwaye basebenze kunye negama eliyimfihlo eliyingcambu. Kwinqanaba lokufakela, i-MySQL yacela umntu ngegama eliyimfihlo kwaye igama eligqithisiweyo lajika libe yi-123. Ngokuqhelekileyo kwenzeka ukuba i-database config yayihlala itshintsha ngokuxhomekeke kwisibophelelo somphuhlisi. Umntu ulungisile, umntu akalulungisanga uqwalaselo. Kwakukho amaqhinga xa sibeka uvavanyo oluthile kwi-config .gitignore kwaye umphuhlisi ngamnye kwafuneka afakele uvimba weenkcukacha. Oku kwenza ukuba inkqubo yokuqalisa ibenzima ngakumbi. Phakathi kwezinye izinto, kufuneka ukhumbule malunga nedathabheyisi. I-database kufuneka iqaliswe, i-password kufuneka ibhaliswe, umsebenzisi kufuneka abhaliswe, uphawu kufuneka lwenziwe, njalo njalo.

Enye ingxaki ziinguqulelo ezahlukeneyo zamathala eencwadi. Ngokuqhelekileyo kwenzeka ukuba umphuhlisi asebenze kwiiprojekthi ezahlukeneyo. Kukho iprojekthi yeLifa, eyaqala kwiminyaka emihlanu eyadlulayo (ukususela ngo-2017 - inqaku lomhleli). Ekuqaleni saqala ngeMySQL 5.5. Kukho neeprojekthi zanamhlanje apho sizama ukuphumeza iinguqulelo zanamhlanje ze-MySQL, umzekelo 5.7 okanye ngaphezulu (ngo-2017 - inqaku lomhleli)

Nabani na osebenza nge-MySQL uyazi ukuba la mathala eencwadi aphethe ukuxhomekeka. Kuyingxaki kakhulu ukuqhuba oovimba bedatha aba-2 kunye. Okona kuncinci, kuyingxaki ukudibanisa abathengi abadala kwisiseko sedatha entsha. Oku kukhokelela kwiingxaki ezininzi.

Ingxaki elandelayo xa umphuhlisi esebenza kumatshini wendawo, usebenzisa izixhobo zendawo, iifayile zendawo, i-RAM yendawo. Yonke intsebenziswano ngexesha lokuphuhlisa isisombululo kwiingxaki zenziwa ngaphakathi kwesakhelo sento yokuba sisebenza kumatshini omnye. Umzekelo uya kuba xa sinamaseva e-backend kwiMveliso 3, kwaye umphuhlisi ugcina iifayile kwi-root directory kwaye ukusuka apho nginx ithatha iifayile ukuphendula kwisicelo. Xa ikhowudi enjalo ingena kwiMveliso, kuvela ukuba ifayile ikhona kwenye yeeseva ezi-3.

Ulwalathiso lwee-microservices luyaphuhliswa ngoku. Xa sahlula usetyenziso lwethu olukhulu lube ngamacandelo amancinci asebenzisanayo. Oku kukuvumela ukuba ukhethe itekhnoloji yestakhi somsebenzi othile. Oku kukuvumela ukuba wahlule umsebenzi kunye nendawo yoxanduva phakathi kwabaphuhlisi.

Umphuhlisi we-frontend, ophuhliswayo kwi-JS, akanayo impembelelo kwi-backend. Umphuhlisi ongasemva, naye, uphuhlisa, kwimeko yethu, iRuby kwiRails kwaye ayiphazamisi kwiFrondend. Ukusebenzisana kwenziwa ngokusebenzisa i-API.

Njengebhonasi, sisebenzisa iDocker siye sakwazi ukuphinda sisebenzise izixhobo kwiStaging. Iprojekthi nganye, ngenxa yeenkcukacha zayo, yayifuna useto oluthile. Ngokwenyama, bekuyimfuneko ukwaba nokuba ngumncedisi wenyani kwaye ulungiselele ngokwahlukeneyo, okanye ukwahlula uhlobo oluthile lwemeko-bume eguquguqukayo kwaye iiprojekthi zinokuphembelelana, ngokuxhomekeke kuguqulelo lwamathala eencwadi.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Izixhobo. Sisebenzisa ntoni?

  • I-Docker ngokwayo. I-Dockerfile ichaza ukuxhomekeka kwesicelo esinye.
  • IDocker-compose yinqwaba edibanisa uninzi lwezicelo zethu zeDocker.
  • Sisebenzisa i-GitLab ukugcina ikhowudi yomthombo.
  • Sisebenzisa i-GitLab-CI ukudibanisa inkqubo.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Ingxelo inamacandelo amabini.

Inxalenye yokuqala iya kukuxelela indlela yokuqhuba iDocker koomatshini abaphuhlisi.

Inxalenye yesibini iya kuthetha ngendlela yokunxibelelana neGitLab, indlela esiqhuba ngayo iimvavanyo kunye nendlela esiphuma ngayo kwiStaging.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

I-Docker iteknoloji evumela (usebenzisa indlela yokuchaza) ukuchaza amacandelo ayimfuneko. Lo ngumzekelo weDockerfile. Apha sibhengeza ukuba sifumana ilifa kumfanekiso weDocker osemthethweni weRuby: 2.3.0. Iqulethe iRuby version 2.3 efakwe. Sifaka iilayibrari zendibano eziyimfuneko kunye neNodeJS. Sichaza ukuba senza uvimba weefayili /app. Sabela uvimba we-app njengoluhlu olusebenzayo. Kolu luhlu sibeka ubuncinane obufunekayo beGemfile kunye neGemfile.lock. Emva koko sakha iiprojekthi ezifaka lo mfanekiso wokuxhomekeka. Sibonisa ukuba isitya siya kuba sikulungele ukumamela kwi-port yangaphandle 3000. Umyalelo wokugqibela ngumyalelo oqalisa ngokuthe ngqo isicelo sethu. Ukuba siphumeza umyalelo wokuqhuba iprojekthi, isicelo siya kuzama ukuqhuba kwaye siqhube umyalelo ochaziweyo.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Lo ngumzekelo omncinci wefayile yokuqamba i-docker. Kule meko, sibonisa ukuba kukho unxibelelwano phakathi kwezikhongozeli ezimbini. Oku kuthe ngqo kwinkonzo yedathabheyisi kunye nenkonzo yewebhu. Usetyenziso lwethu lwewebhu kwiimeko ezininzi lufuna uhlobo oluthile lwedatha njenge-backend yokugcina idatha. Ekubeni sisebenzisa i-MySQL, umzekelo u-MySQL - kodwa akukho nto isithintela ekusebenziseni enye i-database (i-PostgreSQL, i-Redis).

Sithatha umfanekiso we-MySQL 5.7.14 ngaphandle kweenguqu ezivela kumthombo osemthethweni ukusuka kwi-hub ye-Docker. Siqokelela umfanekiso onoxanduva lwesicelo sethu sewebhu kulawulo lwangoku. Ngexesha lokuqaliswa kokuqala, uqokelela umfanekiso wethu. Emva koko sebenzisa umyalelo esiwenzayo apha. Ukuba sibuyela umva, siya kubona ukuba umyalelo wokuqaliswa uchazwe ngePuma. IPuma yinkonzo ebhalwe ngeRuby. Kwimeko yesibini sibhala ngaphezulu. Lo myalelo unokuba ngqongqo ngokuxhomekeke kwiimfuno zethu okanye imisebenzi.

Sikwachaza ukuba kufuneka sigqithise izibuko kumatshini wethu wokubamba umphuhlisi ukusuka kwi-3000 ukuya kwi-3000 port port. Oku kwenziwa ngokuzenzekelayo kusetyenziswa iptables kunye nendlela yayo, efakwe ngokuthe ngqo kwiDocker.

Umphuhlisi unako, njengangaphambili, ukufikelela kuyo nayiphi na idilesi ye-IP ekhoyo, umzekelo, 127.0.0.1 idilesi ye-IP yendawo okanye yangaphandle yomatshini.

Umgca wokugqibela uthi isikhongozeli sewebhu sixhomekeke kwisingxobo se-db. Xa sibiza isikhongozeli sewebhu ukuba siqalise, i-docker-compose iya kuqala iqalise isiseko sedatha yethu. Kwangoku ekuqaleni kwesiseko sedatha (enyanisweni, emva kokuqaliswa kwesikhongozeli! Oku akuqinisekisi ukulungela kwesiseko sedatha) iya kusungula isicelo sethu, i-backend yethu.

Oku kusivumela ukuba siphephe iimpazamo xa i-database ingekho kwaye ivumela ukuba sigcine izixhobo xa simisa i-container ye-database, ngaloo ndlela sikhulula izixhobo kwezinye iiprojekthi.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Kusinika ntoni ukusebenzisa i-database dockerization kwiprojekthi? Sirekhoda uguqulelo lweMySQL kubo bonke abaphuhlisi. Oku kukuvumela ukuba uphephe iimpazamo ezithile ezinokuthi zenzeke xa iinguqulelo zithe zahlukana, xa isintaksi, uqwalaselo, kunye nesethingi engagqibekanga itshintsha. Oku kukuvumela ukuba uchaze igama lenginginya eliqhelekileyo kwisiseko sedatha, igama lokungena, igama lokugqitha. Sisuka kude kumyezo wezilwanyana wamagama kunye neengxabano kwiifayile zoqwalaselo ebezikho ngaphambili.

Sinethuba lokusebenzisa uqwalaselo olulolona ngakumbi lwemekobume yoPhuhliso, eya kwahluka kuleyo imiselweyo. I-MySQL iqwalaselwe ngokungagqibekanga koomatshini ababuthathaka kwaye ukusebenza kwayo ngaphandle kwebhokisi kuphantsi kakhulu.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

I-Docker ikuvumela ukuba usebenzise i-Python, i-Ruby, i-NodeJS, i-PHP itoliki yenguqulo oyifunayo. Sisusa isidingo sokusebenzisa uhlobo oluthile lomphathi wenguqulelo. Ngaphambili, iphakheji ye-rpm yayisetyenziselwa i-Ruby, eyakuvumela ukuba utshintshe uguqulelo ngokuxhomekeke kwiprojekthi. Enkosi kwisikhongozeli seDocker, oku kukuvumela ukuba ufuduke kakuhle ikhowudi kwaye uyiguqule kunye nokuxhomekeka. Asinayo ingxaki yokuqonda inguqulelo yazo zombini itoliki kunye nekhowudi. Ukuhlaziya inguqulelo, kufuneka uhlise isikhongozeli esidala kwaye unyuse isikhongozeli esitsha. Ukuba kukho into engahambi kakuhle, singasehlisa isitya esitsha, siphakamise isitya esidala.

Emva kokwakha umfanekiso, izikhongozeli kuzo zombini uPhuhliso kunye neMveliso ziya kufana. Oku kuyinyani ngakumbi kufakelo olukhulu.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI Kwi-Frontend sisebenzisa iJavaScipt kunye neNodeJS.

Ngoku sineprojekthi yethu yokugqibela kwi-ReacJS. Umphuhlisi uqalise yonke into ekwisikhongozeli kwaye waphuhliswa esebenzisa ukulayisha kwakhona okushushu.

Emva koko, umsebenzi wokudibanisa iJavaScipt uqalisiwe kwaye ikhowudi edibeneyo edibeneyo ithunyelwa nge-nginx, ukugcina izixhobo.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Apha ndinikeze umzobo weprojekthi yethu yamva nje.

Ziziphi iingxaki oye wazisombulula? Sasinesidingo sokwakha inkqubo apho izixhobo eziphathwayo zinxibelelana nazo. Bafumana idatha. Enye yezinto ezinokwenzeka kukuthumela izaziso zokutyhala kwesi sixhobo.

Senze ntoni ngale nto?

Sahlula isicelo sibe ngamacandelo alandelayo: inxalenye yomlawuli kwi-JS, i-backend esebenza nge-REST interface phantsi kweRuby kwi-Rails. I-backend isebenzisana nesiseko sedatha. Isiphumo esiveliswayo sinikwa umxhasi. Iphaneli yolawulo isebenzisana ne-backend kunye nedathabheyisi nge-REST interface.

Sikwanesidingo sokuthumela izaziso zePush. Ngaphambi koku, besineprojekthi apho kwaphunyezwa indlela yokusebenza eyayinoxanduva lokuhambisa izaziso kumaqonga aphathwayo.

Siye saphuhlisa iskimu silandelayo: umqhubi ovela kwisikhangeli unxibelelana nephaneli yolawulo, iphaneli yolawulo isebenzisana ne-backend, umsebenzi kukuthumela izaziso zePush.

Izaziso zokutyhala zisebenzisana nelinye icandelo eliphunyezwe kwiNodeJS.

Imigca iyakhiwa kwaye izaziso zithunyelwa ngokwendlela yazo.

Kuzotywe oovimba beenkcukacha ezimbini apha. Okwangoku, sisebenzisa i-Docker, sisebenzisa ii-database ezi-2 ezizimeleyo ezingaqhagamshelwanga komnye nomnye. Ukongeza kwinto yokuba banenethiwekhi eqhelekileyo eqhelekileyo, kwaye idatha ebonakalayo igcinwa kwiindlela ezahlukeneyo kumatshini womphuhlisi.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Into enye kodwa ngamanani. Ukusetyenziswa kwakhona kwekhowudi kubalulekile apha.

Ukuba ngaphambili sathetha ngokuphinda sisebenzise ikhowudi ngendlela yamathala eencwadi, ngoko kulo mzekelo inkonzo yethu, ephendula kwizaziso zePush, iphinda isetyenziswe njengeseva epheleleyo. Ibonelela nge-API. Kwaye uphuhliso lwethu olutsha lusebenzisana nayo.

Ngelo xesha sasisebenzisa inguqulelo yesi-4 yeNodeJS. Ngoku (ngo-2017 - inqaku lomhleli) kuphuhliso lwethu lwamva nje sisebenzisa inguqulo yesi-7 yeNodeJS. Akukho ngxaki kumacandelo amatsha ukubandakanya iinguqulelo ezintsha zamathala eencwadi.

Ukuba kukho imfuneko, unokwenza kwakhona kwaye unyuse inguqulelo yeNodeJS yenkonzo yesaziso soPush.

Kwaye ukuba sinokugcina ukuhambelana kwe-API, ngoko kuya kwenzeka ukuba ithathelwe indawo kunye nezinye iiprojekthi ezazisetyenziswa ngaphambili.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Yintoni oyifunayo ukongeza iDocker? Songeza i-Dockerfile kwindawo yethu yokugcina, echaza ukuxhomekeka okuyimfuneko. Kulo mzekelo, amacandelo ahlulwe ngokufanelekileyo. Le yikiti encinci yomphuhlisi we-backend.

Xa sidala iprojekthi entsha, senza i-Dockerfile kwaye sichaze i-ecosystem efunekayo (Python, Ruby, NodeJS). Kwi-docker-compose, ichaza ukuxhomekeka okuyimfuneko - isiseko sedatha. Sichaza ukuba sifuna isiseko sedatha yenguqu enjalo kunye nenjalo, ukugcina idatha apho naphaya.

Sisebenzisa isikhongozeli esahlukileyo sesithathu esine nginx ukukhonza umxholo omileyo. Kuyenzeka ukulayisha imifanekiso. I-backend ibeka kwi-volume elungiselelwe kwangaphambili, ephinda ifakwe kwi-container nge-nginx, enika idatha engatshintshiyo.

Ukugcina i-nginx kunye noqwalaselo lwe-mysql, songeze ifolda ye-Docker apho sigcina khona izicwangciso eziyimfuneko. Xa umphuhlisi esenza i-git clone yendawo yokugcina kumatshini wakhe, sele eneprojekthi elungele ukuphuhliswa kwendawo. Akukho mathandabuzo malunga nokuba leliphi izibuko okanye loluphi useto ekufuneka lufakwe.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Okulandelayo sinamacandelo amaninzi: admin, info-API, izaziso push.

Ukuze uqalise konke oku, senze enye indawo yokugcina ebizwa ngokuba yi-dockerized-app. Ngoku sisebenzisa iindawo zokugcina ezininzi kwicandelo ngalinye. Bahluke ngokusengqiqweni-kwiGitLab ibonakala ngathi ifolda, kodwa kumatshini womphuhlisi ibonakala ngathi ifolda yeprojekthi ethile. Inqanaba elinye elingezantsi ngamacandelo aya kuhlanganiswa.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Lo ngumzekelo wemixholo ye-dockerized-app. Sikwabeka uluhlu lweDocker apha, apho sigcwalisa ulungelelwaniso olufunekayo kunxibelelwano lwawo onke amacandelo. Kukho i-README.md echaza ngokufutshane indlela yokuqaliswa kweprojekthi.

Apha sisebenzise iifayile ezimbini zokuqamba i-docker. Oku kwenziwa ukuze kukwazi ukuphehlelela ngokwamanqanaba. Xa umphuhlisi esebenza kunye ne-kernel, akafuni izaziso ze-Push, usungula ifayile ye-docker-compose kwaye, ngokufanelekileyo, izixhobo zigcinwa.

Ukuba kukho imfuneko yokudityaniswa nezaziso zePush, ngoko i-docker-compose.yaml kunye ne-docker-compose-push.yaml ziyasungulwa.

Ekubeni i-docker-compose.yaml kunye ne-docker-compose-push.yaml zikwifolda, inethiwekhi enye yenyani yenziwa ngokuzenzekelayo.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Inkcazo yamacandelo. Le yifayile ephezulu kakhulu enoxanduva lokuqokelela amacandelo. Yintoni ephawulekayo apha? Apha sazisa icandelo le-balancer.

Lo ngumfanekiso weDocker osele ulungile osebenzisa nginx kunye nesicelo esimamela i-Docker socket. Inamandla, njengoko izikhongozeli zivuliwe kwaye zivaliwe, uqwalaselo lwe-nginx luyahlaziywa. Sisasaza ukuphathwa kwamacandelo ngokusebenzisa amagama e-domain yenqanaba lesithathu.

Kwimekobume yoPhuhliso sisebenzisa i-.dev domain - api.informer.dev. Usetyenziso olunedomeyini ye-.dev luyafumaneka kumatshini wasekhaya womphuhlisi.

Emva koko i-configs idluliselwa kwiprojekthi nganye kwaye zonke iiprojekthi ziqaliswa kunye ngexesha elinye.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Ukuba siwubonisa ngokubonakalayo, kuyavela ukuba umxhasi sisikhangeli sethu okanye uhlobo oluthile lwesixhobo esenza ngaso izicelo kumlinganisi.

I-balancer inquma ukuba yeyiphi i-container ekufuneka ifikelelwe ngokusekelwe kwigama lesizinda.

Oku kunokuba nginx, ebonelela ngeJS kwiqela lenjongo yolawulo. Oku kunokwenziwa nge nginx, ebonelela nge-API, okanye iifayile ezingatshintshiyo, ezibonelelwa yi-nginx ngendlela yokulayisha imifanekiso.

Umzobo ubonisa ukuba izikhongozeli ziqhagamshelwe kwinethiwekhi ebonakalayo kwaye zifihlwe emva kweproxy.

Kumatshini womphuhlisi, unokufikelela kwisitya esazi i-IP, kodwa ngokomgaqo asisebenzisi oku. Akukho mfuneko yoqhagamshelwano oluthe ngqo.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Ngowuphi umzekelo ekufuneka ndijonge kuwo ukwenza isicelo sam? Ngokombono wam, umzekelo omhle ngumfanekiso osemthethweni we-docker ye-MySQL.

Inzima kakhulu. Kukho iinguqulelo ezininzi. Kodwa ukusebenza kwayo kukuvumela ukuba uhlawule iimfuno ezininzi ezinokuvela kwinkqubo yophuhliso olongezelelweyo. Ukuba uthatha ixesha kwaye uyayiqonda indlela enxibelelana ngayo yonke, ngoko ke ndicinga ukuba awuyi kuba naziphi na iingxaki zokuyiphumeza ngokwakho.

I-Hub.docker.com ihlala iqulethe amakhonkco kwi-github.com, apho idatha eluhlaza inikezelwa ngokuthe ngqo apho unokwakha umfanekiso ngokwakho.

Ngaphaya kolu vimba kukho iskripthi docker-endpoint.sh, esinoxanduva lokuqalwa kokuqala kunye nokuqhubela phambili kokuqaliswa kwesicelo.

Kwakhona kulo mzekelo kukho ukubakho kolungelelwaniso usebenzisa iinguqu zemo engqongileyo. Ngokuchaza ukuguquguquka kwemekobume xa uqhuba isikhongozeli esinye okanye nge-docker-compose, sinokuthi kufuneka sibeke igama eliyimfihlo elingenanto le-docker yengcambu kwi-MySQL okanye nantoni na esiyifunayo.

Kukho ukhetho lokwenza igama eligqithisiweyo elingalandelekiyo. Sithi sifuna umsebenzisi, kufuneka sibeke igama eliyimfihlo kumsebenzisi, kwaye kufuneka senze i-database.

Kwiiprojekthi zethu, sidibanise kancinci i-Dockerfile, enoxanduva lokuqalisa. Apho siye sayihlengahlengisa kwiimfuno zethu ukuze sandise nje amalungelo omsebenzisi asetyenziswa sisicelo. Oku kwenze ukuba kube lula ukwenza isiseko sedatha kwikhonsoli yesicelo kwixesha elizayo. Izicelo zeRuby zinemiyalelo yokudala, ukuguqula, kunye nokucima oovimba beenkcukacha.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Lo ngumzekelo wendlela inguqulelo ethile yeMySQL ejongeka ngayo kwi-github.com. Ungayivula iDockerfile kwaye ubone ukuba ukufakwa kwenzeka njani apho.

docker-endpoint.sh iskripthi esinoxanduva lwendawo yokungena. Ngexesha lokuqaliswa kokuqala, ezinye izenzo zokulungiselela ziyafuneka kwaye zonke ezi zenzo zibandakanyiwe kwiskripthi sokuqalisa.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Masiqhubele phambili kwinxalenye yesibini.

Sitshintshele kwi-gitlab ukugcina iikhowudi zomthombo. Le yinkqubo enamandla ngokufanelekileyo enojongano olubonakalayo.

Elinye lamacandelo eGitlab yiGitlab CI. Ikuvumela ukuba uchaze uluhlu lwemiyalelo eya kuthi emva koko isetyenziswe ukucwangcisa inkqubo yonikezelo lwekhowudi okanye ukuqhuba uvavanyo oluzenzekelayo.

Ingxelo ngeGitlab CI 2 https://goo.gl/uohKjI - Ingxelo evela kwiklabhu yaseRuby yaseRussia ineenkcukacha kwaye inokuba nomdla kuwe.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Ngoku siza kujonga into efunekayo ukwenza i-Gitlab CI isebenze. Ukuze uqalise i-Gitlab CI, kufuneka sibeke ifayile ye-.gitlab-ci.yml kwingcambu yeprojekthi.

Apha sichaza ukuba sifuna ukwenza ulandelelwano lwamazwe afana novavanyo, ukuthunyelwa.

Senza izikripthi ezibiza ngokuthe ngqo i-docker-compose build yesicelo sethu. Lo ngumzekelo we-backend nje.

Okulandelayo sithi kuyimfuneko ukuqhuba ukufuduka ukutshintsha i-database kunye nokuqhuba iimvavanyo.

Ukuba iincwadi zeempendulo zenziwa ngokuchanekileyo kwaye azibuyisi ikhowudi yempazamo, emva koko isistim iqhubela kwinqanaba lesibini lokusasazwa.

Inqanaba lokusasazwa ngoku liphunyeziwe ukulungiselela iqonga. Asizange siququzelele ukuqalisa kwakhona ngaphandle kwexesha lokuphumla.

Sicima ngenkani zonke izitya, kwaye emva koko siphakamisa zonke izitya kwakhona, eziqokelelwe kwinqanaba lokuqala ngexesha lokuvavanya.

Masiqhube imifuduko yedatha ebhalwe ngabaphuhlisi bemeko-bume eguquguqukayo yangoku.

Kukho inqaku lokuba oku kufuneka kusetyenziswe kuphela kwi-master branch.

Ayisebenzi xa utshintsha amanye amasebe.

Kuyenzeka ukuququzelela ukukhutshwa ngakumasebe.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Ukucwangcisa oku ngakumbi, kufuneka sifake iGitlab Runner.

Esi sixhobo sibhalwe ngesiGolang. Yifayile enye njengoko iqhelekile kwilizwe laseGolang, elingadingi naluphi na ukuxhomekeka.

Ekuqaliseni sibhalisa i-Gitlab Runner.

Sifumana isitshixo kujongano lwewebhu ye-Gitlab.

Emva koko sibiza umyalelo wokuqalisa kumgca womyalelo.

Ukuqwalasela uMbaleki weGitlab kwimowudi yencoko yababini (Shell, Docker, VirtualBox, SSH)

Ikhowudi kwi-Gitlab Runner iya kuphumeza kuzo zonke izibophelelo ngokuxhomekeke kulungiselelo lwe-.gitlab-ci.yml.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Ijongeka njani ngokubonakalayo kwi-Gitlab kujongano lwewebhu. Emva kokudibanisa i-GItlab CI, sineflegi ebonisa ukuba yeyiphi imeko yokwakha okwangoku.

Siyabona ukuba imizuzu emi-4 edlulileyo kwenziwa isibophelelo esiphumelele zonke iimvavanyo kwaye asibanga naziphi na iingxaki.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Sinokujonga ulwakhiwo ngokubanzi. Apha sibona ukuba amazwe amabini sele edlulile. Ubume bovavanyo kunye nobume bokusasazwa kwinqanaba.

Ukuba sicofa kwisakhiwo esithile, kuya kubakho imveliso ye-console yemiyalelo eyasungulwa kwinkqubo ngokutsho .gitlab-ci.yml.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Yile nto ibali lemveliso yethu likhangeleka ngayo. Siyabona ukuba kubekho iinzame eziyimpumelelo. Xa iimvavanyo zingeniswa, azihambi kwisinyathelo esilandelayo kwaye ikhowudi yesiteji ayihlaziywa.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Zeziphi iingxaki esazisombulula esiteji xa siphumeza idocker? Inkqubo yethu inamacandelo kwaye bekufuneka siqale ngokutsha kuphela amanye amacandelo aye ahlaziywa kwindawo yokugcina, hayi inkqubo yonke.

Ukwenza oku, kwafuneka sahlule yonke into kwiifolda ezahlukeneyo.

Emva kokuba senze oku, saba nengxaki ngento yokuba i-Docker-compose idala indawo yayo yenethiwekhi kwifolda nganye kwaye ayiboni izinto zommelwane wayo.

Ukujikeleza, senze inethiwekhi ngesandla kwiDocker. Kwi-Docker-qamba kwabhalwa ukuba kufuneka usebenzise inethiwekhi enjalo kule projekthi.

Ke, icandelo ngalinye eliqala ngalo mesh libona amacandelo kwezinye iindawo zenkqubo.

Ingxaki elandelayo kukwahlula iqonga phakathi kweeprojekthi ezininzi.

Ekubeni yonke le nto ibonakala ihle kwaye isondele kangangoko kunokwenzeka kwimveliso, kulungile ukusebenzisa i-port 80 okanye i-443, esetyenziswa kuyo yonke indawo kwi-WEB.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Sayicombulula njani le nto? Sabela iGitlab Runner enye kuzo zonke iiprojekthi ezinkulu.

I-Gitlab ikuvumela ukuba uphehlelele ii-Gitlab Runners ezininzi ezisasaziweyo, eziya kuthatha nje yonke imisebenzi nganye nganye ngokulandelelana kwesiphithiphithi kwaye uziqhube.

Ukunqanda iingxaki zendlu, sakhawulela iqela leeprojekthi zethu kwi-Gitlab Runner enye, ehlangabezana nemiqulu yethu ngaphandle kweengxaki.

Sihambise i-nginx-proxy kwiskripthi sokusungulwa esahlukileyo kwaye sabhala iigridi zazo zonke iiprojekthi ezikuyo.

Iprojekthi yethu inegridi enye, kwaye i-balancer ineegridi ezininzi ezisekelwe kumagama eprojekthi. Inokuba ngummeleli ngakumbi ngamagama esizinda.

Izicelo zethu ziza ngedomeyini kwi-port 80 kwaye zisonjululwe kwiqela leekhonteyina ezisebenza kwesi sizinda.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Ziziphi ezinye iingxaki ezazikho? Yile nto zonke izikhongozeli zibaleka njengengcambu ngokungagqibekanga. Le yingcambu engalinganiyo yenginginya yenkqubo.

Nangona kunjalo, ukuba ungenisa isikhongozeli, iyakuba yingcambu kwaye ifayile esiyidalayo kwesi singxobo ifumana amalungelo engcambu.

Ukuba umphuhlisi ungene kwisikhongozeli kwaye wenza imiyalelo ethile apho evelise iifayile, emva koko wasishiya isikhongozeli, ngoko kuluhlu lwakhe lokusebenza unefayile angenako ukufikelela kuyo.

Inokuconjululwa njani le nto? Unokongeza abasebenzisi abaya kuba kwisikhongozeli.

Zeziphi iingxaki eziye zavela xa songeza umsebenzisi?

Xa usenza umsebenzisi, iqela le-ID (UID) kunye ne-ID yomsebenzisi (GID) kaninzi azihambelani.

Ukusombulula le ngxaki kwisikhongozeli sisebenzisa abasebenzisi abane-ID 1000.

Kwimeko yethu, oku kuhambelana nenyaniso yokuba phantse bonke abaphuhlisi basebenzisa Ubuntu OS. Kwaye ku-Ubuntu OS umsebenzisi wokuqala une-ID eyi-1000.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

Ngaba sinezicwangciso?

Phinda ufunde uxwebhu lweDocker. Iprojekthi iphuhlisa ngokusebenzayo, amaxwebhu ayatshintsha. Idatha efunyenwe kwiinyanga ezimbini okanye ezintathu ezidlulileyo iya iphelelwa lixesha.

Ezinye zeengxaki esazicombululayo zisenokuba sele zisonjululwe ngeendlela eziqhelekileyo.

Ndifuna ngokwenene ukuqhubela phambili kwaye ndiye ngqo kwiokhestra.

Omnye umzekelo yindlela eyakhelwe-ngaphakathi ye-Docker ebizwa ngokuba yi-Docker Swarm, ephuma ebhokisini. Ndingathanda ukuqalisa into kwimveliso esekwe kwitekhnoloji yeDocker Swarm.

Izikhongozeli zokuzala zenza kube nzima ukusebenza ngezigodo. Ngoku iinkuni zodwa. Bathe saa ezityeni. Omnye wemisebenzi kukwenza ufikelelo olululo kwiilog ngokusebenzisa ujongano lwewebhu.

Uphuhliso kunye nenkqubo yokuvavanya ngeDocker kunye neGitlab CI

umthombo: www.habr.com

Yongeza izimvo