Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Kuv xav kom koj nyeem cov ntawv sau tseg ntawm tsab ntawv ceeb toom los ntawm Alexander Sigachev los ntawm Inventos "Kev Tsim Kho thiab Kev Xeem Txheej Txheem nrog Docker + Gitlab CI"

Cov uas nyuam qhuav pib siv txoj kev txhim kho thiab kev xeem raws li Docker + Gitlab CI feem ntau nug cov lus nug yooj yim. Yuav pib qhov twg? Yuav npaj li cas? Yuav kuaj li cas?

Daim ntawv tshaj tawm no yog qhov zoo vim tias nws tham txog kev txhim kho thiab kev sim txheej txheem siv Docker thiab Gitlab CI. Daim ntawv tshaj tawm nws tus kheej yog los ntawm 2017. Kuv xav tias los ntawm daim ntawv tshaj tawm no koj tuaj yeem khaws cov hauv paus, txheej txheem, lub tswv yim, thiab kev paub ntawm kev siv.

Leej twg mob siab, thov nyob rau hauv tus miv.

Kuv lub npe yog Alexander Sigachev. Kuv ua haujlwm rau Inventos. Kuv yuav qhia koj txog kuv qhov kev paub siv Docker thiab seb peb maj mam siv nws li cas ntawm cov haujlwm hauv tuam txhab.

Lub ntsiab lus ntawm tsab ntawv ceeb toom: Kev txhim kho txheej txheem siv Docker thiab Gitlab CI.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Nov yog kuv qhov thib ob tham txog Docker. Thaum lub sijhawm tshaj tawm thawj zaug, peb siv Docker nkaus xwb hauv Kev Txhim Kho ntawm cov tshuab tsim tawm. Tus naj npawb ntawm cov neeg ua haujlwm uas siv Docker yog kwv yees li 2-3 tus neeg. Maj mam, kev paub tau txais thiab peb tsiv mus ntxiv me ntsis. Txuas rau peb thawj tsab ntawv ceeb toom.

Yuav muaj dab tsi hauv tsab ntawv ceeb toom no? Peb yuav qhia peb cov kev paub txog dab tsi rakes peb sau, dab tsi teeb meem peb daws. Nws tsis zoo nkauj txhua qhov chaw, tab sis nws tso cai rau peb mus ntxiv.

Peb lub hom phiaj: dockerize txhua yam peb tau txais peb txhais tes.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Peb daws teeb meem dab tsi?

Thaum lub tuam txhab muaj ntau pab pawg, tus programmer yog ib qho kev sib koom. Muaj cov theem thaum tus programmer rub tawm ntawm ib qhov project thiab muab rau lwm qhov project rau qee lub sijhawm.

Txhawm rau kom tus programmer nkag siab sai, nws yuav tsum rub tawm qhov chaws ntawm qhov project thiab tso ib puag ncig kom sai li sai tau, uas yuav ua rau nws nce qib ntxiv hauv kev daws teeb meem ntawm qhov project no.

Feem ntau, yog tias koj pib los ntawm kos, muaj cov ntaub ntawv me me hauv qhov project. Tsuas yog cov neeg laus muaj cov ntaub ntawv qhia txog yuav teeb tsa li cas. Cov neeg ua haujlwm teeb tsa lawv qhov chaw ua haujlwm ntawm lawv tus kheej hauv ib lossis ob hnub. Txhawm rau ua kom tau qhov no, peb siv Docker.

Qhov laj thawj tom ntej no yog kev tsim qauv ntawm kev teeb tsa hauv Kev Txhim Kho. Hauv kuv qhov kev paub dhau los, cov neeg tsim khoom ib txwm ua qhov pib. Hauv txhua qhov thib tsib, ib qho kev cai sau tau nkag mus, piv txwv li vasya.dev. Zaum ntawm kuv yog kuv tus neeg nyob ze Petya, uas nws lub npe yog petya.dev. Lawv tsim lub vev xaib lossis qee qhov kev tivthaiv siv lub npe sau npe no.

Thaum lub kaw lus loj hlob thiab cov npe sau npe pib suav nrog hauv kev teeb tsa, kev tsis sib haum xeeb hauv kev loj hlob ib puag ncig tshwm sim thiab txoj hauv kev tau sau dua tshiab.

Tib yam tshwm sim nrog kev teeb tsa database. Qee tus neeg tsis thab nrog kev ruaj ntseg thiab ua haujlwm nrog tus password hauv paus khoob. Nyob rau theem kev teeb tsa, MySQL nug ib tus neeg rau lo lus zais thiab lo lus zais tau hloov mus ua 123. Nws feem ntau tshwm sim tias cov ntaub ntawv teeb tsa tau hloov pauv tas li nyob ntawm tus tsim tawm qhov kev cog lus. Ib tug kho, ib tug neeg tsis kho lub config. Muaj kev ua kom yuam kev thaum peb muab qee qhov kev sim teeb tsa rau hauv .gitignore thiab txhua tus tsim tawm yuav tsum tau nruab cov ntaub ntawv. Qhov no ua rau cov txheej txheem pib nyuaj dua. Ntawm lwm yam, koj yuav tsum nco ntsoov txog lub database. Cov ntaub ntawv yuav tsum tau pib, tus password yuav tsum tau sau npe, tus neeg siv yuav tsum tau sau npe, kos npe yuav tsum tau tsim, thiab lwm yam.

Lwm qhov teeb meem yog txawv versions ntawm cov tsev qiv ntawv. Nws feem ntau tshwm sim tias tus tsim tawm ua haujlwm ntawm cov haujlwm sib txawv. Muaj ib txoj haujlwm Legacy, uas tau pib tsib xyoos dhau los (los ntawm 2017 - editor daim ntawv). Thaum pib peb pib nrog MySQL 5.5. Kuj tseem muaj cov haujlwm niaj hnub no uas peb tab tom sim siv ntau cov qauv niaj hnub ntawm MySQL, piv txwv li 5.7 lossis laus dua (hauv 2017 - editor's note)

Txhua tus neeg ua haujlwm nrog MySQL paub tias cov tsev qiv ntawv no muaj kev vam meej. Nws yog teeb meem heev los khiav 2 databases ua ke. Yam tsawg kawg, nws muaj teeb meem los txuas cov neeg siv khoom qub rau cov ntaub ntawv tshiab. Qhov no ua rau muaj ntau yam teeb meem.

Qhov teeb meem tom ntej yog thaum tus tsim tawm ua haujlwm ntawm lub tshuab hauv zos, nws siv cov peev txheej hauv zos, cov ntaub ntawv hauv zos, RAM hauv zos. Tag nrho cov kev sib cuam tshuam thaum lub sij hawm tsim kev daws teeb meem yog nqa tawm nyob rau hauv lub moj khaum ntawm lub fact tias nws ua hauj lwm ntawm ib lub tshuab. Ib qho piv txwv yuav yog thaum peb muaj backend servers hauv Production 3, thiab tus tsim tawm khaws cov ntaub ntawv mus rau hauv paus directory thiab los ntawm qhov ntawd nginx siv cov ntaub ntawv los teb rau qhov kev thov. Thaum cov cai no nkag mus rau hauv Kev Tsim Khoom, nws hloov tawm tias cov ntaub ntawv tam sim no ntawm ib qho ntawm 3 servers.

Cov kev taw qhia ntawm microservices yog tam sim no tsim. Thaum peb faib peb daim ntawv thov loj rau hauv qee qhov me me uas cuam tshuam nrog ib leeg. Qhov no tso cai rau koj xaiv cov thev naus laus zis rau ib pawg haujlwm tshwj xeeb. Qhov no kuj tso cai rau koj los faib cov haujlwm thiab thaj tsam ntawm lub luag haujlwm ntawm cov neeg tsim khoom.

Tus tsim tawm frontend, tsim hauv JS, tsis tshua muaj kev cuam tshuam rau lub backend. Tus tsim tawm backend, nyob rau hauv lem, tsim, nyob rau hauv peb cov ntaub ntawv, Ruby on Rails thiab tsis cuam tshuam nrog Frondend. Kev sib tham yog ua los ntawm API.

Raws li qhov nyiaj tau los, siv Docker peb tuaj yeem rov ua dua cov peev txheej ntawm Staging. Txhua qhov project, vim nws qhov tshwj xeeb, xav tau qee qhov chaw. Lub cev, nws yog ib qho tsim nyog los faib cov neeg rau zaub mov virtual thiab teeb tsa lawv cais, lossis faib qee yam kev hloov pauv ib puag ncig thiab cov phiaj xwm tuaj yeem cuam tshuam rau ib leeg, nyob ntawm cov qauv ntawm cov tsev qiv ntawv.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Cov cuab yeej. Peb siv dab tsi?

  • Docker nws tus kheej. Dockerfile piav qhia txog qhov kev vam meej ntawm ib daim ntawv thov.
  • Docker-compose yog ib pob khoom uas coj los ua ke ntau ntawm peb cov ntawv thov Docker.
  • Peb siv GitLab los khaws qhov chaws.
  • Peb siv GitLab-CI rau kev sib koom ua ke.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Daim ntawv tshaj tawm muaj ob ntu.

Thawj ntu yuav qhia koj yuav ua li cas khiav Docker ntawm cov neeg tsim khoom lub tshuab.

Qhov thib ob yuav tham txog yuav ua li cas cuam tshuam nrog GitLab, yuav ua li cas peb khiav cov kev xeem thiab yuav ua li cas peb yob tawm mus rau Staging.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Docker yog ib lub tshuab uas tso cai rau (siv ib txoj hauv kev tshaj tawm) los piav txog cov khoom tsim nyog. Nov yog ib qho piv txwv Dockerfile. Ntawm no peb tshaj tawm tias peb tau txais txiaj ntsig los ntawm Docker duab ntawm Ruby: 2.3.0. Nws muaj Ruby version 2.3 ntsia. Peb nruab cov tsev qiv ntawv tsim nyog thiab NodeJS. Peb piav qhia tias peb tab tom tsim ib daim ntawv teev npe /app. Peb muab cov ntawv teev npe app ua cov npe ua haujlwm. Hauv phau ntawv no peb tso qhov tsawg kawg nkaus Gemfile thiab Gemfile.lock. Tom qab ntawd peb tsim tej yaam num uas nruab no dependency duab. Peb qhia tias lub thawv yuav npaj txhij mloog ntawm qhov chaw nres nkoj sab nraud 3000. Cov lus txib kawg yog cov lus txib uas ncaj qha xa peb daim ntawv thov. Yog tias peb ua qhov project khiav hais kom ua, daim ntawv thov yuav sim khiav thiab khiav cov lus txib uas tau teev tseg.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Qhov no yog ib qho piv txwv me me ntawm cov ntaub ntawv docker-compose. Hauv qhov no, peb pom tias muaj kev sib txuas ntawm ob lub thawv. Qhov no yog ncaj qha mus rau hauv qhov kev pabcuam database thiab web service. Peb cov ntawv thov hauv web feem ntau xav tau qee yam ntawm cov ntaub ntawv raws li lub backend rau khaws cov ntaub ntawv. Txij li thaum peb siv MySQL, qhov piv txwv yog nrog MySQL - tab sis tsis muaj dab tsi tiv thaiv peb los ntawm kev siv qee qhov database (PostgreSQL, Redis).

Peb coj cov duab MySQL 5.7.14 yam tsis muaj kev hloov pauv los ntawm cov nom tswv los ntawm Docker hub. Peb sau cov duab uas yog lub luag haujlwm rau peb daim ntawv thov web los ntawm cov npe tam sim no. Thaum xub thawj, nws sau ib daim duab rau peb. Tom qab ntawd nws khiav cov lus txib uas peb tab tom ua ntawm no. Yog tias peb rov qab mus, peb yuav pom tias cov lus txib pib tau txhais los ntawm Puma. Puma yog ib qho kev pabcuam sau hauv Ruby. Hauv qhov thib ob peb override. Cov lus txib no tuaj yeem ua tau raws li peb xav tau lossis ua haujlwm.

Peb kuj piav qhia tias peb yuav tsum xa qhov chaw nres nkoj ntawm peb lub tshuab tsim tawm los ntawm 3000 mus rau 3000 qhov chaw nres nkoj. Qhov no yog ua tiav siv iptables thiab nws tus kheej cov txheej txheem, uas yog ncaj qha kos rau hauv Docker.

Tus tsim tawm tuaj yeem, raws li ua ntej, nkag mus rau txhua qhov chaw nyob IP, piv txwv li, 127.0.0.1 hauv zos lossis sab nraud IP chaw nyob ntawm lub tshuab.

Cov kab kawg hais tias lub thawv lub vev xaib nyob ntawm lub thawv db. Thaum peb hu rau lub vev xaib kom tso tawm, docker-compose yuav xub tso cov ntaub ntawv rau peb. Twb tau thaum pib ntawm lub database (qhov tseeb, tom qab tso tawm ntawm lub thawv! Qhov no tsis lav qhov kev npaj ntawm cov ntaub ntawv) nws yuav tso peb daim ntawv thov, peb cov backend.

Qhov no tso cai rau peb kom tsis txhob ua yuam kev thaum cov ntaub ntawv tsis tuaj thiab tso cai rau peb txuag cov peev txheej thaum peb nres lub thawv ntim khoom, yog li tso cov peev txheej rau lwm cov haujlwm.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Dab tsi yog kev siv database dockerization ntawm ib qhov project muab rau peb? Peb sau MySQL version rau txhua tus tsim tawm. Qhov no tso cai rau koj kom tsis txhob muaj qee qhov yuam kev uas yuav tshwm sim thaum versions diverge, thaum lub syntax, configuration, thiab default settings hloov. Qhov no tso cai rau koj los qhia meej lub npe hostname rau database, nkag mus, password. Peb tab tom txav deb ntawm lub vaj tsiaj ntawm cov npe thiab kev tsis sib haum xeeb hauv cov ntaub ntawv config uas muaj ua ntej.

Peb muaj lub sijhawm los siv qhov zoo tshaj plaws config rau Kev Loj Hlob ib puag ncig, uas yuav txawv ntawm lub neej ntawd. MySQL tau teeb tsa los ntawm lub neej ntawd rau cov tshuab tsis muaj zog thiab nws qhov kev ua tau zoo ntawm lub thawv yog tsawg heev.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Docker tso cai rau koj siv Python, Ruby, NodeJS, PHP tus txhais lus ntawm qhov xav tau version. Peb tau tshem ntawm qhov yuav tsum tau siv qee yam ntawm tus thawj tswj hwm version. Yav dhau los, ib pob rpm tau siv rau Ruby, uas tso cai rau koj hloov lub version nyob ntawm qhov project. Ua tsaug rau Docker ntim, qhov no kuj tso cai rau koj kom nkag mus tau yooj yim code thiab version nws nrog rau kev vam khom. Peb tsis muaj teeb meem nkag siab txog qhov version ntawm tus neeg txhais lus thiab tus lej. Txhawm rau hloov kho lub version, koj yuav tsum txo qis lub thawv qub thiab tsa lub thawv tshiab. Yog tias muaj qee yam tsis zoo, peb tuaj yeem txo lub thawv tshiab, tsa lub thawv qub.

Tom qab tsim cov duab, cov ntim hauv ob qho tib si Kev Txhim Kho thiab Kev Tsim Khoom yuav zoo ib yam. Qhov no yog qhov tseeb tshwj xeeb tshaj yog rau kev teeb tsa loj.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI Ntawm Frontend peb siv JavaScipt thiab NodeJS.

Tam sim no peb muaj peb qhov project kawg ntawm ReacJS. Tus tsim tawm tau tsim txhua yam hauv lub thawv thiab tsim siv kub-reload.

Tom ntej no, txoj haujlwm ntawm kev sib sau JavaScipt tau pib thiab cov lej sib sau ua ke raug xa los ntawm nginx, txuag cov peev txheej.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Ntawm no kuv tau muab ib daim duab ntawm peb qhov project tshiab.

Koj daws teeb meem dab tsi? Peb muaj qhov xav tau los tsim kom muaj qhov system uas cov khoom siv mobile sib cuam tshuam. Lawv tau txais cov ntaub ntawv. Ib qho ntawm qhov ua tau yog xa cov ntawv ceeb toom thawb rau lub cuab yeej no.

Peb tau ua dab tsi rau qhov no?

Peb faib daim ntawv thov mus rau hauv cov khoom nram qab no: ib feem admin hauv JS, lub backend uas ua haujlwm los ntawm REST interface hauv Ruby on Rails. Backend cuam tshuam nrog lub database. Qhov tshwm sim uas yog generated yog muab rau tus neeg siv khoom. Lub vaj huam sib luag admin cuam tshuam nrog lub backend thiab database ntawm REST interface.

Peb kuj muaj qhov yuav tsum tau xa cov ntawv ceeb toom Push. Ua ntej qhov no, peb muaj ib qhov project uas tau siv lub tshuab ua lub luag haujlwm rau kev xa cov ntawv ceeb toom rau mobile platforms.

Peb tau tsim cov txheej txheem hauv qab no: tus neeg teb xov tooj los ntawm browser cuam tshuam nrog admin vaj huam sib luag, admin vaj huam sib luag cuam tshuam nrog lub backend, txoj haujlwm yog xa cov ntawv ceeb toom Push.

Cov ntawv ceeb toom thawb cuam tshuam nrog lwm cov khoom siv uas tau siv hauv NodeJS.

Queues tau tsim thiab cov ntawv ceeb toom raug xa mus raws li lawv tus kheej cov txheej txheem.

Ob lub databases tau kos ntawm no. Tam sim no, siv Docker, peb siv 2 cov ntaub ntawv ywj pheej uas tsis muaj kev sib txuas rau ib leeg. Ntxiv rau qhov tseeb tias lawv muaj ib qho kev sib koom ua ke virtual, thiab cov ntaub ntawv lub cev tau muab khaws cia rau hauv cov npe sib txawv ntawm tus tsim tawm lub tshuab.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Tib yam tab sis tus lej. Code rov siv dua yog qhov tseem ceeb ntawm no.

Yog tias yav dhau los peb tau tham txog kev rov siv cov lej hauv cov tsev qiv ntawv, tom qab ntawd hauv qhov piv txwv no peb cov kev pabcuam, uas teb rau Push cov ntawv ceeb toom, rov siv dua ua tiav server. Nws muab API. Thiab peb txoj kev loj hlob tshiab cuam tshuam nrog nws.

Lub sijhawm ntawd peb tau siv version 4 ntawm NodeJS. Tam sim no (hauv 2017 - editor daim ntawv) hauv peb qhov kev txhim kho tshiab kawg peb siv version 7 ntawm NodeJS. Tsis muaj teeb meem nyob rau hauv cov khoom tshiab los koom nrog cov ntawv tshiab ntawm cov tsev qiv ntawv.

Yog tias tsim nyog, koj tuaj yeem thim rov qab thiab tsa NodeJS version ntawm Push ceeb toom kev pabcuam.

Thiab yog tias peb tuaj yeem tswj hwm API kev sib raug zoo, ces nws yuav muaj peev xwm hloov nws nrog lwm cov haujlwm uas tau siv yav dhau los.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Koj xav tau dab tsi ntxiv Docker? Peb ntxiv Dockerfile rau peb lub chaw cia khoom, uas piav qhia txog qhov tsim nyog nyob. Hauv qhov piv txwv no, cov khoom tau muab faib ua qhov laj thawj. Qhov no yog qhov tsawg kawg nkaus cov khoom siv rau tus tsim tawm backend.

Thaum tsim ib qhov project tshiab, peb tsim Dockerfile thiab piav qhia txog qhov xav tau ecosystem (Python, Ruby, NodeJS). Hauv docker-compose, nws piav qhia txog qhov tsim nyog nyob ntawm - cov ntaub ntawv. Peb piav qhia tias peb xav tau ib lub database ntawm xws li thiab xws li ib tug version, khaws cov ntaub ntawv muaj thiab muaj.

Peb siv lub thawv thib peb nrog nginx los pab cov ntsiab lus zoo li qub. Nws muaj peev xwm upload duab. Lub backend muab tso rau hauv lub ntim ntim ua ntej, uas tseem tau muab tso rau hauv lub thawv nrog nginx, uas muab cov ntaub ntawv zoo li qub.

Txhawm rau khaws nginx thiab mysql configuration, peb ntxiv Docker nplaub tshev uas peb khaws qhov tsim nyog configs. Thaum tus tsim tawm ua git clone ntawm lub chaw cia khoom ntawm nws lub tshuab, nws twb muaj ib qhov project npaj rau kev loj hlob hauv zos. Tsis muaj lus nug txog qhov chaw nres nkoj lossis qhov chaw twg los thov.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Tom ntej no peb muaj ob peb yam: admin, info-API, laub ceeb toom.

Txhawm rau tso tag nrho cov no, peb tsim lwm qhov chaw khaws cia hu ua dockerized-app. Tam sim no peb siv ntau qhov chaw cia khoom rau txhua qhov khoom. Lawv tsuas yog qhov sib txawv ntawm qhov sib txawv - hauv GitLab nws zoo li daim nplaub tshev, tab sis ntawm tus tsim tawm lub tshuab nws zoo li daim nplaub tshev rau ib qhov project tshwj xeeb. Ib qib hauv qab no yog cov khoom sib xyaw ua ke.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Nov yog ib qho piv txwv ntawm cov ntsiab lus ntawm dockerized-app. Peb kuj tso Docker phau ntawv teev npe ntawm no, uas peb sau cov kev teeb tsa uas xav tau rau kev sib cuam tshuam ntawm txhua yam khoom. Muaj README.md uas piav qhia luv luv yuav ua li cas qhib qhov project.

Ntawm no peb tau siv ob lub docker-compose cov ntaub ntawv. Qhov no yog ua kom muaj peev xwm tso rau hauv theem. Thaum tus tsim tawm ua haujlwm nrog cov ntsiav, nws tsis xav tau Push cov ntawv ceeb toom, nws tsuas yog tso tawm cov ntaub ntawv docker-compose thiab, raws li, cov peev txheej tau txais kev cawmdim.

Yog tias xav tau kev koom ua ke nrog Push cov ntawv ceeb toom, ces docker-compose.yaml thiab docker-compose-push.yaml tau pib.

Txij li thaum docker-compose.yaml thiab docker-compose-push.yaml yog nyob rau hauv daim nplaub tshev, ib lub network virtual tau txais kev tsim.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Kev piav qhia ntawm cov khoom siv. Qhov no yog cov ntaub ntawv siab dua uas yog lub luag haujlwm rau kev sau cov khoom. Dab tsi yog qhov tseem ceeb ntawm no? Ntawm no peb qhia txog cov khoom sib npaug.

Nov yog daim duab Docker npaj txhij uas khiav nginx thiab ib daim ntawv thov uas mloog Docker socket. Dynamic, raws li ntim tau qhib thiab tawm, nginx config yog rov tsim dua. Peb faib kev tuav cov khoom siv cov npe thib peb.

Rau kev txhim kho ib puag ncig peb siv .dev sau - api.informer.dev. Cov ntawv thov nrog .dev sau muaj nyob rau ntawm tus tsim tawm lub tshuab hauv zos.

Tom qab ntawd cov configs raug xa mus rau txhua qhov project thiab txhua qhov haujlwm tau pib ua ke tib lub sijhawm.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Yog hais tias peb depict nws graphically, nws hloov tawm hais tias tus neeg siv yog peb tus browser los yog ib yam ntawm cov cuab yeej uas peb thov mus rau lub balancer.

Tus balancer txiav txim siab lub thawv twg yuav tsum tau nkag mus raws li lub npe sau.

Qhov no tuaj yeem yog nginx, uas muab JS rau pawg tswj hwm. Qhov no tuaj yeem ua tau los ntawm nginx, uas muab API, lossis cov ntaub ntawv zoo li qub, uas yog muab los ntawm nginx hauv daim ntawv ntawm kev thauj khoom.

Daim duab qhia tau hais tias cov ntim tau txuas nrog lub network virtual thiab muab zais tom qab lub npe.

Ntawm tus tsim tawm lub tshuab, koj tuaj yeem nkag mus rau lub thawv paub txog IP, tab sis hauv txoj cai peb tsis siv qhov no. Yeej tsis xav tau kev sib cuag ncaj qha.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Kuv yuav tsum saib dab tsi piv txwv rau dockerize kuv daim ntawv thov? Hauv kuv lub tswv yim, ib qho piv txwv zoo yog cov duab docker official rau MySQL.

Nws nyuaj heev. Muaj ntau ntau versions. Tab sis nws cov kev ua haujlwm tso cai rau koj los npog ntau yam kev xav tau uas yuav tshwm sim hauv cov txheej txheem ntawm kev txhim kho ntxiv. Yog tias koj siv sijhawm thiab nkag siab tias nws cuam tshuam li cas, ces kuv xav tias koj yuav tsis muaj teeb meem siv koj tus kheej.

Hub.docker.com feem ntau muaj cov txuas mus rau github.com, qhov twg cov ntaub ntawv nyoos yog muab ncaj qha los ntawm qhov koj tuaj yeem tsim cov duab koj tus kheej.

Tsis tas li ntawd nyob rau hauv lub repository no muaj ib tsab ntawv docker-endpoint.sh, uas yog lub luag hauj lwm rau kev pib pib thiab ua ntxiv ntawm daim ntawv thov tso tawm.

Tsis tas li hauv qhov piv txwv no muaj peev xwm ntawm kev teeb tsa siv ib puag ncig hloov pauv. Los ntawm kev txhais ib qho kev hloov pauv ib puag ncig thaum khiav ib lub thawv lossis los ntawm docker-compose, peb tuaj yeem hais tias peb yuav tsum teem ib lo lus zais rau docker rau hauv paus ntawm MySQL lossis txhua yam peb xav tau.

Muaj ib qho kev xaiv los tsim ib tug random password. Peb hais tias peb xav tau ib tug neeg siv, peb yuav tsum tau teem ib lo lus zais rau tus neeg siv, thiab peb yuav tsum tsim ib tug database.

Hauv peb cov haujlwm, peb tau koom ua ke me ntsis Dockerfile, uas yog lub luag haujlwm rau kev pib. Nyob ntawd peb tau kho nws rau peb cov kev xav tau kom yooj yim nthuav cov neeg siv txoj cai uas daim ntawv thov siv. Qhov no ua rau nws tuaj yeem yooj yim tsim cov ntaub ntawv los ntawm daim ntawv thov console yav tom ntej. Ruby daim ntawv thov muaj cov lus txib rau kev tsim, hloov kho, thiab tshem tawm cov ntaub ntawv.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Qhov no yog ib qho piv txwv ntawm qhov tshwj xeeb version ntawm MySQL zoo li ntawm github.com. Koj tuaj yeem qhib Dockerfile thiab saib seb lub installation yuav siv li cas rau ntawd.

docker-endpoint.sh tsab ntawv lub luag haujlwm rau qhov nkag nkag. Thaum pib pib, qee qhov kev npaj yuav tsum tau ua thiab tag nrho cov haujlwm no suav nrog hauv tsab ntawv pib.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Cia peb mus rau qhov thib ob.

Peb hloov mus rau gitlab los khaws cov lej cim. Qhov no yog ib tug ncaj haib system uas muaj ib tug visual interface.

Ib qho ntawm Gitlab Cheebtsam yog Gitlab CI. Nws tso cai rau koj los piav qhia txog cov lus txib uas yuav tom qab siv los teeb tsa tus lej xa khoom lossis khiav qhov kev xeem automated.

Qhia txog Gitlab CI 2 https://goo.gl/uohKjI - Daim ntawv tshaj tawm los ntawm Ruby Russia club yog cov ncauj lus kom ntxaws thiab tej zaum yuav txaus siab rau koj.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Tam sim no peb yuav saib dab tsi yuav tsum tau qhib Gitlab CI. Txhawm rau tso Gitlab CI, peb tsuas yog yuav tsum muab cov ntaub ntawv .gitlab-ci.yml tso rau hauv lub hauv paus ntawm qhov project.

Ntawm no peb piav qhia tias peb xav ua ib ntu ntawm cov xeev xws li kev sim, kev xa tawm.

Peb ua cov ntawv sau ncaj qha hu rau docker-compose tsim ntawm peb daim ntawv thov. Qhov no yog ib qho piv txwv ntawm lub backend xwb.

Tom ntej no peb hais tias nws yog ib qho tsim nyog yuav tau khiav migrations los hloov cov ntaub ntawv thiab khiav cov kev xeem.

Yog tias cov ntawv sau raug ua kom raug thiab tsis rov qab ua qhov yuam kev, ces lub kaw lus mus rau theem thib ob ntawm kev xa tawm.

Lub sijhawm xa tawm yog tam sim no siv rau kev teeb tsa. Peb tsis tau npaj qhov tsis muaj-downtime rov pib dua.

Peb yuam kom tua tag nrho cov thawv, thiab tom qab ntawd peb tsa tag nrho cov ntim dua, sau rau thawj theem thaum kuaj.

Cia peb khiav cov database migrations uas tau sau los ntawm cov neeg tsim khoom rau qhov chaw hloov pauv tam sim no.

Muaj lus ceeb toom tias qhov no tsuas yog yuav tsum tau siv rau tus tswv ceg.

Tsis ua hauj lwm thaum hloov lwm ceg.

Nws muaj peev xwm npaj rollouts raws cov ceg.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Txhawm rau npaj qhov no ntxiv, peb yuav tsum nruab Gitlab Runner.

Qhov kev siv hluav taws xob no tau sau rau hauv Golang. Nws yog ib cov ntaub ntawv raws li muaj nyob rau hauv lub ntiaj teb Golang, uas tsis tas yuav muaj kev vam khom.

Thaum pib peb sau npe Gitlab Runner.

Peb tau txais tus yuam sij hauv Gitlab web interface.

Tom qab ntawd peb hu rau qhov pib hais kom ua ntawm kab hais kom ua.

Configuring Gitlab Runner hauv dialog hom (Plhaub, Docker, VirtualBox, SSH)

Cov cai ntawm Gitlab Runner yuav ua rau txhua qhov kev cog lus nyob ntawm qhov chaw .gitlab-ci.yml.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Nws pom tau li cas hauv Gitlab hauv web interface. Tom qab txuas GItlab CI, peb muaj tus chij uas qhia tias lub xeev qhov kev tsim yog dab tsi nyob rau tam sim no.

Peb pom tias 4 feeb dhau los ua ib qho kev cog lus uas dhau tag nrho cov kev xeem thiab tsis muaj teeb meem.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Peb tuaj yeem saib cov kev tsim kho kom ntxaws ntxiv. Ntawm no peb pom tias ob lub xeev twb dhau lawm. Kev ntsuas qhov xwm txheej thiab kev xa tawm ntawm qhov chaw.

Yog tias peb nyem rau ntawm ib qho kev tsim tshwj xeeb, yuav muaj console tso zis ntawm cov lus txib uas tau pib ua haujlwm raws li .gitlab-ci.yml.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Nov yog zaj dab neeg ntawm peb cov khoom zoo li cas. Peb pom tias muaj kev sim ua tiav. Thaum cov kev ntsuam xyuas raug xa mus, lawv tsis txav mus rau cov kauj ruam tom ntej thiab cov txheej txheem staging tsis hloov kho.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Peb tau daws teeb meem dab tsi hauv kev teeb tsa thaum peb siv docker? Peb lub kaw lus muaj cov khoom siv thiab peb yuav tsum rov pib dua tsuas yog qee qhov ntawm cov khoom uas tau hloov kho hauv qhov chaw cia khoom, thiab tsis yog tag nrho cov kab ke.

Txhawm rau ua qhov no, peb yuav tsum cais txhua yam mus rau hauv nyias cov folders.

Tom qab peb tau ua qhov no, peb muaj teeb meem nrog qhov tseeb tias Docker-compose tsim nws tus kheej qhov chaw network rau txhua daim nplaub tshev thiab tsis pom cov khoom ntawm nws cov neeg nyob ze.

Kom tau txais ib ncig, peb tsim lub network manually hauv Docker. Hauv Docker-compose nws tau sau tias koj yuav tsum siv lub network zoo li no rau txoj haujlwm no.

Yog li, txhua yam khoom uas pib nrog lub mesh no pom cov khoom hauv lwm qhov ntawm lub cev.

Qhov teeb meem tom ntej no yog kev faib theem ntawm ntau qhov project.

Txij li thaum tag nrho cov no kom zoo nkauj thiab ze li sai tau rau kev tsim khoom, nws yog qhov zoo los siv qhov chaw nres nkoj 80 lossis 443, uas yog siv txhua qhov chaw hauv WEB.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Peb daws qhov no li cas? Peb muab ib qho Gitlab Runner rau txhua qhov haujlwm loj.

Gitlab tso cai rau koj tso ntau qhov kev faib tawm Gitlab Runners, uas tsuas yog ua txhua txoj haujlwm ib los ntawm ib qho hauv kev tsis sib haum xeeb thiab khiav lawv.

Txhawm rau kom tsis txhob muaj teeb meem hauv tsev, peb txwv cov pab pawg ntawm peb cov haujlwm rau ib qho Gitlab Runner, uas tiv thaiv peb cov ntim yam tsis muaj teeb meem.

Peb tau tsiv nginx-proxy mus rau hauv ib tsab ntawv tso tawm cais thiab sau cov phiaj xwm ntawm txhua qhov haujlwm hauv nws.

Peb qhov project muaj ib daim phiaj, thiab cov khoom sib npaug muaj ob peb daim phiaj raws li cov npe ntawm qhov project. Nws tuaj yeem tso npe ntxiv los ntawm cov npe sau npe.

Peb qhov kev thov tuaj ntawm qhov chaw ntawm qhov chaw nres nkoj 80 thiab raug txiav txim siab rau ib pawg ntawm cov thawv uas ua haujlwm rau lub npe no.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Puas muaj lwm yam teeb meem? Qhov no yog dab tsi tag nrho cov ntim tau khiav raws li hauv paus los ntawm lub neej ntawd. Qhov no yog lub hauv paus tsis sib npaug hauv paus host ntawm lub system.

Txawm li cas los xij, yog tias koj nkag mus rau hauv lub thawv, nws yuav yog hauv paus thiab cov ntaub ntawv uas peb tsim hauv lub thawv no tau txais cov cai hauv paus.

Yog tias tus tsim tawm nkag mus rau hauv lub thawv thiab ua qee cov lus txib nyob ntawd uas tsim cov ntaub ntawv, tom qab ntawd tawm hauv lub thawv, tom qab ntawd hauv nws daim ntawv teev npe ua haujlwm nws muaj cov ntaub ntawv uas nws tsis nkag mus.

Qhov no yuav daws tau li cas? Koj tuaj yeem ntxiv cov neeg siv uas yuav nyob hauv lub thawv.

Cov teeb meem dab tsi tshwm sim thaum peb ntxiv tus neeg siv?

Thaum tsim ib tus neeg siv, pawg ID (UID) thiab tus neeg siv ID (GID) feem ntau tsis sib xws.

Txhawm rau daws qhov teeb meem no hauv lub thawv peb siv cov neeg siv nrog ID 1000.

Nyob rau hauv peb cov ntaub ntawv, qhov no coincided nrog lub fact tias yuav luag tag nrho cov developers siv Ubuntu OS. Thiab hauv Ubuntu OS thawj tus neeg siv muaj ID 1000.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Peb puas muaj kev npaj?

Rov nyeem Docker cov ntaub ntawv. Qhov project yog nquag tsim, cov ntaub ntawv hloov pauv. Cov ntaub ntawv uas tau txais ob lossis peb lub hlis dhau los yog maj mam dhau los ua dhau los.

Qee qhov teeb meem uas peb daws tau zoo tau raug daws los ntawm cov txheej txheem.

Kuv yeej xav txav mus los thiab txav mus ncaj qha mus rau orchestration.

Ib qho piv txwv yog Docker's built-in mechanism hu ua Docker Swarm, uas tawm hauv lub thawv. Kuv xav tso ib yam dab tsi hauv kev tsim khoom raws li Docker Swarm thev naus laus zis.

Cov thawv ntim khoom ua rau ua haujlwm nrog cov cav tsis yooj yim. Tam sim no cov cav yog cais. Lawv tawg nyob rau hauv cov thawv. Ib qho ntawm cov haujlwm yog ua kom yooj yim nkag mus rau cov cav los ntawm lub vev xaib interface.

Kev txhim kho thiab kev xeem txheej txheem nrog Docker thiab Gitlab CI

Tau qhov twg los: www.hab.com

Ntxiv ib saib