Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Manaʻo wau e heluhelu ʻoe i ka transcript o ka hōʻike a Alexander Sigachev mai Inventos "Hoʻomohala a me ka hoʻāʻo ʻana me Docker + Gitlab CI"

ʻO ka poʻe e hoʻomaka nei e hoʻokō i ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana ma muli o Docker + Gitlab CI e nīnau pinepine i nā nīnau kumu. Ma hea e hoʻomaka ai? Pehea e hoʻonohonoho ai? Pehea e ho'āʻo ai?

Maikaʻi kēia hōʻike no ka mea ke kamaʻilio nei ma ke ʻano i kūkulu ʻia e pili ana i ka hoʻomohala ʻana a me ke kaʻina hoʻāʻo e hoʻohana ana iā Docker a me Gitlab CI. ʻO ka hōʻike pono'ī mai 2017. Manaʻo wau mai kēia hōʻike hiki iā ʻoe ke hōʻiliʻili i nā kumu kumu, ke ʻano, ka manaʻo, a me ka ʻike o ka hoʻohana.

ʻO wai ka manaʻo, e ʻoluʻolu ma lalo o ka pōpoki.

ʻO Alexander Sigachev koʻu inoa. Hana wau no Inventos. E haʻi aku wau iā ʻoe e pili ana i koʻu ʻike e hoʻohana ana iā Docker a pehea mākou e hoʻokō mālie ai i nā papahana i ka hui.

Ke kumuhana o ka hōʻike: Ke kaʻina hana hoʻomohala me ka hoʻohana ʻana iā Docker a me Gitlab CI.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

ʻO kēia kaʻu kamaʻilio lua e pili ana iā Docker. I ka manawa o ka hōʻike mua, ua hoʻohana mākou iā Docker wale nō ma Development ma nā mīkini hoʻomohala. ʻO ka nui o nā limahana i hoʻohana iā Docker ma kahi o 2-3 mau kānaka. Me ka mālie, ua loaʻa ka ʻike a neʻe iki mākou. loulou i kā mākou hoike mua.

He aha ka mea i loko o kēia hōʻike? E hōʻike mākou i kā mākou ʻike e pili ana i nā rake a mākou i hōʻiliʻili ai, nā pilikia a mākou i hoʻoponopono ai. ʻAʻole nani ia ma nā wahi a pau, akā ua ʻae iā mākou e neʻe.

ʻO kā mākou motto: hoʻopaʻa i nā mea āpau a mākou e paʻa ai.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

He aha nā pilikia a mākou e hoʻoponopono ai?

Ke loaʻa nā hui he nui o ka hui, ʻo ka mea papahana he kumu waiwai kaʻana like. Aia kekahi mau pae i ka huki ʻia ʻana o ka mea papahana mai kahi papahana a hāʻawi ʻia i kekahi papahana no kekahi manawa.

I mea e hoʻomaopopo koke ai ka mea papahana, pono ʻo ia e hoʻoiho i ke code kumu o ka papahana a hoʻomaka i kahi kaiapuni i ka hiki ke hiki, e hiki ai iā ia ke holomua i ka hoʻoponopono ʻana i nā pilikia o kēia papahana.

ʻO ka mea maʻamau, inā ʻoe e hoʻomaka mai ka ʻōpala, ʻaʻohe palapala liʻiliʻi i ka papahana. ʻO ka poʻe kahiko wale nō ka ʻike e pili ana i ka hoʻonohonoho ʻana. Hoʻonohonoho nā limahana i kā lākou wahi hana i hoʻokahi a ʻelua paha lā. No ka wikiwiki i kēia, ua hoʻohana mākou iā Docker.

ʻO ke kumu aʻe ʻo ka hoʻonohonoho maʻamau o nā hoʻonohonoho ma Development. I koʻu ʻike, lawe mau nā mea hoʻomohala i ka hana. I kēlā me kēia hihia ʻelima, hoʻokomo ʻia kahi kikowaena maʻamau, no ka laʻana vasya.dev. Noho ʻo Petya koʻu hoa noho ma hope oʻu, nona ka ʻāina ʻo petiya.dev. Hoʻokumu lākou i kahi pūnaewele a i ʻole kekahi mea ʻōnaehana me ka hoʻohana ʻana i kēia inoa inoa.

Ke ulu ka ʻōnaehana a hoʻomaka e hoʻokomo ʻia kēia mau inoa kikowaena i ka hoʻonohonoho ʻana, kū mai kahi paio i nā kaiapuni Development a kākau hou ʻia ke ala o ka pūnaewele.

Pēlā nō me nā hoʻonohonoho waihona. ʻAʻole pilikia kekahi poʻe i ka palekana a hana pū me kahi ʻōlelo huna huna. I ka pae hoʻonohonoho, noi aku ʻo MySQL i kekahi no ka ʻōlelo huna a ua lilo ka ʻōlelo huna i 123. ʻO ka manawa pinepine e loli mau ana ka config database ma muli o ka hana a ka mea hoʻomohala. Ua hoʻoponopono kekahi, ʻaʻole i hoʻoponopono kekahi i ka config. Aia nā hoʻopunipuni i ka wā i hoʻokomo ai mākou i kahi hoʻonohonoho hoʻāʻo i loko .gitignore a pono kēlā me kēia mea hoʻomohala e hoʻokomo i ka waihona. Ua paʻakikī kēia i ka hoʻomaka ʻana. Ma waena o nā mea ʻē aʻe, pono ʻoe e hoʻomanaʻo e pili ana i ka waihona. Pono e hoʻomaka ka waihona, pono e hoʻopaʻa inoa i kahi hua'ōlelo, pono e hoʻopaʻa inoa i kahi mea hoʻohana, pono e hana i kahi hōʻailona, ​​a pēlā aku.

ʻO kekahi pilikia, ʻo nā ʻano like ʻole o nā hale waihona puke. Hana pinepine ka mea hoʻomohala i nā papahana like ʻole. Aia kahi papahana Legacy, i hoʻomaka i ʻelima mau makahiki i hala (mai 2017 - memo a ka mea hoʻoponopono). I ka hoʻomaka ʻana ua hoʻomaka mākou me MySQL 5.5. Aia kekahi mau papahana hou kahi e ho'āʻo nei mākou e hoʻokō i nā mana hou o MySQL, no ka laʻana 5.7 a i ʻole (ma 2017 - memo a ka mea hoʻoponopono)

ʻO ka mea e hana pū me MySQL ʻike i kēia mau hale waihona puke e lawe i nā hilinaʻi. He pilikia loa ka holo ʻana i nā waihona ʻikepili 2. Ma ka liʻiliʻi loa, pilikia ka hoʻopili ʻana i nā mea kūʻai aku kahiko i ka waihona hou. ʻO kēia ka mea e ulu ai nā pilikia.

ʻO ka pilikia aʻe ke hana ka mea hoʻomohala ma kahi mīkini kūloko, hoʻohana ʻo ia i nā kumuwaiwai kūloko, nā faila kūloko, RAM kūloko. ʻO nā pilina a pau i ka manawa o ka hoʻomohala ʻana i kahi hoʻonā i nā pilikia e hana ʻia i loko o ke ʻano o ka hana ʻana ma ka mīkini hoʻokahi. ʻO kahi laʻana inā loaʻa iā mākou nā kikowaena backend ma Production 3, a mālama ka mea hoʻomohala i nā faila i ka papa kuhikuhi kumu a mai laila mai ka nginx i nā faila e pane i ka noi. Ke komo ia code i Production, ua ʻike ʻia aia ka faila ma kekahi o nā kikowaena 3.

Ke ulu nei ke kuhikuhi o nā microservices i kēia manawa. Ke hoʻokaʻawale mākou i kā mākou mau noi nui i kekahi mau mea liʻiliʻi e pili ana kekahi i kekahi. Hāʻawi kēia iā ʻoe e koho i nā ʻenehana no kahi waihona hana kikoʻī. ʻAe kēia iā ʻoe e hoʻokaʻawale i ka hana a me ka wahi o ke kuleana ma waena o nā mea hoʻomohala.

ʻO kahi mea hoʻomohala mua, e hoʻomohala ana ma JS, ʻaʻohe mana o ka hope. ʻO ka mea hoʻomohala hope, hoʻomohala, i kā mākou hihia, ʻo Ruby on Rails a ʻaʻole ia e hoʻopilikia iā Frondend. Hana ʻia ka pilina me ka API.

Ma ke ʻano he bonus, me ka hoʻohana ʻana iā Docker ua hiki iā mākou ke hana hou i nā kumuwaiwai ma Staging. ʻO kēlā me kēia papahana, ma muli o kāna mau kikoʻī, koi ʻia kekahi mau hoʻonohonoho. Ma ke kino, pono e hoʻokaʻawale i kahi kikowaena virtual a hoʻonohonoho kaʻawale iā lākou, a i ʻole e hoʻokaʻawale i kekahi ʻano ʻano ʻano ʻano like ʻole a hiki i nā papahana ke hoʻoikaika i kekahi i kekahi, ma muli o ke ʻano o nā hale waihona puke.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Mea hana. He aha kā mākou e hoʻohana ai?

  • Docker ponoi. Hōʻike ka Dockerfile i nā hilinaʻi o kahi noi hoʻokahi.
  • ʻO Docker-compose kahi puʻupuʻu e hui pū ai i kekahi o kā mākou noi Docker.
  • Hoʻohana mākou iā GitLab e mālama i ka code kumu.
  • Hoʻohana mākou iā GitLab-CI no ka hoʻohui pūnaewele.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

ʻElua ʻāpana o ka hōʻike.

E haʻi ka ʻāpana mua iā ʻoe pehea e holo ai iā Docker ma nā mīkini o nā mea hoʻomohala.

E kamaʻilio ka ʻaoʻao ʻelua e pili ana i ka launa pū ʻana me GitLab, pehea mākou e holo ai i nā hoʻokolohua a pehea mākou e holo ai i Staging.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

ʻO Docker kahi ʻenehana e hiki ai (e hoʻohana ana i kahi ala hoʻolaha) e wehewehe i nā mea pono. ʻO kēia kahi laʻana Dockerfile. Ma ʻaneʻi ke haʻi aku nei mākou he hoʻoilina mai ke kiʻi Docker mana o Ruby:2.3.0. Loaʻa iā Ruby version 2.3 i hoʻokomo ʻia. Hoʻokomo mākou i nā hale waihona puke pono a me NodeJS. Hōʻike mākou e hana mākou i kahi papa kuhikuhi /app. Hāʻawi mākou i ka papa kuhikuhi app e like me ka papa kuhikuhi hana. Ma kēia papa kuhikuhi mākou e kau i ka Gemfile haʻahaʻa i koi ʻia a me Gemfile.lock. A laila kūkulu mākou i nā papahana e hoʻokomo i kēia kiʻi hilinaʻi. Hōʻike mākou e mākaukau ka pahu e hoʻolohe ma waho o ke awa 3000. ʻO ke kauoha hope ke kauoha e hoʻomaka pololei i kā mākou noi. Inā mākou e hoʻokō i ke kauoha holo papahana, e hoʻāʻo ka noi e holo a holo i ke kauoha i kuhikuhi ʻia.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

He laʻana liʻiliʻi kēia o kahi faila docker-compose. I kēia hihia, hōʻike mākou aia kahi pilina ma waena o nā pahu ʻelua. Aia pololei kēia i ka lawelawe waihona a me ka lawelawe pūnaewele. ʻO kā mākou mau noi pūnaewele i ka nui o nā hihia e koi i kekahi ʻano waihona ma ke ʻano he hope no ka mālama ʻana i ka ʻikepili. No ka mea, hoʻohana mākou i MySQL, aia ka laʻana me MySQL - akā ʻaʻohe mea e pale iā mākou mai ka hoʻohana ʻana i kekahi waihona ʻē aʻe (PostgreSQL, Redis).

Lawe mākou i ke kiʻi MySQL 5.7.14 me ka ʻole o nā loli mai ke kumu kumu mai ka Docker hub. ʻOhi mākou i ke kiʻi i kuleana no kā mākou noi pūnaewele mai ka papa kuhikuhi o kēia manawa. I ka hoʻomaka mua ʻana, ʻohi ʻo ia i kiʻi no mākou. A laila holo ia i ke kauoha a mākou e hoʻokō nei. Inā mākou e hoʻi, e ʻike mākou ua wehewehe ʻia ke kauoha hoʻomaka ma o Puma. ʻO Puma kahi lawelawe i kākau ʻia ma Ruby. I ka hihia ʻelua, hoʻopau mākou. Hiki ke hoʻopaʻa ʻia kēia kauoha ma muli o kā mākou pono a i ʻole nā ​​​​hana.

Hōʻike pū mākou he pono mākou e hoʻouna i ke awa ma kā mākou mīkini hoʻokipa hoʻomohala mai 3000 a 3000 pahu pahu. Hana ʻia kēia me ka hoʻohana ʻana i nā iptables a me kāna hana ponoʻī, i hoʻopili pololei ʻia ma Docker.

Hiki i ka mea hoʻomohala, e like me ka wā ma mua, ke komo i kekahi helu IP i loaʻa, no ka laʻana, 127.0.0.1 IP kūloko a i waho paha o ka mīkini.

'Ōlelo ka laina hope e pili ana ka ipu pūnaewele i ka ipu db. Ke kāhea mākou i ka pahu pūnaewele e hoʻomaka, e hoʻomaka mua ʻo docker-compose i ka waihona no mākou. Aia ma ka hoʻomaka ʻana o ka waihona (ʻoiaʻiʻo, ma hope o ka hoʻomaka ʻana o ka ipu! ʻAʻole kēia e hōʻoiaʻiʻo i ka mākaukau o ka waihona) e hoʻomaka ia i kā mākou noi, kā mākou backend.

ʻAe kēia iā mākou e pale aku i nā hewa i ka wā i pau ʻole ai ka waihona a hiki iā mākou ke mālama i nā kumuwaiwai ke hoʻōki mākou i ka pahu waihona, a laila hoʻokuʻu i nā kumuwaiwai no nā papahana ʻē aʻe.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

He aha ka hoʻohana ʻana i ka dockerization database ma kahi papahana e hāʻawi iā mākou? Hoʻopaʻa mākou i ka mana MySQL no nā mea hoʻomohala āpau. ʻAe kēia iā ʻoe e pale aku i kekahi mau hewa e hiki mai ana i ka wā e ʻokoʻa ai nā mana, i ka wā e loli ai ka syntax, ka hoʻonohonoho, a me nā hoʻonohonoho paʻamau. Hāʻawi kēia iā ʻoe e kuhikuhi i kahi inoa host maʻamau no ka waihona, login, password. Ke neʻe nei mākou mai ka zoo o nā inoa a me nā paio i nā faila config i noho ma mua.

Loaʻa iā mākou ka manawa e hoʻohana ai i kahi hoʻonohonoho maikaʻi loa no ke kaiapuni Hoʻomohala, e ʻokoʻa ia mai ka mea paʻamau. Hoʻonohonoho ʻia ʻo MySQL e ka paʻamau no nā mīkini nāwaliwali a haʻahaʻa loa kāna hana ma waho o ka pahu.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Hāʻawi ʻo Docker iā ʻoe e hoʻohana i ka Python, Ruby, NodeJS, PHP unuhi ʻōlelo o ka mana makemake. Hoʻopau mākou i ka pono e hoʻohana i kekahi ʻano mana mana. Ma mua, ua hoʻohana ʻia kahi pūʻolo rpm no Ruby, i ʻae iā ʻoe e hoʻololi i ka mana ma muli o ka papahana. Mahalo i ka pahu Docker, hiki iā ʻoe ke neʻe mālie i ka code a hoʻololi iā ia me nā mea hilinaʻi. ʻAʻohe pilikia o ka hoʻomaopopo ʻana i ka mana o ka unuhi ʻōlelo a me ke code. No ka hoʻohou i ka mana, pono ʻoe e hoʻohaʻahaʻa i ka ipu kahiko a hoʻokiʻekiʻe i ka ipu hou. Inā hewa kekahi mea, hiki iā mākou ke hoʻohaʻahaʻa i ka ipu hou, hoʻokiʻekiʻe i ka ipu kahiko.

Ma hope o ke kūkulu ʻana i ke kiʻi, e like nā pahu i loko o ka Development a me Production. Heʻoiaʻiʻo kēia no nā hoʻonohonoho nui.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI Ma Frontend hoʻohana mākou iā JavaScipt a me NodeJS.

I kēia manawa ua loaʻa kā mākou papahana hope loa ma ReacJS. Hoʻokumu ka mea hoʻomohala i nā mea a pau i loko o ka pahu a hoʻomohala me ka hoʻohana ʻana i ka hoʻouka hou.

A laila, hoʻomaka ka hana o ka hui ʻana iā JavaScipt a hoʻouna ʻia ke code statically assembled ma o nginx, mālama i nā kumuwaiwai.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Ma ʻaneʻi ua hāʻawi wau i kahi kiʻi o kā mākou papahana hou loa.

He aha nā pilikia āu i hoʻoponopono ai? Pono mākou e kūkulu i kahi ʻōnaehana e launa pū ai nā polokalamu kelepona. Loaʻa iā lākou ka ʻikepili. ʻO kekahi o nā mea hiki ke hoʻouna i nā leka hoʻolaha i kēia hāmeʻa.

He aha kā mākou i hana ai no kēia?

Ua hoʻokaʻawale mākou i ka noi i nā ʻāpana aʻe: kahi ʻāpana admin ma JS, kahi backend e hana ana ma o kahi interface REST ma lalo o Ruby on Rails. Hoʻopili ʻo Backend me ka waihona. Hāʻawi ʻia ka hopena i ka mea kūʻai aku. Hoʻopili ka panel admin me ka hope a me ka waihona ma o kahi interface REST.

Pono mākou e hoʻouna i nā leka hoʻomaopopo Push. Ma mua o kēia, ua loaʻa iā mākou kahi papahana kahi i hoʻokō ʻia ai kahi mīkini i kuleana no ka hāʻawi ʻana i nā leka hoʻomaopopo i nā platform mobile.

Ua hoʻomohala mākou i kēia ʻano hana: ʻo ka mea hoʻohana mai ka polokalamu kele pūnaewele e launa pū me ka admin panel, ka admin panel e launa pū me ka backend, ʻo ka hana ka hoʻouna ʻana i nā leka hoʻomaopopo Push.

Hoʻopili ʻia nā leka hoʻolaha me kahi mea ʻē aʻe i hoʻokō ʻia ma NodeJS.

Kūkulu ʻia nā pila a hoʻouna ʻia nā leka e like me kā lākou hana ponoʻī.

Ua huki ʻia nā ʻikepili ʻelua ma ʻaneʻi. I kēia manawa, me ka hoʻohana ʻana iā Docker, hoʻohana mākou i nā ʻikepili kūʻokoʻa kūʻokoʻa 2 i pili ʻole kekahi i kekahi. Ma waho aʻe o ka loaʻa ʻana o kahi pūnaewele virtual maʻamau, a mālama ʻia nā ʻikepili kino i nā papa kuhikuhi like ʻole ma ka mīkini o ka mea hoʻomohala.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

ʻO ka mea like akā ma nā helu. He mea nui ka hoʻohana hou ʻana i ke code ma ʻaneʻi.

Inā ma mua mākou i kamaʻilio e pili ana i ka hoʻohana hou ʻana i ke code ma ke ʻano o nā hale waihona puke, a laila ma kēia hiʻohiʻona kā mākou lawelawe, e pane ana i nā leka hoʻomaopopo Push, hoʻohana hou ʻia ma ke ʻano he kikowaena piha. Hāʻawi ia i kahi API. A hui pū kā mākou kūkulu hou me ia.

I kēlā manawa ke hoʻohana nei mākou i ka mana 4 o NodeJS. I kēia manawa (i ka makahiki 2017 - memo a ka mea hoʻoponopono) i kā mākou hoʻomohala hou e hoʻohana nei mākou i ka mana 7 o NodeJS. ʻAʻohe pilikia i nā mea hou e hoʻokomo i nā mana hou o nā hale waihona puke.

Inā pono, hiki iā ʻoe ke refactor a hoʻokiʻekiʻe i ka mana NodeJS o ka lawelawe hoʻolaha Push.

A inā hiki iā mākou ke mālama i ka pilina API, a laila hiki ke hoʻololi iā ia me nā papahana ʻē aʻe i hoʻohana mua ʻia.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

He aha kāu e pono ai e hoʻohui iā Docker? Hoʻohui mākou i kahi Dockerfile i kā mākou waihona, e wehewehe ana i nā hilinaʻi pono. Ma kēia hiʻohiʻona, hoʻokaʻawale ʻia nā ʻāpana me ke kūpono. ʻO kēia ka pahu liʻiliʻi no ka mea hoʻomohala hope.

I ka hana ʻana i kahi papahana hou, hana mākou i kahi Dockerfile a wehewehe i ka ʻōnaehana kaiaola pono (Python, Ruby, NodeJS). I ka docker-compose, wehewehe ia i ka hilinaʻi pono - ka waihona. Hōʻike mākou he pono mākou i kahi waihona o kēlā me kēia ʻano, e mālama i ka ʻikepili ma laila a ma laila.

Hoʻohana mākou i kahi pahu ʻekolu me ka nginx e lawelawe i ka ʻike static. Hiki ke hoʻouka i nā kiʻi. Hoʻokomo ka backend iā lākou i kahi leo i hoʻomākaukau mua ʻia, i kau ʻia i loko o kahi pahu me ka nginx, e hāʻawi ana i ka ʻikepili static.

No ka mālama ʻana i ka hoʻonohonoho nginx a me mysql, ua hoʻohui mākou i kahi waihona Docker kahi e mālama ai mākou i nā configs pono. Ke hana ka mea hoʻomohala i kahi clone git o kahi waihona ma kāna mīkini, ua mākaukau kāna papahana no ka hoʻomohala kūloko. ʻAʻohe nīnau e pili ana i ke awa a i ʻole nā ​​hoʻonohonoho e hoʻopili ai.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

A laila loaʻa iā mākou kekahi mau mea: admin, info-API, push notifications.

I mea e hoʻomaka ai i kēia mau mea a pau, ua hana mākou i kahi waihona i kapa ʻia ʻo dockerized-app. Ke hoʻohana nei mākou i nā waihona he nui no kēlā me kēia ʻāpana. He ʻokoʻa wale nō lākou - ma GitLab ua like ia me kahi waihona, akā ma ka mīkini o ka mea hoʻomohala ua like ia me kahi waihona no kahi papahana kikoʻī. Hoʻokahi pae ma lalo nā mea e hoʻohui ʻia.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

He laʻana kēia o nā mea o dockerized-app. Hoʻonoho mākou i kahi papa kuhikuhi Docker ma ʻaneʻi, kahi mākou e hoʻopiha ai i nā hoʻonohonoho pono no ka hoʻopili ʻana o nā mea āpau. Aia kahi README.md e wehewehe pōkole ana pehea e hoʻomaka ai i ka papahana.

Maanei ua hoʻohana mākou i ʻelua faila docker-compose. Hana ʻia kēia i mea e hiki ai ke hoʻomaka i nā pae. Ke hana ka mea hoʻomohala me ka kernel, ʻaʻole pono ʻo ia i nā leka hoʻomaopopo Push, hoʻomaka wale ʻo ia i ka faila docker-compose a, no laila, mālama ʻia nā kumuwaiwai.

Inā pono ka hoʻohui ʻana me nā leka hoʻomaopopo Push, a laila hoʻomaka ʻia ʻo docker-compose.yaml a me docker-compose-push.yaml.

No ka mea aia ʻo docker-compose.yaml a me docker-compose-push.yaml i loko o ka waihona, hoʻokumu ʻia kahi pūnaewele virtual hoʻokahi.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

ʻO ka wehewehe ʻana o nā ʻāpana. He faila ʻoi aku kēia i kuleana no ka ʻohi ʻana i nā ʻāpana. He aha ka mea kupaianaha maanei? Eia mākou e hoʻolauna i ka mea kaulike.

He kiʻi Docker mākaukau kēia e holo ana i ka nginx a me kahi noi e hoʻolohe ana i ke kumu Docker. ʻO Dynamic, ke hoʻohuli ʻia a hoʻopau ʻia nā pahu, ua hana hou ʻia ka config nginx. Māhele mākou i ka lawelawe ʻana i nā ʻāpana me ka hoʻohana ʻana i nā inoa kikowaena pae ʻekolu.

No ke kaiapuni Hoʻomohala hoʻohana mākou i ka .dev domain - api.informer.dev. Loaʻa nā noi me kahi kikowaena .dev ma ka mīkini kūloko o ka mea hoʻomohala.

A laila hoʻololi ʻia nā configs i kēlā me kēia papahana a hoʻomaka pū ʻia nā papahana āpau i ka manawa like.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Inā mākou e hōʻike kiʻi ʻia, ʻike ʻia ʻo ka mea kūʻai aku ʻo kā mākou polokalamu kele pūnaewele a i ʻole kekahi ʻano mea hana e noi ai mākou i ka mea kaulike.

Hoʻoholo ka mea kaulike i ka pahu e pono ai ke komo ma muli o ka inoa domain.

Hiki i kēia ke nginx, e hāʻawi iā JS i ka papa admin. Hiki ke hana ʻia kēia e ka nginx, e hāʻawi ana i ka API, a i ʻole nā ​​faila static, i hāʻawi ʻia e nginx ma ke ʻano o ka hoʻouka ʻana i nā kiʻi.

Hōʻike ke kiʻikuhi e pili ana nā ipu i kahi pūnaewele virtual a hūnā ʻia ma hope o kahi proxy.

Ma ka mīkini o ka mea hoʻomohala, hiki iā ʻoe ke komo i ka ipu me ka ʻike i ka IP, akā ma ke kumu ʻaʻole mākou e hoʻohana i kēia. ʻAʻohe pono no ka hoʻopili pololei ʻana.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

He aha kaʻu hiʻohiʻona e nānā ai e dockerize i kaʻu noi? I koʻu manaʻo, he kumu hoʻohālike maikaʻi ke kiʻi docker mana no MySQL.

He paʻakikī loa. Nui nā mana. Akā ʻo kāna hana e hiki ai iā ʻoe ke uhi i nā pono he nui e kū mai i ke kaʻina o ka hoʻomohala hou. Inā ʻoe e lawe i ka manawa a hoʻomaopopo i ka pili ʻana o nā mea āpau, a laila manaʻo wau ʻaʻole ʻoe e loaʻa nā pilikia i ka hoʻokō ʻana iā ʻoe iho.

Aia ma Hub.docker.com nā loulou i github.com, kahi i hāʻawi pololei ʻia ai ka ʻikepili maka kahi e hiki ai iā ʻoe ke kūkulu i kahi kiʻi iā ʻoe iho.

Aia i loko o kēia waihona kahi script docker-endpoint.sh, nona ke kuleana no ka hoʻomaka mua ʻana a me ka hana hou ʻana o ka hoʻomaka ʻana o ka noi.

Eia kekahi ma kēia laʻana aia ka hiki ke hoʻonohonoho i ka hoʻohana ʻana i nā ʻano hoʻololi kaiapuni. Ma ka wehewehe ʻana i kahi hoʻololi kaiapuni i ka wā e holo ai i kahi pahu hoʻokahi a i ʻole ma o docker-compose, hiki iā mākou ke ʻōlelo pono mākou e hoʻonohonoho i kahi huaʻōlelo ʻole no ka docker no ke aʻa ma MySQL a i ʻole nā ​​​​mea a mākou e makemake ai.

Aia kahi koho e hana i kahi ʻōlelo huna. 'Ōlelo mākou he mea hoʻohana mākou, pono mākou e hoʻonohonoho i kahi hua'ōlelo no ka mea hoʻohana, a pono mākou e hana i kahi waihona.

I kā mākou papahana, ua hoʻohui iki mākou i ka Dockerfile, nona ke kuleana no ka hoʻomaka. Ma laila mākou i hoʻoponopono ai i kā mākou pono e hoʻonui i nā kuleana mea hoʻohana i hoʻohana ʻia e ka noi. ʻO kēia ka mea hiki ke hana wale i kahi waihona mai ka console application i ka wā e hiki mai ana. Loaʻa i nā noi Ruby nā kauoha no ka hana ʻana, hoʻololi a me ka holoi ʻana i nā ʻikepili.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

He laʻana kēia o ke ʻano o kahi mana kikoʻī o MySQL ma github.com. Hiki iā ʻoe ke wehe i ka Dockerfile a ʻike i ke ʻano o ka hoʻonohonoho ʻana ma laila.

docker-endpoint.sh script kuleana no ka helu komo. I ka hoʻomaka mua ʻana, pono kekahi mau hana hoʻomākaukau a hoʻokomo ʻia kēia mau hana a pau i ka palapala hoʻomaka.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

E neʻe kākou i ka ʻāpana ʻelua.

Ua hoʻololi mākou i gitlab e mālama i nā code kumu. He ʻōnaehana maikaʻi loa kēia i loaʻa kahi ʻike maka.

ʻO kekahi o nā ʻāpana Gitlab ʻo Gitlab CI. Hāʻawi ia iā ʻoe e wehewehe i ke ʻano o nā kauoha e hoʻohana ʻia e hoʻonohonoho i kahi ʻōnaehana hāʻawi code a i ʻole holo i ka hoʻāʻo ʻana.

Hōʻike ma Gitlab CI 2 https://goo.gl/uohKjI — ʻO ka hōʻike mai ka hui ʻo Ruby Russia he kikoʻī loa a he mea hoihoi paha iā ʻoe.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

I kēia manawa e nānā mākou i nā mea e pono ai e hoʻāla iā Gitlab CI. No ka hoʻomaka ʻana iā Gitlab CI, pono mākou e kau i ka faila .gitlab-ci.yml i ke kumu o ka papahana.

Maanei mākou e wehewehe nei makemake mākou e hana i kahi kaʻina o nā mokuʻāina e like me ka hoʻāʻo, hoʻolālā.

Hoʻokō mākou i nā palapala e kāhea pololei i ka docker-compose build o kā mākou noi. He laʻana kēia o ke kua hope wale nō.

A laila ʻōlelo mākou he mea pono e holo i nā neʻe e hoʻololi i ka waihona a holo i nā hoʻokolohua.

Inā hoʻokō pololei ʻia nā palapala a ʻaʻole hoʻihoʻi i kahi code hewa, a laila hele ka ʻōnaehana i ka lua o ka hoʻolaha.

Hoʻohana ʻia ka pae hoʻolaha i kēia manawa no ka hoʻokūkū. ʻAʻole mākou i hoʻonohonoho i ka hoʻomaka hou ʻana me ka wā hoʻomaha.

Hoʻopau ikaika mākou i nā pahu āpau, a laila hoʻāla hou mākou i nā pahu āpau, i hōʻiliʻili ʻia ma ka pae mua i ka wā hoʻāʻo.

E holo kāua i ka neʻe ʻana o ka waihona i kākau ʻia e nā mea hoʻomohala no ke kaiapuni hoʻololi o kēia manawa.

Aia kahi leka e hoʻopili wale ʻia kēia i ka lālā kumu.

ʻAʻole hana ke hoʻololi i nā lālā ʻē aʻe.

Hiki ke hoʻonohonoho i nā rollouts ma nā lālā.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

No ka hoʻonohonoho hou ʻana i kēia, pono mākou e hoʻokomo iā Gitlab Runner.

Ua kākau ʻia kēia mea hoʻohana ma Golang. He waihona hoʻokahi ia e like me ka mea maʻamau i ka honua Golang, ʻaʻole ia e koi i nā mea hilinaʻi.

I ka hoʻomaka ʻana, hoʻopaʻa inoa mākou iā Gitlab Runner.

Loaʻa iā mākou ke kī ma ka pūnaewele pūnaewele Gitlab.

A laila kāhea mākou i ke kauoha hoʻomaka ma ka laina kauoha.

Ka hoʻonohonoho ʻana iā Gitlab Runner ma ke ʻano kamaʻilio (Shell, Docker, VirtualBox, SSH)

E hoʻokō ka code ma Gitlab Runner i kēlā me kēia hana ma muli o ka hoʻonohonoho .gitlab-ci.yml.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Pehea kona ʻike maka ʻana ma Gitlab ma ka pūnaewele pūnaewele. Ma hope o ka hoʻopili ʻana iā GItlab CI, loaʻa iā mākou kahi hae e hōʻike ana i ke ʻano o ke kūkulu ʻana i kēia manawa.

ʻIke mākou he 4 mau minuke i hala aku nei ua hana ʻia kahi hana i hala i nā hoʻāʻo āpau a ʻaʻole i pilikia.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Hiki iā mākou ke nānā i nā kūkulu i nā kikoʻī. Maanei ke ike nei kakou ua hala na mokuaina elua. Ke kūlana ho'āʻo a me ke kūlana hoʻolālā ma ka hoʻolālā.

Inā mākou e kaomi ma luna o kahi kūkulu kikoʻī, e loaʻa ka console output o nā kauoha i hoʻokuʻu ʻia i ke kaʻina hana e like me .gitlab-ci.yml.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

ʻO kēia ke ʻano o ka moʻolelo o kā mākou huahana. ʻIke mākou ua loaʻa nā hoʻāʻo kūleʻa. Ke waiho ʻia nā hoʻokolohua, ʻaʻole lākou e neʻe i ka pae aʻe a ʻaʻole hōʻano hou ʻia ke code staging.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

He aha nā pilikia i hoʻoponopono ai mākou i ka hoʻokō ʻana i ka docker? He mau ʻāpana kā mākou ʻōnaehana a pono mākou e hoʻomaka hou i kekahi o nā mea i hoʻonui ʻia i loko o ka waihona, ʻaʻole ka ʻōnaehana holoʻokoʻa.

No ka hana ʻana i kēia, pono mākou e hoʻokaʻawale i nā mea āpau i nā waihona ʻokoʻa.

Ma hope o kā mākou hana ʻana i kēia, ua pilikia mākou i ka hana ʻana o Docker-compose i kāna kikowaena pūnaewele no kēlā me kēia waihona a ʻaʻole ʻike i nā ʻāpana o kona hoalauna.

No ka hele a puni, hana mākou i ka pūnaewele me ka lima ma Docker. Ma Docker-compose ua kākau ʻia e hoʻohana ʻoe i kahi pūnaewele no kēia papahana.

No laila, ʻike kēlā me kēia ʻāpana e hoʻomaka me kēia mesh i nā ʻāpana i nā ʻāpana ʻē aʻe o ka ʻōnaehana.

ʻO ka pilikia hou aʻe, ʻo ka hoʻokaʻawale ʻana i ke kahua ma waena o kekahi mau papahana.

No ka mea no kēia mau mea a pau e nānā nani a kokoke loa i ka hana ʻana, maikaʻi ke hoʻohana i ka port 80 a i ʻole 443, i hoʻohana ʻia ma nā wahi āpau o ka WEB.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Pehea mākou i hoʻoponopono ai i kēia? Ua hāʻawi mākou i hoʻokahi Gitlab Runner i nā papahana nui āpau.

Hāʻawi ʻo Gitlab iā ʻoe e hoʻolauna i kekahi mau Gitlab Runners i hāʻawi ʻia, e lawe wale i nā hana āpau i kēlā me kēia ma kahi ʻano haunaele a holo iā lākou.

I mea e pale aku ai i nā pilikia o ka hale, ua kaupalena mākou i ka hui o kā mākou papahana i hoʻokahi Gitlab Runner, nāna e hoʻokō i kā mākou mau puke me ka pilikia ʻole.

Ua hoʻoneʻe mākou i ka nginx-proxy i kahi palapala hoʻolaha ʻokoʻa a kākau i nā grids o nā papahana āpau i loko.

Loaʻa i kā mākou papahana hoʻokahi pahu, a ʻo ka mea kaulike he mau mākia ma muli o nā inoa papahana. Hiki iā ia ke hoʻololi hou aku ma nā inoa kikowaena.

Loaʻa kā mākou mau noi ma ke kikowaena ma ke awa 80 a ua hoʻoholo ʻia i kahi hui o nā ipu e lawelawe nei i kēia kikowaena.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

He aha nā pilikia ʻē aʻe ma laila? ʻO kēia ka mea e holo ai nā ipu a pau ma ke ʻano he kumu. ʻO kēia ke kumu kumu ʻole like ʻole o ka ʻōnaehana.

Eia naʻe, inā ʻoe e hoʻokomo i ka ipu, he aʻa ia a ʻo ka faila a mākou e hana ai i loko o kēia ipu e loaʻa i nā kuleana kumu.

Inā hoʻokomo ka mea hoʻomohala i ka ipu a hana i kekahi mau kauoha ma laila e hana ai i nā faila, a laila haʻalele i ka ipu, a laila ma kāna papa kuhikuhi hana he faila i loaʻa ʻole iā ia.

Pehea e hoʻoholo ai i kēia? Hiki iā ʻoe ke hoʻohui i nā mea hoʻohana i loko o ka ipu.

He aha nā pilikia i hiki ke hoʻohui i ka mea hoʻohana?

I ka hana ʻana i kahi mea hoʻohana, ʻaʻole kūlike ka ID hui (UID) a me ka ID mea hoʻohana (GID).

No ka hoʻoponopono i kēia pilikia i loko o ka pahu, hoʻohana mākou i nā mea hoʻohana me ka ID 1000.

I kā mākou hihia, ua like kēia me ka ʻoiaʻiʻo e hoʻohana nā mea hoʻomohala āpau i ka Ubuntu OS. A ma Ubuntu OS ka mea hoʻohana mua loaʻa iā ID 1000.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Loaʻa iā mākou nā hoʻolālā?

E heluhelu hou i ka palapala Docker. Ke ulu ikaika nei ka papahana, ke loli nei nā palapala. ʻO ka ʻikepili i loaʻa i ʻelua a ʻekolu mau mahina i hala aku nei ke hele mālie nei.

ʻO kekahi o nā pilikia a mākou i hoʻoponopono ai ua hoʻoponopono ʻia paha e nā ala maʻamau.

Makemake au e neʻe a neʻe pololei i ka hoʻokani pila.

ʻO kekahi hiʻohiʻona ʻo ka hana i kūkulu ʻia ʻo Docker i kapa ʻia ʻo Docker Swarm, i puka mai i waho o ka pahu. Makemake wau e hoʻomaka i kahi mea i ka hana e pili ana i ka ʻenehana Docker Swarm.

He mea maʻalahi ka hana ʻana me nā lāʻau. I kēia manawa ua kaʻawale nā ​​lāʻau. Hoʻopuehu ʻia lākou i loko o nā pahu. ʻO kekahi o nā hana, ʻo ia ke komo maʻalahi i nā lāʻau ma o kahi kikowaena pūnaewele.

Ke kaʻina hana hoʻomohala a me ka hoʻāʻo ʻana me Docker a me Gitlab CI

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka