Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Ndikupangira kuti muwerenge zolembedwa za lipoti la Alexander Sigachev kuchokera ku Inventos "Kupititsa patsogolo ndi kuyesa ndi Docker + Gitlab CI"

Iwo omwe angoyamba kumene kukhazikitsa chitukuko ndi kuyesa kutengera Docker + Gitlab CI nthawi zambiri amafunsa mafunso ofunikira. Kuti tiyambire? Kodi kulinganiza? Kodi kuyesa?

Lipotili ndilabwino chifukwa limalankhula mwatsatanetsatane za chitukuko ndi kuyesa pogwiritsa ntchito Docker ndi Gitlab CI. Lipoti lokha ndi lochokera ku 2017. Ndikuganiza kuti kuchokera mu lipotili mutha kupeza zoyambira, njira, malingaliro, ndi zomwe mwakhala mukugwiritsa ntchito.

Ndani amasamala, chonde pansi pa mphaka.

Dzina langa ndine Alexander Sigachev. Ndimagwira ntchito ku Inventos. Ndikufotokozerani za zomwe ndakumana nazo pogwiritsa ntchito Docker komanso momwe tikuzithandizira pang'onopang'ono pama projekiti akampani.

Mutu wa lipotilo: Njira yachitukuko pogwiritsa ntchito Docker ndi Gitlab CI.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Iyi ndi nkhani yanga yachiwiri yokhudza Docker. Pa nthawi ya lipoti loyamba, tidagwiritsa ntchito Docker mu Development kokha pamakina opanga. Chiwerengero cha antchito omwe adagwiritsa ntchito Docker chinali pafupifupi anthu 2-3. Pang'onopang'ono, chidziwitso chinapezedwa ndipo tinasunthira patsogolo pang'ono. Link kwa wathu lipoti loyamba.

Kodi mu lipoti ili mudzakhala chiyani? Tigawana zomwe takumana nazo pazomwe timasonkhanitsa, ndi mavuto ati omwe tidathetsa. Sizinali zokongola kulikonse, koma zinatilola kupitiriza.

Mwambi wathu: sungani chilichonse chomwe titha kuchita.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Ndi mavuto ati omwe tikuthetsa?

Kampani ikakhala ndi magulu angapo, wopanga mapulogalamu ndi gawo logawana nawo. Pali magawo omwe wopanga mapulogalamu amatulutsidwa mu projekiti imodzi ndikupatsidwa ntchito ina kwakanthawi.

Kuti wopanga mapulogalamu amvetsetse mwachangu, ayenera kutsitsa magwero a polojekitiyo ndikukhazikitsa malo mwachangu momwe angathere, zomwe zimamupangitsa kuti apititse patsogolo kuthetsa mavuto a polojekitiyi.

Nthawi zambiri, mukangoyamba, pali zolembedwa zochepa mu polojekitiyi. Ndi anthu akale okha omwe ali ndi chidziwitso cha momwe angakhazikitsire. Ogwira ntchito amakhazikitsa malo awo antchito pawokha m'masiku amodzi kapena awiri. Kuti tifulumizitse izi, tidagwiritsa ntchito Docker.

Chifukwa chotsatira ndikukhazikika kwa zoikamo mu Development. Mwachidziwitso changa, opanga nthawi zonse amachitapo kanthu. Pazochitika zisanu zilizonse, malo ochezera amalowetsedwa, mwachitsanzo vasya.dev. Pafupi ndi ine ndi mnansi wanga Petya, yemwe ankalamulira ndi petya.dev. Amapanga tsamba la webusayiti kapena chigawo china chogwiritsa ntchito dzina la domain ili.

Dongosolo likamakula ndipo mayina amtunduwu amayamba kuphatikizidwa mukukonzekera, mkangano m'magawo a Chitukuko umayamba ndipo njira yamasamba imalembedwanso.

Zomwezo zimachitikanso ndi makonda a database. Anthu ena samavutika ndi chitetezo ndikugwira ntchito ndi mawu achinsinsi opanda mizu. Pakukhazikitsa, MySQL inapempha munthu kuti adziwe mawu achinsinsi ndipo mawu achinsinsi adasanduka 123. Nthawi zambiri zimachitika kuti kasinthidwe ka database kadali kosintha malinga ndi zomwe wopangayo wapanga. Winawake adakonza, wina sanakonze config. Panali zidule pamene tiyika ma test config .gitignore ndipo wopanga aliyense amayenera kukhazikitsa database. Izi zinapangitsa kuti ntchito yoyambira ikhale yovuta. Mwa zina, muyenera kukumbukira za database. Ma database ayenera kukhazikitsidwa, mawu achinsinsi ayenera kulembedwa, wogwiritsa ntchito ayenera kulembedwa, chizindikiro chiyenera kupangidwa, ndi zina zotero.

Vuto lina ndi mitundu yosiyanasiyana ya malaibulale. Nthawi zambiri zimachitika kuti wopanga mapulogalamu amagwira ntchito zosiyanasiyana. Pali pulojekiti ya Legacy, yomwe inayamba zaka zisanu zapitazo (kuyambira 2017 - zolemba za mkonzi). Poyamba tidayamba ndi MySQL 5.5. Palinso mapulojekiti amakono omwe tikuyesera kukhazikitsa mitundu yamakono ya MySQL, mwachitsanzo 5.7 kapena kupitilira apo (mu 2017 - cholemba cha mkonzi)

Aliyense amene amagwira ntchito ndi MySQL amadziwa kuti malaibulalewa amakhala ndi zodalira. Ndizovuta kuyendetsa 2 databases palimodzi. Osachepera, ndizovuta kulumikiza makasitomala akale ku database yatsopano. Izi zimabweretsa mavuto angapo.

Vuto lotsatira ndi pamene wokonza ntchito akugwira ntchito pamakina apafupi, amagwiritsa ntchito zinthu zapafupi, mafayilo am'deralo, RAM yakomweko. Kuyanjana konse pa nthawi yopanga njira yothetsera mavuto kumachitika mkati mwa ndondomeko yomwe imagwira ntchito pamakina amodzi. Chitsanzo chingakhale pamene tili ndi ma seva a backend mu Production 3, ndipo wopanga mapulogalamu amasunga mafayilo ku bukhu la mizu ndipo kuchokera pamenepo nginx amatenga mafayilo kuti ayankhe pempho. Code yotere ikalowa mu Production, zimakhala kuti fayiloyo ilipo pa imodzi mwama seva atatu.

Mayendedwe a microservices akukula pano. Tikamagawaniza mapulogalamu athu akuluakulu kukhala zigawo zing'onozing'ono zomwe zimagwirizana. Izi zimakupatsani mwayi wosankha matekinoloje amtundu wina wantchito. Izi zimakupatsaninso mwayi wogawa ntchito ndi gawo laudindo pakati pa opanga.

Wopanga kutsogolo, yemwe akutukuka ku JS, alibe chilichonse chakumbuyo. Wopanga backend, nayenso, amapanga, mwa ife, Ruby pa Rails ndipo samasokoneza Frondend. Kulumikizana kumachitika pogwiritsa ntchito API.

Monga bonasi, pogwiritsa ntchito Docker tinatha kukonzanso zothandizira pa Staging. Pulojekiti iliyonse, chifukwa cha mawonekedwe ake, inkafuna zoikamo zina. Mwakuthupi, kunali kofunikira kugawa seva yeniyeni ndikuyikonza padera, kapena kugawa malo osinthika ndipo mapulojekiti amatha kukhudzana, kutengera mtundu wa malaibulale.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Zida. Kodi timagwiritsa ntchito chiyani?

  • Docker yokha. Dockerfile imalongosola kudalira kwa pulogalamu imodzi.
  • Docker-compose ndi mtolo womwe umabweretsa pamodzi mapulogalamu athu angapo a Docker.
  • Timagwiritsa ntchito GitLab kusunga ma code source.
  • Timagwiritsa ntchito GitLab-CI pakuphatikiza dongosolo.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Lipotili lili ndi magawo awiri.

Gawo loyamba lidzakuuzani momwe mungayendetsere Docker pamakina opanga.

Gawo lachiwiri lifotokoza momwe tingagwirizanitse ndi GitLab, momwe timayendera mayeso ndi momwe timapitira ku Staging.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Docker ndi ukadaulo womwe umalola (pogwiritsa ntchito njira yofotokozera) kufotokoza zofunikira. Ichi ndi chitsanzo Dockerfile. Apa tikulengeza kuti tikulandira kuchokera ku chithunzi cha Docker cha Ruby:2.3.0. Ili ndi Ruby version 2.3 yoikidwa. Timayika ma library ofunikira ndi NodeJS. Timafotokoza kuti tikupanga chikwatu /app. Timagawa chikwatu cha pulogalamu ngati chikwatu chogwirira ntchito. Mu bukhuli timayika zofunikira zochepa za Gemfile ndi Gemfile.lock. Kenako timapanga mapulojekiti omwe amayika chithunzi chodalira ichi. Tikuwonetsa kuti chidebecho chidzakhala chokonzeka kumvetsera pa doko lakunja 3000. Lamulo lomaliza ndilo lamulo lomwe limayambitsa mwachindunji ntchito yathu. Ngati tipereka lamulo loyendetsa polojekiti, pulogalamuyo idzayesa kuyendetsa ndikuyendetsa lamulo lomwe latchulidwa.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Ichi ndi chitsanzo chochepa cha fayilo ya docker-compose. Pankhaniyi, tikuwonetsa kuti pali kulumikizana pakati pa zotengera ziwiri. Izi ndizomwe zimagwira ntchito pa database komanso pa intaneti. Ntchito zathu zapaintaneti nthawi zambiri zimafuna mtundu wina wa database ngati chosungirako kuti musunge deta. Popeza timagwiritsa ntchito MySQL, chitsanzo chili ndi MySQL - koma palibe chomwe chimatilepheretsa kugwiritsa ntchito deta ina (PostgreSQL, Redis).

Timatenga chithunzi cha MySQL 5.7.14 popanda kusintha kuchokera kugwero lovomerezeka kuchokera ku Docker hub. Timasonkhanitsa chithunzi chomwe chili ndi ntchito yapaintaneti yathu kuchokera pamakanema apano. Pachiyambi choyamba, amasonkhanitsa chithunzi kwa ife. Kenako imayendetsa lamulo lomwe tikuchita apa. Tikabwerera m'mbuyo, tidzawona kuti lamulo loyambitsa linafotokozedwa kudzera mu Puma. Puma ndi ntchito yolembedwa mu Ruby. M'nkhani yachiwiri timawonjezera. Lamuloli likhoza kukhala lachipongwe malinga ndi zosowa zathu kapena ntchito zathu.

Timalongosolanso kuti tifunika kutumiza doko pamakina athu opangira makina oyambira kuchokera ku 3000 mpaka 3000 doko la zidebe. Izi zimachitika zokha pogwiritsa ntchito ma iptables ndi makina ake, omwe amalowetsedwa mwachindunji ku Docker.

Wopanga mapulogalamu amatha, monga kale, kupeza adilesi iliyonse ya IP yomwe ilipo, mwachitsanzo, 127.0.0.1 adilesi yapanyumba kapena yakunja ya IP pamakina.

Mzere womaliza umanena kuti chidebe cha intaneti chimadalira chidebe cha db. Tikayitana chidebe chapaintaneti kuti tiyambitse, docker-compose idzayambitsanso nkhokwe yathu. Kale kumayambiriro kwa nkhokwe (inde, pambuyo pa kukhazikitsidwa kwa chidebe! Izi sizikutsimikizira kukonzekera kwa nkhokwe) idzayambitsa ntchito yathu, kumbuyo kwathu.

Izi zimatithandiza kupewa zolakwika pamene database sichinafike ndipo imatilola kuti tisunge zinthu tikayimitsa chidebe cha database, potero timamasula zothandizira ntchito zina.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Kodi kugwiritsa ntchito database dockerization pa projekiti kumatipatsa chiyani? Timalemba mtundu wa MySQL kwa onse opanga. Izi zimakuthandizani kuti mupewe zolakwika zina zomwe zingachitike matembenuzidwe akasemphana, pomwe masinthidwe, masinthidwe, ndi makonda akusintha. Izi zimakulolani kuti mutchule dzina lodziwika bwino la database, lolowera, mawu achinsinsi. Tikuchoka ku zoo ya mayina ndi mikangano mumafayilo osintha omwe analipo kale.

Tili ndi mwayi wogwiritsa ntchito makonzedwe abwino kwambiri a Chitukuko, chomwe chidzasiyana ndi chosasinthika. MySQL imakonzedwa mwachisawawa kwa makina ofooka ndipo ntchito yake kunja kwa bokosi ndiyotsika kwambiri.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Docker imakulolani kugwiritsa ntchito Python, Ruby, NodeJS, PHP womasulira wa mtundu womwe mukufuna. Timachotsa kufunika kogwiritsa ntchito mtundu wina wa oyang'anira mtundu. M'mbuyomu, phukusi la rpm lidagwiritsidwa ntchito kwa Ruby, lomwe limakulolani kuti musinthe mawonekedwewo malinga ndi polojekitiyo. Chifukwa cha chotengera cha Docker, izi zimakupatsaninso mwayi kuti musamuke bwino ndikuyisintha limodzi ndi kudalira. Sitinavutike kumvetsetsa mtundu wa womasulira ndi code. Kuti musinthe mawonekedwewo, muyenera kutsitsa chidebe chakale ndikukweza chidebe chatsopanocho. Ngati chinachake chalakwika, tikhoza kutsitsa chidebe chatsopanocho, kukweza chidebe chakale.

Mukapanga chithunzicho, zotengera zonse za Development and Production zidzakhala zofanana. Izi ndizowona makamaka pakuyika kwakukulu.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI Pa Frontend timagwiritsa ntchito JavaScipt ndi NodeJS.

Tsopano tili ndi polojekiti yathu yomaliza pa ReacJS. Wopanga mapulogalamu adayambitsa zonse zomwe zili mumtsukowo ndipo adapanga pogwiritsa ntchito hot-reload.

Kenako, ntchito yosonkhanitsa JavaScipt imayambika ndipo code yolumikizidwa mosamalitsa imatumizidwa kudzera nginx, kusunga zinthu.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Pano ndapereka chithunzi cha polojekiti yathu yatsopano.

Munathetsa mavuto otani? Tidafunika kupanga dongosolo lomwe zida zam'manja zimagwirizana. Amalandira deta. Chimodzi mwa zotheka ndikutumiza zidziwitso zokankhira ku chipangizochi.

Tachita chiyani pa izi?

Tidagawa pulogalamuyi m'zigawo zotsatirazi: gawo la admin mu JS, kumbuyo komwe kumagwira ntchito kudzera pa REST mawonekedwe pansi pa Ruby pa Rails. Backend imagwirizana ndi database. Zotsatira zomwe zimapangidwira zimaperekedwa kwa kasitomala. Gulu la admin limalumikizana ndi backend ndi database kudzera pa REST mawonekedwe.

Tidafunikanso kutumiza zidziwitso za Push. Izi zisanachitike, tinali ndi projekiti yomwe idakhazikitsidwa njira yomwe inali ndi udindo wopereka zidziwitso pamapulatifomu am'manja.

Tapanga chiwembu chotsatirachi: wogwiritsa ntchito pa msakatuli amalumikizana ndi gulu la admin, gulu la admin limalumikizana ndi backend, ntchito ndikutumiza zidziwitso za Push.

Zidziwitso za Push zimalumikizana ndi gawo lina lomwe limakhazikitsidwa mu NodeJS.

Mizere imapangidwa ndipo zidziwitso zimatumizidwa molingana ndi makina awo.

Ma database awiri ajambulidwa apa. Pakadali pano, pogwiritsa ntchito Docker, timagwiritsa ntchito ma database awiri odziyimira pawokha omwe sanagwirizane. Kuphatikiza pa mfundo yakuti ali ndi intaneti yodziwika bwino, ndipo deta yakuthupi imasungidwa m'mabuku osiyanasiyana pamakina a wopanga.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Chinthu chomwecho koma mu manambala. Kugwiritsanso ntchito ma code ndikofunikira pano.

Ngati m'mbuyomu tidalankhula za kugwiritsanso ntchito ma code ngati malaibulale, ndiye mu chitsanzo ichi ntchito yathu, yomwe imayankha zidziwitso za Push, imagwiritsidwanso ntchito ngati seva yathunthu. Amapereka API. Ndipo chitukuko chathu chatsopano chimagwirizana nacho.

Panthawiyo tinali kugwiritsa ntchito 4 ya NodeJS. Tsopano (mu 2017 - cholembera cha mkonzi) pazosintha zathu zaposachedwa timagwiritsa ntchito mtundu 7 wa NodeJS. Palibe vuto m'zigawo zatsopano kuphatikiza mitundu yatsopano yamalaibulale.

Ngati ndi kotheka, mutha kusinthanso ndikukweza mtundu wa NodeJS wa Push notification service.

Ndipo ngati tingathe kusunga kugwirizana kwa API, ndiye kuti zingatheke m'malo mwake ndi ntchito zina zomwe zinagwiritsidwa ntchito kale.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Mufunika chiyani kuti muwonjezere Docker? Timawonjezera Dockerfile kumalo athu osungira, omwe amafotokoza kudalira kofunikira. Mu chitsanzo ichi, zigawozo zimagawidwa mwanzeru. Ichi ndiye chida chocheperako kwa wopanga kumbuyo.

Popanga pulojekiti yatsopano, timapanga Dockerfile ndikufotokozera chilengedwe chofunikira (Python, Ruby, NodeJS). Mu docker-compose, ikufotokoza kudalira kofunikira - database. Timalongosola kuti timafunikira nkhokwe yamtundu wotere, kuti tisunge deta apo ndi apo.

Timagwiritsa ntchito chidebe chachitatu chosiyana ndi nginx kuti tigwiritse ntchito zokhazikika. Ndizotheka kukweza zithunzi. Kumbuyo kumawaika mu voliyumu yokonzedweratu, yomwe imayikidwanso mu chidebe chokhala ndi nginx, yomwe imapereka deta yosasunthika.

Kuti tisunge kasinthidwe ka nginx ndi mysql, tidawonjezera foda ya Docker momwe timasungirako zofunikira. Wopanga mapulogalamu akapanga git clone ya nkhokwe pamakina ake, amakhala kale ndi pulojekiti yokonzekera chitukuko chakomweko. Palibe funso kuti ndi doko liti kapena makonda oti agwiritse ntchito.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Kenako tili ndi zigawo zingapo: admin, info-API, zidziwitso zokankhira.

Kuti tiyambitse zonsezi, tidapanga malo enanso otchedwa dockerized-app. Pakadali pano timagwiritsa ntchito nkhokwe zingapo pagawo lililonse. Amangosiyana momveka bwino - mu GitLab imawoneka ngati chikwatu, koma pamakina a wopanga imawoneka ngati chikwatu cha polojekiti inayake. Mlingo umodzi pansipa ndi zigawo zomwe zidzaphatikizidwa.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Ichi ndi chitsanzo cha zomwe zili mu dockerized-app. Timayikanso chikwatu cha Docker pano, momwe timadzaza masinthidwe ofunikira pakulumikizana kwa zigawo zonse. Pali README.md yomwe ikufotokoza mwachidule momwe mungayambitsire ntchitoyi.

Apa tagwiritsa ntchito mafayilo awiri a docker-compose. Izi zimachitidwa kuti muthe kuyambitsa pang'onopang'ono. Wopanga mapulogalamu akamagwira ntchito ndi kernel, safuna zidziwitso za Push, amangoyambitsa fayilo ya docker-compose ndipo, motero, zothandizira zimasungidwa.

Ngati pakufunika kuphatikizidwa ndi zidziwitso za Push, ndiye kuti docker-compose.yaml ndi docker-compose-push.yaml zimayambitsidwa.

Popeza docker-compose.yaml ndi docker-compose-push.yaml zili mufoda, netiweki imodzi yokha imapangidwa yokha.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Kufotokozera zigawo. Iyi ndi fayilo yapamwamba kwambiri yomwe ili ndi udindo wosonkhanitsa zigawo. Chodabwitsa ndi chiyani apa? Apa tikuwonetsa gawo la balancer.

Ichi ndi chithunzi chokonzekera cha Docker chomwe chimayendetsa nginx ndi pulogalamu yomwe imamvera socket ya Docker. Zamphamvu, monga zotengera zimayatsidwa ndikuzimitsidwa, kasinthidwe ka nginx amapangidwanso. Timagawira kasamalidwe ka zigawo pogwiritsa ntchito mayina amtundu wachitatu.

Kwa chilengedwe cha Chitukuko timagwiritsa ntchito .dev domain - api.informer.dev. Mapulogalamu okhala ndi .dev akupezeka pamakina am'deralo.

Kenako ma configs amasamutsidwa ku projekiti iliyonse ndipo ma projekiti onse amayambitsidwa pamodzi nthawi imodzi.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Ngati tiwonetsa bwino, zimakhala kuti kasitomala ndi msakatuli wathu kapena chida china chomwe timapempha kwa owerengera.

Balancer imasankha chidebe chomwe chiyenera kupezeka kutengera dzina la domain.

Izi zitha kukhala nginx, zomwe zimapereka JS ku gulu la admin. Izi zitha kuchitika ndi nginx, yomwe imapereka API, kapena mafayilo osasunthika, omwe amaperekedwa ndi nginx mwanjira yotsitsa zithunzi.

Chithunzichi chikuwonetsa kuti zotengerazo zimalumikizidwa ndi netiweki yeniyeni ndikubisika kuseri kwa proxy.

Pa makina opanga mapulogalamu, mutha kupeza chidebecho podziwa IP, koma kwenikweni sitigwiritsa ntchito izi. Palibe chifukwa cholumikizana mwachindunji.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Ndi chitsanzo chanji chomwe ndiyenera kuyang'ana kuti ndiwonetsetse ntchito yanga? M'malingaliro anga, chitsanzo chabwino ndi chithunzi chovomerezeka cha MySQL.

Ndizovuta kwambiri. Pali Mabaibulo ambiri. Koma magwiridwe antchito ake amakulolani kuti mukwaniritse zosowa zambiri zomwe zingabuke popititsa patsogolo chitukuko. Ngati mutenga nthawi ndikumvetsetsa momwe zonsezi zimagwirira ntchito, ndiye ndikuganiza kuti simudzakhala ndi vuto pakuzikhazikitsa nokha.

Hub.docker.com nthawi zambiri imakhala ndi maulalo a github.com, pomwe data yaiwisi imaperekedwa mwachindunji komwe mungapange chithunzi nokha.

Kupitilira munkhokweyi pali script docker-endpoint.sh, yomwe ili ndi udindo woyambitsa koyambirira ndikukonzanso kukhazikitsidwa kwa ntchito.

Komanso mu chitsanzo ichi pali kuthekera kwa kasinthidwe pogwiritsa ntchito zosintha zachilengedwe. Pofotokoza zakusintha kwachilengedwe mukamagwiritsa ntchito chidebe chimodzi kapena kudzera pa docker-compose, titha kunena kuti tiyenera kukhazikitsa mawu achinsinsi a docker kuti muzu pa MySQL kapena chilichonse chomwe tikufuna.

Pali mwayi wopanga mawu achinsinsi mwachisawawa. Tikunena kuti tikufuna wogwiritsa ntchito, tiyenera kukhazikitsa mawu achinsinsi kwa wogwiritsa ntchito, ndipo tifunika kupanga database.

M'mapulojekiti athu, tagwirizanitsa pang'ono Dockerfile, yomwe ili ndi udindo woyambitsa. Kumeneko tidazisintha kuti zigwirizane ndi zosowa zathu kuti tingokulitsa ufulu wa ogwiritsa ntchito omwe pulogalamuyo imagwiritsa ntchito. Izi zidapangitsa kuti zitheke kupanga database kuchokera ku konsoni ya pulogalamu mtsogolomo. Mapulogalamu a Ruby ali ndi malamulo opangira, kusintha, ndi kuchotsa nkhokwe.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Ichi ndi chitsanzo cha momwe MySQL imawonekera pa github.com. Mutha kutsegula Dockerfile ndikuwona momwe kukhazikitsa kumachitikira pamenepo.

docker-endpoint.sh script yomwe imayang'anira malo olowera. Pakuyambitsa koyambirira, zochita zina zokonzekera zimafunika ndipo zonsezi zimaphatikizidwa muzolemba zoyambira.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Tiyeni tipitirire ku gawo lachiwiri.

Tinasinthira ku gitlab kuti tisunge ma source code. Ili ndi dongosolo lamphamvu lomwe lili ndi mawonekedwe owonekera.

Chimodzi mwazinthu za Gitlab ndi Gitlab CI. Zimakulolani kufotokoza mndandanda wa malamulo omwe pambuyo pake adzagwiritsidwa ntchito kukonza ndondomeko yobweretsera ma code kapena kuyesa kuyesa.

Lipoti pa Gitlab CI 2 https://goo.gl/uohKjI - lipoti lochokera ku kalabu ya Ruby Russia ndi latsatanetsatane ndipo lingakhale losangalatsa kwa inu.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Tsopano tiwona zomwe zimafunika kuyambitsa Gitlab CI. Kuti titsegule Gitlab CI, tikungofunika kuyika fayilo ya .gitlab-ci.yml muzu wa polojekiti.

Apa tikufotokoza kuti tikufuna kuchita mndandanda wa mayiko monga kuyesa, kutumiza.

Timapanga zolemba zomwe zimatcha mwachindunji docker-compose build ya pulogalamu yathu. Ichi ndi chitsanzo cha backend chabe.

Kenako timanena kuti ndikofunikira kuyendetsa kusamuka kuti musinthe database ndikuyesa mayeso.

Ngati zolembedwazo zikuchitidwa molondola ndipo osabweza khodi yolakwika, ndiye kuti dongosolo limapitilira gawo lachiwiri la kutumizidwa.

Gawo la kutumiza ntchito likukhazikitsidwa pakali pano. Sitinapange kuyambiranso kopanda kutsika.

Timazimitsa zotengera zonse mokakamiza, kenako timakwezanso zotengera zonse, zosonkhanitsidwa pagawo loyamba pakuyesa.

Tiyeni tiyendetse kusamuka kwa database komwe kunalembedwa ndi okonza malo osinthika apano.

Pali chidziwitso chakuti izi ziyenera kugwiritsidwa ntchito ku nthambi ya master.

Sichigwira ntchito posintha nthambi zina.

Ndi zotheka kukonza rollouts pamodzi nthambi.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Kuti tichite izi, tifunika kukhazikitsa Gitlab Runner.

Izi zidalembedwa ku Golang. Ndi fayilo imodzi monga momwe zimakhalira m'dziko la Golang, zomwe sizifuna kudalira.

Poyambitsa timalembetsa Gitlab Runner.

Timalandila kiyi mu mawonekedwe a intaneti a Gitlab.

Kenako timatcha lamulo loyambitsa pa mzere wolamula.

Kukonza Gitlab Runner mu dialog mode (Shell, Docker, VirtualBox, SSH)

Khodi pa Gitlab Runner igwira ntchito iliyonse kutengera .gitlab-ci.yml zochunira.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Momwe zimawonekera mu Gitlab pa intaneti. Titalumikiza GItlab CI, tili ndi mbendera yomwe ikuwonetsa momwe nyumbayo ilili pakadali pano.

Tikuwona kuti mphindi 4 zapitazo kudzipereka kudapangidwa komwe kudapambana mayeso onse ndipo sikunabweretse mavuto.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Titha kuyang'ana pazomangazo mwatsatanetsatane. Apa tikuwona kuti zigawo ziwiri zadutsa kale. Mayesero ndi momwe atumizidwira pasiteji.

Ngati tidina pakupanga kwina, padzakhala zotulutsa za console za malamulo omwe adakhazikitsidwa potengera .gitlab-ci.yml.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Izi ndi zomwe nkhani ya malonda athu imawonekera. Tikuwona kuti pakhala zoyesayesa zopambana. Mayeserowo akatumizidwa, samasuntha kupita ku sitepe yotsatira ndipo code ya staging sinasinthidwe.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Ndi mavuto ati omwe tidathetsa popanga pomwe tidakhazikitsa docker? Dongosolo lathu lili ndi zigawo ndipo tidafunikira kuyambitsanso zina mwazinthu zomwe zidasinthidwa munkhokwe, osati dongosolo lonse.

Kuti tichite izi, tidayenera kulekanitsa chilichonse kukhala zikwatu zosiyana.

Titachita izi, tinali ndi vuto kuti Docker-compose imapanga malo akeake pafoda iliyonse ndipo sawona zigawo za mnansi wake.

Kuti tizungulira, tidapanga maukonde pamanja ku Docker. Mu Docker-compose zidalembedwa kuti muyenera kugwiritsa ntchito maukonde otere pantchitoyi.

Chifukwa chake, gawo lililonse lomwe limayamba ndi maunawa limawona zigawo zina zadongosolo.

Vuto lotsatira ndikugawa magawo pakati pa mapulojekiti angapo.

Popeza kuti zonsezi ziwonekere zokongola komanso zoyandikana kwambiri ndi kupanga, ndi bwino kugwiritsa ntchito doko 80 kapena 443, lomwe limagwiritsidwa ntchito paliponse mu WEB.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Tinathetsa bwanji zimenezi? Tidapereka Gitlab Runner m'modzi kumapulojekiti akuluakulu onse.

Gitlab imakulolani kuti mutsegule Gitlab Runners angapo, omwe angangotenga ntchito zonse imodzi ndi imodzi mwadongosolo lachisokonezo ndikuyendetsa.

Kuti tipewe mavuto a m'nyumba, tinachepetsa gulu la ntchito zathu ku Gitlab Runner imodzi, yomwe imagwirizana ndi mavoliyumu athu popanda mavuto.

Tinasuntha nginx-proxy mu script yosiyana yoyambitsa ndikulemba ma gridi a mapulojekiti onse mmenemo.

Pulojekiti yathu ili ndi gridi imodzi, ndipo chowerengera chili ndi ma grid angapo kutengera mayina a polojekiti. Itha kukhala proxy mopitilira ndi mayina awo.

Zopempha zathu zimabwera kudzera mu domain pa port 80 ndipo zimathetsedwa ku gulu la zotengera zomwe zimagwiritsa ntchito derali.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Ndi mavuto ena ati amene analipo? Izi ndi zomwe zotengera zonse zimayendera ngati mizu mwachisawawa. Uwu ndiye muzu wosafanana muzu wadongosolo.

Komabe, ngati mutalowa mu chidebecho, idzakhala mizu ndipo fayilo yomwe timapanga mu chidebechi imalandira ufulu wa mizu.

Ngati wopanga adalowa mu chidebecho ndikupanga malamulo ena omwe adapanga mafayilo, ndiye kuti adasiya chidebecho, ndiye muzolemba zake zogwirira ntchito ali ndi fayilo yomwe sapeza.

Kodi zimenezi zingatheke bwanji? Mutha kuwonjezera ogwiritsa ntchito omwe adzakhale mu chidebecho.

Ndi mavuto ati omwe adabuka titawonjezera wogwiritsa ntchito?

Mukapanga wosuta, ID ya gulu (UID) ndi ID ya ogwiritsa (GID) nthawi zambiri sizimagwirizana.

Kuti tithane ndi vutoli mu chidebe timagwiritsa ntchito ogwiritsa ntchito omwe ali ndi ID 1000.

Kwa ife, izi zikugwirizana ndi mfundo yakuti pafupifupi opanga onse amagwiritsa ntchito Ubuntu OS. Ndipo mu Ubuntu OS wosuta woyamba ali ndi ID 1000.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Kodi tili ndi mapulani?

Werenganinso zolemba za Docker. Ntchitoyi ikukula mwachangu, zolemba zikusintha. Deta yomwe idapezedwa miyezi iwiri kapena itatu yapitayo ikukhala yachikale pang'onopang'ono.

Ena mwa mavuto amene tinathetsa angakhale kuti anathetsedwa kale ndi njira wamba.

Ndikufuna kusunthira patsogolo ndikulunjika ku orchestration.

Chitsanzo chimodzi ndi makina opangidwa ndi a Docker otchedwa Docker Swarm, omwe amatuluka m'bokosi. Ndikufuna kuyambitsa china chake pakupanga kutengera ukadaulo wa Docker Swarm.

Zotengera zobereketsa zimapangitsa kuti kugwira ntchito ndi matabwa kukhala kovuta. Tsopano matabwa ali paokha. Iwo amwazikana mu zotengera. Imodzi mwa ntchito zake ndikupangitsa mwayi wofikira zolemba kudzera pa intaneti.

Kupititsa patsogolo ndi kuyesa ndi Docker ndi Gitlab CI

Source: www.habr.com

Kuwonjezera ndemanga