Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ман тавсия медиҳам, ки стенограммаи гузориши Александр Сигачевро аз Inventos "Раванди таҳия ва озмоиш бо Docker + Gitlab CI" хонед.

Онҳое, ки нав ба татбиқи раванди таҳия ва санҷиш дар асоси Docker + Gitlab CI шурӯъ мекунанд, аксар вақт саволҳои асосиро медиҳанд. Аз куҷо сар кардан? Чӣ тавр ташкил кардан? Чӣ тавр озмоиш?

Ин гузориш хуб аст, зеро он ба таври сохторӣ дар бораи раванди таҳия ва озмоиш бо истифода аз Docker ва Gitlab CI сӯҳбат мекунад. Худи гузориш аз соли 2017 аст. Ман фикр мекунам, ки аз ин гузориш шумо метавонед асосҳо, методология, идея ва таҷрибаи истифодаро ба даст оред.

Барои ҳар касе, ки манфиатдор аст, лутфан ба гурба нигаред.

Номи ман Александр Сигачев аст. Ман дар Inventos кор мекунам. Ман ба шумо дар бораи таҷрибаи худ бо истифодаи Docker нақл мекунам ва чӣ гуна мо онро тадриҷан дар лоиҳаҳои ширкат татбиқ мекунем.

Мавзӯи гузориш: Раванди таҳия бо истифода аз Docker ва Gitlab CI.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ин дуюмин сӯҳбати ман дар бораи Docker аст. Дар замони гузориши аввал, мо Docker-ро танҳо дар таҳияи мошинҳои таҳиякунанда истифода кардем. Шумораи кормандоне, ки Docker-ро истифода мебаранд, тақрибан 2-3 нафар буд. Охиста-охиста тачриба андухт ва каме пеш рафтем. Истинод ба мо гузориши аввал.

Дар ин гузориш чӣ хоҳад буд? Мо дар бораи тачрибаамон мубодила мекунем, ки кадом ракехо чамъ кардем, кадом проблемахоро хал кардем. Он дар ҳама ҷо зебо набуд, аммо он ба мо имкон дод, ки пеш равем.

Шиори мо: ҳама чизеро, ки ба дасти мо мерасад, докер кунед.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Мо кадом мушкилотро ҳал мекунем?

Вақте ки ширкат якчанд даста дорад, барномасоз манбаи муштарак аст. Марҳилаҳое ҳастанд, ки барномасоз аз як лоиҳа хориҷ карда мешавад ва барои муддате ба лоиҳаи дигар дода мешавад.

Барои он ки барномасоз зуд дарк кунад, вай бояд коди ибтидоии лоиҳаро зеркашӣ кунад ва муҳитеро ҳарчи зудтар оғоз кунад, ки ба ӯ имкон медиҳад, ки дар ҳалли мушкилоти ин лоиҳа пешрафт кунад.

Одатан, агар шумо аз сифр оғоз кунед, дар лоиҳа ҳуҷҷатҳои кам мавҷуданд. Танҳо одамони кӯҳна маълумот дар бораи чӣ гуна танзим кардани он доранд. Коргарон дар як-ду руз чои кори худро мустакилона ташкил мекунанд. Барои суръат бахшидан ба ин мо Docker-ро истифода бурдем.

Сабаби навбатӣ стандартизатсияи танзимот дар таҳия мебошад. Дар таҷрибаи ман, таҳиягарон ҳамеша ташаббус нишон медиҳанд. Дар ҳар як ҳолати панҷум, домени фармоишӣ ворид карда мешавад, масалан vasya.dev. Дар паҳлуи ман ҳамсояи ман Петя нишастааст, ки доменаш petya.dev аст. Онҳо вебсайт ё баъзе ҷузъҳои системаро бо истифода аз ин номи домен таҳия мекунанд.

Вақте ки система афзоиш меёбад ва ин номҳои домейнҳо ба конфигуратсия дохил мешаванд, ихтилоф дар муҳити рушд ба миён меояд ва роҳи сайт аз нав навишта мешавад.

Ҳамин чиз бо танзимоти пойгоҳи додаҳо рӯй медиҳад. Баъзе одамон бо амният ташвиш намедиҳанд ва бо пароли решаи холӣ кор мекунанд. Дар марҳилаи насбкунӣ, MySQL аз касе парол пурсид ва парол 123 шуд. Аксар вақт чунин мешавад, ки конфигуратсияи пойгоҳи додаҳо вобаста ба ӯҳдадориҳои таҳиягар пайваста тағйир меёфт. Касе ислоҳ кард, касе конфигуратсияро ислоҳ накард. Ҳангоме ки мо конфигуратсияи санҷиширо ворид кардем, ҳилаҳо буданд .gitignore ва ҳар як таҳиякунанда бояд базаи маълумотро насб кунад. Ин раванди оғозро душвортар кард. Дар байни чизҳои дигар, шумо бояд дар бораи базаи маълумот дар хотир доред. Махзани маълумот бояд оғоз карда шавад, парол бояд ба қайд гирифта шавад, корбар ба қайд гирифта шавад, аломат эҷод карда шавад ва ғайра.

Мушкилоти дигар версияҳои гуногуни китобхонаҳост. Аксар вақт чунин мешавад, ки таҳиякунанда дар лоиҳаҳои гуногун кор мекунад. Лоиҳаи Легаси вуҷуд дорад, ки панҷ сол пеш оғоз шуд (аз соли 2017 - ёддошти муҳаррир). Дар оғоз мо бо MySQL 5.5 оғоз кардем. Инчунин лоиҳаҳои муосир мавҷуданд, ки мо кӯшиш мекунем, ки версияҳои муосири MySQL-ро татбиқ кунем, масалан 5.7 ё калонтар (дар соли 2017 - ёддошти муҳаррир)

Ҳар касе, ки бо MySQL кор мекунад, медонад, ки ин китобхонаҳо вобастагӣ доранд. Якҷоя иҷро кардани 2 пойгоҳи додаҳо хеле мушкил аст. Ҳадди ақал, пайваст кардани муштариёни кӯҳна ба базаи нав мушкил аст. Ин дар навбати худ боиси як қатор мушкилот мегардад.

Мушкилоти навбатӣ ин аст, ки вақте таҳиякунанда дар мошини маҳаллӣ кор мекунад, вай захираҳои маҳаллӣ, файлҳои маҳаллӣ, RAM-и маҳаллиро истифода мебарад. Ҳама амалҳои мутақобила дар вақти таҳияи роҳи ҳалли мушкилот дар доираи он сурат мегирад, ки он дар як мошин кор мекунад. Мисол он аст, ки мо серверҳои пуштибонӣ дар Production 3 дорем ва таҳиякунанда файлҳоро дар директорияи решавӣ захира мекунад ва аз он ҷо nginx файлҳоро барои посух додан ба дархост мегирад. Вақте ки чунин код ба истеҳсолот ворид мешавад, маълум мешавад, ки файл дар яке аз 3 сервер мавҷуд аст.

Самти микросервисҳо ҳоло инкишоф меёбад. Вақте ки мо барномаҳои калони худро ба баъзе ҷузъҳои хурде тақсим мекунем, ки бо ҳамдигар ҳамкорӣ мекунанд. Ин ба шумо имкон медиҳад, ки технологияҳоро барои стек вазифаҳои мушаххас интихоб кунед. Ин инчунин ба шумо имкон медиҳад, ки кор ва майдони масъулиятро байни таҳиягарон тақсим кунед.

Таҳиягари фронтент, ки дар JS таҳия шудааст, ба ақибмонда амалан ҳеҷ таъсире надорад. Таҳиягари пуштибонӣ, дар навбати худ, дар ҳолати мо, Ruby on Rails-ро таҳия мекунад ва ба Фронденд халал намерасонад. Муошират бо истифода аз API анҷом дода мешавад.

Ҳамчун бонус, бо истифода аз Docker мо тавонистем захираҳоро дар Staging дубора коркард кунем. Ҳар як лоиҳа аз рӯи хусусиятҳои худ танзимоти муайянро талаб мекард. Аз ҷиҳати ҷисмонӣ, ҷудо кардани сервери виртуалӣ ва онҳоро алоҳида танзим кардан ё тақсим кардани як намуди муҳити тағйирёбанда ва лоиҳаҳо вобаста ба версияи китобхонаҳо метавонанд ба ҳамдигар таъсир расонанд.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Воситаҳо. Мо чиро истифода мебарем?

  • Худи Докер. Dockerfile вобастагии як барномаро тавсиф мекунад.
  • Docker-compose як бастаест, ки якчанд замимаҳои Docker моро муттаҳид мекунад.
  • Мо барои нигоҳ доштани рамзи сарчашма GitLab истифода мебарем.
  • Мо GitLab-CI-ро барои ҳамгироии система истифода мебарем.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ҳисобот аз ду қисм иборат аст.

Қисми аввал ба шумо мегӯяд, ки чӣ тавр Docker-ро дар мошинҳои таҳиягарон иҷро кунед.

Қисми дуюм дар бораи чӣ гуна ҳамкорӣ кардан бо GitLab, чӣ гуна мо санҷишҳоро иҷро мекунем ва чӣ гуна мо ба Staging мегузарем, сӯҳбат хоҳад кард.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Docker технологияест, ки имкон медиҳад (бо истифода аз равиши декларативӣ) ҷузъҳои заруриро тавсиф кунад. Ин як мисоли Dockerfile аст. Дар ин ҷо мо эълон мекунем, ки мо аз тасвири расмии Docker Ruby:2.3.0 мерос мегирем. Он дорои версияи Ruby 2.3 насб шудааст. Мо китобхонаҳои зарурӣ ва NodeJS -ро насб мекунем. Мо тавсиф мекунем, ки мо директория эҷод мекунем /app. Мо директорияи барномаро ҳамчун директорияи корӣ таъин мекунем. Дар ин феҳрист мо ҳадди ақали Gemfile ва Gemfile.lock-ро ҷойгир мекунем. Сипас, мо лоиҳаҳое месозем, ки ин тасвири вобастагиро насб мекунанд. Мо нишон медиҳем, ки контейнер барои гӯш кардани порти берунии 3000 омода хоҳад шуд. Фармони охирин фармонест, ки бевосита замимаи моро оғоз мекунад. Агар мо фармони иҷроиши лоиҳаро иҷро кунем, барнома кӯшиш мекунад, ки фармони муайяншударо иҷро ва иҷро кунад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ин як мисоли ҳадди ақали файли docker-compose аст. Дар ин ҳолат мо нишон медиҳем, ки байни ду контейнер робита вуҷуд дорад. Ин бевосита ба хидмати пойгоҳи додаҳо ва хидмати веб аст. Барномаҳои веби мо дар аксари ҳолатҳо як намуди пойгоҳи додаҳоро ҳамчун пуштибонии нигоҳдории маълумот талаб мекунанд. Азбаски мо MySQL-ро истифода мебарем, мисол бо MySQL аст - аммо ҳеҷ чиз моро аз истифодаи ягон пойгоҳи додаи дигар (PostgreSQL, Redis) манъ намекунад.

Мо тасвири MySQL 5.7.14-ро бидуни тағирот аз манбаи расмӣ аз маркази Docker мегирем. Мо тасвиреро, ки барои замимаи веби мо масъул аст, аз феҳристи ҷорӣ ҷамъоварӣ мекунем. Ҳангоми оғози аввал, ӯ барои мо тасвир ҷамъ мекунад. Сипас он фармонеро иҷро мекунад, ки мо дар ин ҷо иҷро мекунем. Агар мо баргардем, мо мебинем, ки фармони оғоз тавассути Puma муайян карда шудааст. Puma хидматест, ки дар Ruby навишта шудааст. Дар ҳолати дуюм, мо онро бекор мекунем. Ин фармон метавонад вобаста ба ниёзҳо ё вазифаҳои мо худсарона бошад.

Мо инчунин тавсиф мекунем, ки ба мо лозим аст, ки портро дар мошини мизбони таҳиягари худ аз 3000 то 3000 бандари контейнер интиқол диҳем. Ин ба таври худкор бо истифода аз iptables ва механизми худ, ки бевосита дар Docker ҷойгир карда шудааст, анҷом дода мешавад.

Таҳиягар метавонад мисли пештара ба ҳама гуна суроғаи IP дастрас, масалан, 127.0.0.1 суроғаи IP маҳаллӣ ё берунии мошин дастрасӣ пайдо кунад.

Сатри охирин мегӯяд, ки контейнери веб аз контейнери db вобаста аст. Вақте ки мо веб-контейнерро барои оғоз кардан даъват мекунем, docker-compose аввал базаи маълумотро барои мо оғоз мекунад. Аллакай пас аз оғози базаи маълумот (воқеан, пас аз ба кор андохтани контейнер! Ин ба омода будани база кафолат намедиҳад) он замимаи мо, пуштибонии моро оғоз мекунад.

Ин ба мо имкон медиҳад, ки ҳангоми пурра набудани пойгоҳи додаҳо аз хатогиҳо канорагирӣ кунем ва ба мо имкон медиҳад, ки ҳангоми боздоштани контейнери пойгоҳи дода захираҳоро сарфа кунем ва ба ин васила захираҳоро барои лоиҳаҳои дигар озод кунем.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Истифодаи докеризатсияи пойгоҳи додаҳо дар лоиҳа ба мо чӣ медиҳад? Мо версияи MySQL-ро барои ҳама таҳиягарон сабт мекунем. Ин ба шумо имкон медиҳад, ки аз баъзе хатогиҳое, ки ҳангоми аз ҳам фарқ кардани версияҳо, ҳангоми тағир додани синтаксис, конфигуратсия ва танзимоти пешфарз рух дода метавонанд, пешгирӣ кунед. Ин ба шумо имкон медиҳад, ки номи умумӣ барои пойгоҳи додаҳо, логин, паролро муайян кунед. Мо аз зоопарки номҳо ва ихтилофҳо дар файлҳои конфигуратсия, ки қаблан вуҷуд доштанд, дур мешавем.

Мо имкон дорем, ки конфигуратсияи оптималии муҳити рушдро истифода барем, ки аз пешфарз фарқ мекунад. MySQL бо нобаёнӣ барои мошинҳои заиф танзим карда шудааст ва иҷрои он аз қуттӣ хеле паст аст.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Docker ба шумо имкон медиҳад, ки тарҷумони Python, Ruby, NodeJS, PHP-и версияи дилхоҳро истифода баред. Мо аз зарурати истифодаи ягон намуди менеҷери версия халос мешавем. Пештар, барои Ruby бастаи rpm истифода мешуд, ки ба шумо имкон медиҳад, ки версияро вобаста ба лоиҳа тағир диҳед. Бо шарофати контейнери Docker, ин инчунин ба шумо имкон медиҳад, ки кодро ба осонӣ интиқол диҳед ва онро дар якҷоягӣ бо вобастагӣ нусхабардорӣ кунед. Мо дар фаҳмидани версияи ҳам тарҷумон ва ҳам код ҳеҷ мушкиле надорем. Барои навсозии версия, шумо бояд контейнери кӯҳнаро паст кунед ва контейнери навро баланд кунед. Агар ягон чиз нодуруст равад, мо метавонем контейнери навро паст кунем, контейнери кӯҳнаро баланд кунем.

Пас аз сохтани тасвир, контейнерҳо ҳам дар таҳия ва ҳам истеҳсол якхела хоҳанд буд. Ин махсусан барои установкахои калон дахл дорад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI Дар Frontend мо JavaScipt ва NodeJS-ро истифода мебарем.

Ҳоло мо лоиҳаи охирини худро дар ReacJS дорем. Таҳиягар ҳама чизро дар контейнер оғоз кард ва бо истифода аз боркунии гарм таҳия кард.

Баъдан, вазифаи монтажи JavaScipt оғоз мешавад ва рамзи статикӣ ҷамъшуда тавассути nginx фиристода, захираҳоро сарфа мекунад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Дар ин ҷо ман диаграммаи лоиҳаи охирини моро пешниҳод кардам.

Кадом мушкилотро ҳал кардед? Мо бояд системаеро бунёд кунем, ки бо он дастгоҳҳои мобилӣ ҳамкорӣ мекунанд. Онҳо маълумот мегиранд. Яке аз имкониятҳо фиристодани огоҳиҳои push ба ин дастгоҳ мебошад.

Мо барои ин чӣ кор кардем?

Мо барномаро ба ҷузъҳои зерин тақсим кардем: қисми маъмурӣ дар JS, пуштибоне, ки тавассути интерфейси REST зери Ruby on Rails кор мекунад. Backend бо пойгоҳи додаҳо ҳамкорӣ мекунад. Натиҷаи тавлидшуда ба муштарӣ дода мешавад. Панели идоракунӣ бо пуштибонӣ ва пойгоҳи додаҳо тавассути интерфейси REST ҳамкорӣ мекунад.

Мо инчунин лозим будем, ки огоҳиномаҳои Push фиристем. Пеш аз ин, мо лоиҳае доштем, ки дар он механизме амалӣ карда шуд, ки барои расонидани огоҳиномаҳо ба платформаҳои мобилӣ масъул буд.

Мо нақшаи зеринро таҳия кардем: оператор аз браузер бо панели маъмурӣ ҳамкорӣ мекунад, панели маъмурӣ бо пуштибонӣ ҳамкорӣ мекунад, вазифа фиристодани огоҳиномаҳои Push аст.

Огоҳиҳои Push бо ҷузъҳои дигаре, ки дар NodeJS амалӣ мешаванд, ҳамкорӣ мекунанд.

Навбатҳо сохта мешаванд ва огоҳиномаҳо мувофиқи механизми худ фиристода мешаванд.

Дар ин ҷо ду пойгоҳи додаҳо кашида шудаанд. Дар айни замон, бо истифода аз Docker, мо 2 пойгоҳи додаҳои мустақилро истифода мебарем, ки ба ҳеҷ ваҷҳ ба ҳамдигар пайваст нестанд. Илова бар он, ки онҳо як шабакаи умумии виртуалӣ доранд ва маълумоти физикӣ дар директорияҳои гуногун дар мошини таҳиякунанда нигоҳ дошта мешаванд.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ҳамин чиз, аммо дар рақамҳо. Истифодаи такрории код дар ин ҷо муҳим аст.

Агар қаблан мо дар бораи истифодаи дубораи код дар шакли китобхонаҳо сӯҳбат карда бошем, пас дар ин мисол хидмати мо, ки ба огоҳиҳои Push ҷавоб медиҳад, ҳамчун сервери мукаммал дубора истифода мешавад. Он API-ро таъмин мекунад. Ва рушди нави мо бо он ҳамкорӣ мекунад.

Он вақт мо версияи 4-и NodeJS-ро истифода мебурдем. Ҳоло (дар соли 2017 - ёддошти муҳаррир) дар таҳаввулоти охирини худ мо версияи 7-и NodeJS-ро истифода мебарем. Дар ҷузъҳои нав барои ҷалби версияҳои нави китобхонаҳо мушкилот вуҷуд надорад.

Агар лозим бошад, шумо метавонед версияи NodeJS-и хидмати огоҳиномаи Push-ро аз нав дида бароед.

Ва агар мо мутобиқати API-ро нигоҳ дошта тавонем, пас онро бо дигар лоиҳаҳое, ки қаблан истифода мешуданд, иваз кардан мумкин аст.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Барои илова кардани Docker ба шумо чӣ лозим аст? Мо ба анбори худ як Dockerfile илова мекунем, ки вобастагии заруриро тавсиф мекунад. Дар ин мисол, ҷузъҳо мантиқӣ тақсим карда мешаванд. Ин маҷмӯаи ҳадди аққал барои таҳиягари пуштибон аст.

Ҳангоми сохтани лоиҳаи нав, мо Dockerfile эҷод мекунем ва экосистемаи заруриро тавсиф мекунем (Python, Ruby, NodeJS). Дар docker-compose он вобастагии заруриро - базаи маълумотро тавсиф мекунад. Мо тавсиф мекунем, ки ба мо як пойгоҳи додаҳои фалон версия лозим аст, то маълумотро дар он ҷо ва он ҷо нигоҳ дорем.

Мо як контейнери алоҳидаи сеюмро бо nginx истифода мебарем, то мундариҷаи статикиро пешниҳод кунем. Ин имкон дорад, ки аксҳоро бор кунед. Бозгашт ба онҳо дар ҳаҷми қаблан омодашуда ҷойгир карда мешавад, ки он инчунин дар як контейнер бо nginx насб карда шудааст, ки маълумоти статикиро таъмин мекунад.

Барои нигоҳ доштани конфигуратсияи nginx ва Mysql, мо папкаи Docker илова кардем, ки дар он конфигуратсияҳои заруриро нигоҳ медорем. Вақте ки таҳиякунанда дар мошини худ як клони анбори анборро месозад, вай аллакай лоиҳае дорад, ки барои рушди маҳаллӣ омода аст. Ҳеҷ саволе нест, ки кадом порт ё кадом танзимотро татбиқ кардан лозим аст.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Минбаъд мо якчанд ҷузъҳо дорем: администратор, info-API, огоҳиҳои push.

Барои ба кор андохтани ҳамаи ин, мо боз як анбори дигар бо номи dockerized-app таъсис додем. Мо дар айни замон барои ҳар як ҷузъ аз анборҳои сершумор истифода мебарем. Онҳо танҳо аз ҷиҳати мантиқӣ фарқ мекунанд - дар GitLab он ба ҷузвдон монанд аст, аммо дар мошини таҳиягар он ба ҷузвдони лоиҳаи мушаххас монанд аст. Як сатҳ поён ҷузъҳое ҳастанд, ки якҷоя карда мешаванд.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ин як мисоли мундариҷаи dockerized-app аст. Мо инчунин дар ин ҷо феҳристи Docker ҷойгир мекунем, ки дар он конфигуратсияҳоеро, ки барои ҳамкории ҳама ҷузъҳо заруранд, пур мекунем. README.md мавҷуд аст, ки ба таври мухтасар чӣ гуна оғоз кардани лоиҳаро тавсиф мекунад.

Дар ин ҷо мо ду файли docker-compose-ро татбиқ кардем. Ин барои он анҷом дода мешавад, ки марҳила ба марҳила оғоз карда шавад. Вақте ки таҳиягар бо ядро ​​кор мекунад, ба ӯ огоҳиҳои Push лозим нест, вай танҳо файли docker-compose -ро оғоз мекунад ва мувофиқан захираҳо захира карда мешаванд.

Агар зарурати ҳамгироӣ бо огоҳиҳои Push вуҷуд дошта бошад, пас docker-compose.yaml ва docker-compose-push.yaml оғоз карда мешаванд.

Азбаски docker-compose.yaml ва docker-compose-push.yaml дар ҷузвдон ҳастанд, як шабакаи ягонаи виртуалӣ ба таври худкор эҷод карда мешавад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Тавсифи ҷузъҳо. Ин файли пешрафтаест, ки барои ҷамъоварии ҷузъҳо масъул аст. Дар ин ҷо чӣ ҷолиб аст? Дар ин ҷо мо ҷузъи мувозинатро муаррифӣ мекунем.

Ин тасвири тайёри Docker аст, ки nginx-ро идора мекунад ва барномае, ки розеткаи Docker-ро гӯш мекунад. Динамикӣ, вақте ки контейнерҳо фурӯзон ва хомӯш карда мешаванд, конфигуратсияи nginx барқарор карда мешавад. Мо коркарди ҷузъҳоро бо истифода аз номи домейнҳои сатҳи сеюм тақсим мекунем.

Барои муҳити рушд мо домени .dev - api.informer.dev -ро истифода мебарем. Барномаҳо бо домени .dev дар мошини маҳаллии таҳиякунанда дастрасанд.

Сипас конфигуратсияҳо ба ҳар як лоиҳа интиқол дода мешаванд ва ҳама лоиҳаҳо дар як вақт якҷоя оғоз карда мешаванд.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Агар мо онро ба таври графикӣ тасвир кунем, маълум мешавад, ки муштарӣ браузери мо ё як навъ асбобест, ки мо ба балансатор дархост мекунем.

Мувозинат муайян мекунад, ки дар асоси номи домен ба кадом контейнер дастрасӣ доштан лозим аст.

Ин метавонад nginx бошад, ки JS-ро ба панели администратор таъмин мекунад. Инро метавон тавассути nginx, ки API-ро таъмин мекунад ё файлҳои статикӣ, ки аз ҷониби nginx дар шакли боркунии тасвирҳо таъмин карда мешавад, анҷом дод.

Диаграмма нишон медиҳад, ки контейнерҳо ба шабакаи виртуалӣ пайваст шудаанд ва дар паси прокси пинҳон шудаанд.

Дар мошини таҳиягар, шумо метавонед бо донистани IP ба контейнер дастрасӣ пайдо кунед, аммо дар асл мо аз ин истифода намебарем. Барои тамоси мустақим амалан лозим нест.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Барои докеризатсия кардани аризаи худ ман ба кадом мисол бояд назар кунам? Ба андешаи ман, намунаи хуб тасвири расмии докер барои MySQL мебошад.

Ин хеле мураккаб аст. Версияҳои зиёде мавҷуданд. Аммо функсионалии он ба шумо имкон медиҳад, ки эҳтиёҷоти зиёдеро, ки дар раванди рушди минбаъда пайдо мешаванд, қонеъ кунед. Агар шумо вақт ҷудо кунед ва фаҳмед, ки ин ҳама чӣ гуна бо ҳам алоқаманд аст, пас ман фикр мекунам, ки шумо дар татбиқи худ ягон мушкилот нахоҳед дошт.

Hub.docker.com одатан истинодҳоро ба github.com дар бар мегирад, ки дар он маълумоти хом мустақиман дода мешавад, ки шумо метавонед аз он худ тасвир созед.

Минбаъд дар ин анбор скрипти docker-endpoint.sh мавҷуд аст, ки барои оғозкунии ибтидоӣ ва коркарди минбаъдаи оғози барнома масъул аст.

Инчунин дар ин мисол имкони конфигуратсия бо истифода аз тағирёбандаҳои муҳити зист вуҷуд дорад. Бо муайян кардани тағирёбандаи муҳити зист ҳангоми иҷро кардани як контейнер ё тавассути docker-compose, мо метавонем бигӯем, ки мо бояд пароли холӣ барои docker барои реша дар MySQL ё ҳар чизе ки мо мехоҳем, муқаррар кунем.

Имконияти эҷоди пароли тасодуфӣ вуҷуд дорад. Мо мегӯем, ки ба мо корбар лозим аст, мо бояд барои корбар парол таъин кунем ва базаи маълумотро эҷод кунем.

Дар лоиҳаҳои мо, мо Dockerfile-ро каме муттаҳид кардем, ки барои оғозёбӣ масъул аст. Дар он ҷо мо онро ба эҳтиёҷоти худ танзим кардем, то ҳуқуқҳои корбареро, ки барнома истифода мебарад, васеъ кунем. Ин имкон дод, ки дар оянда танҳо аз консоли барномаҳо пойгоҳи додаҳо эҷод карда шавад. Барномаҳои Ruby дорои фармонҳои эҷод, тағир додан ва нест кардани пойгоҳи додаҳо мебошанд.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ин як мисоли он аст, ки версияи мушаххаси MySQL дар github.com чӣ гуна аст. Шумо метавонед Dockerfile -ро кушоед ва бубинед, ки насб дар он ҷо чӣ гуна сурат мегирад.

скрипти docker-endpoint.sh барои нуқтаи вуруд масъул аст. Ҳангоми оғозкунии ибтидоӣ, баъзе амалҳои омодагӣ талаб карда мешаванд ва ҳамаи ин амалҳо ба скрипти оғозкунӣ дохил карда мешаванд.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Биёед ба қисми дуюм мегузарем.

Мо барои нигоҳ доштани кодҳои сарчашма ба gitlab гузаштем. Ин як системаи хеле пурқувватест, ки интерфейси визуалӣ дорад.

Яке аз ҷузъҳои Gitlab Gitlab CI мебошад. Он ба шумо имкон медиҳад, ки як қатор фармонҳоро тавсиф кунед, ки баъдан барои ташкили системаи интиқоли код ё гузаронидани санҷиши автоматикунонидашуда истифода мешаванд.

Ҳисобот дар бораи Gitlab CI 2 https://goo.gl/uohKjI — Гузориши клуби Руби Россия хеле муфассал аст ва шояд барои шумо шавковар бошад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ҳоло мо дида мебароем, ки барои фаъол кардани Gitlab CI чӣ лозим аст. Барои ба кор андохтани Gitlab CI, мо танҳо бояд файли .gitlab-ci.yml-ро дар решаи лоиҳа гузорем.

Дар ин ҷо мо тасвир мекунем, ки мо мехоҳем як пайдарпаии вазъиятро ба монанди озмоиш, ҷойгиркунӣ иҷро кунем.

Мо скриптҳоеро иҷро мекунем, ки мустақиман сохтани docker-compose-и замимаи моро даъват мекунанд. Ин як мисоли танҳо пушти сар аст.

Баъдан мо мегӯем, ки барои тағир додани пойгоҳи додаҳо ва санҷишҳо гузаришро иҷро кардан лозим аст.

Агар скриптҳо дуруст иҷро шуда бошанд ва рамзи хаторо барнагардонанд, система ба марҳилаи дуюми ҷойгиркунӣ мегузарад.

Дар айни замон марҳилаи ҷойгиркунӣ барои саҳнасозӣ амалӣ карда мешавад. Мо кори бе-коркуниро ташкил накардаем.

Мо ҳама контейнерҳоро маҷбуран хомӯш мекунем ва сипас ҳамаи контейнерҳоро, ки дар марҳилаи аввал ҳангоми санҷиш ҷамъоварӣ шудаанд, боз боло мебарем.

Биёед интиқоли пойгоҳи додаҳоро, ки аз ҷониби таҳиягарон барои муҳити тағйирёбандаи ҷорӣ навишта шудаанд, иҷро кунем.

Қайд мавҷуд аст, ки ин бояд танҳо ба филиали усто татбиқ карда шавад.

Ҳангоми иваз кардани филиалҳои дигар кор намекунад.

Кад-кади шохахо ро-хиро ташкил кардан мумкин аст.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Барои ташкили минбаъдаи ин, мо бояд Gitlab Runner -ро насб кунем.

Ин утилита дар Голанг навишта шудааст. Ин як файли ягонаест, ки дар ҷаҳони Голанг маъмул аст, ки ҳеҷ гуна вобастагӣ талаб намекунад.

Ҳангоми оғозёбӣ мо Gitlab Runner-ро сабти ном мекунем.

Мо калидро дар интерфейси веби Gitlab мегирем.

Сипас, мо фармони ибтидоиро дар сатри фармон даъват мекунем.

Танзими Gitlab Runner дар реҷаи муколама (Shell, Docker, VirtualBox, SSH)

Рамзи Gitlab Runner вобаста ба танзимоти .gitlab-ci.yml дар ҳар як супориш иҷро мешавад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Чӣ тавр он дар Gitlab дар интерфейси веб ба таври визуалӣ ба назар мерасад. Пас аз пайваст кардани GItlab CI, мо парчам дорем, ки нишон медиҳад, ки сохтмон дар айни замон дар кадом ҳолат қарор дорад.

Мо мебинем, ки 4 дакика пеш ухдадорие кабул карда шуд, ки аз хамаи санчишхо гузашт ва ягон мушкилие наовард.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Мо метавонем ба сохтмонҳо муфассалтар назар кунем. Дар ин чо мебинем, ки ду давлат аллакай гузаштааст. Ҳолати санҷиш ва ҳолати ҷойгиркунӣ дар марҳила.

Агар мо як сохтори мушаххасро клик кунем, консолии фармонҳо, ки дар раванд мувофиқи .gitlab-ci.yml оғоз шудаанд, пайдо мешавад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ҳикояи маҳсулоти мо чунин аст. Мо мебинем, ки кушишхои бомуваффакият ба амал омадаанд. Вақте ки санҷишҳо пешниҳод карда мешаванд, онҳо ба қадами оянда намегузаранд ва рамзи марҳила нав карда намешавад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Ҳангоми татбиқи docker мо кадом мушкилотро дар марҳиласозӣ ҳал кардем? Системаи мо аз ҷузъҳо иборат аст ва ба мо лозим буд, ки танҳо баъзе ҷузъҳоеро, ки дар анбор нав карда шудаанд, бозоғоз кунем, на тамоми система.

Барои ин мо бояд ҳама чизро ба ҷузвдонҳои алоҳида ҷудо кунем.

Пас аз он ки мо ин корро анҷом додем, мо бо он мушкилоте доштем, ки Docker-compose фазои шабакаи худро барои ҳар як ҷузвдон эҷод мекунад ва ҷузъҳои ҳамсояи худро намебинад.

Барои гузаштан, мо шабакаро дар Docker дастӣ сохтем. Дар Docker-compose навишта шудааст, ки шумо бояд чунин шабакаро барои ин лоиҳа истифода баред.

Ҳамин тариқ, ҳар як ҷузъе, ки бо ин тор оғоз мешавад, ҷузъҳоро дар қисмҳои дигари система мебинад.

Мушкилоти навбатӣ ин тақсим кардани марҳила байни якчанд лоиҳаҳо мебошад.

Азбаски ин ҳама зебо ва то ҳадди имкон ба истеҳсолот наздик ба назар мерасанд, истифода бурдани порти 80 ё 443, ки дар ҳама ҷо дар WEB истифода мешавад, хуб аст.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Мо инро чӣ тавр ҳал кардем? Мо ба ҳама лоиҳаҳои калон як Gitlab Runner таъин кардем.

Gitlab ба шумо имкон медиҳад, ки якчанд тақсимшудаи Gitlab Runners -ро оғоз кунед, ки онҳо танҳо ҳама вазифаҳоро як ба як бо тартиби бесарусомон иҷро мекунанд ва онҳоро иҷро мекунанд.

Барои роҳ надодан ба мушкилоти хона, мо гурӯҳи лоиҳаҳои худро ба як Gitlab Runner маҳдуд кардем, ки бо ҳаҷми мо бе мушкилот мубориза мебарад.

Мо nginx-proxy-ро ба скрипти алоҳидаи оғозёбӣ кӯчонида, шабакаҳои ҳамаи лоиҳаҳоро дар он навиштем.

Лоиҳаи мо як шабака дорад ва мувозинат дар асоси номҳои лоиҳа якчанд шабака дорад. Он метавонад минбаъд тавассути номҳои домейнҳо прокси кор кунад.

Дархостҳои мо тавассути домени бандари 80 меоянд ва ба як гурӯҳи контейнерҳо, ки ба ин домен хидмат мерасонанд, ҳал карда мешаванд.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Боз кадом мушкилот вуҷуд дошт? Ин аст он чизе ки ҳама контейнерҳо ба таври нобаёнӣ ҳамчун реша кор мекунанд. Ин мизбони решаи нобаробари система аст.

Аммо, агар шумо ба контейнер ворид шавед, он реша хоҳад буд ва файле, ки мо дар ин контейнер эҷод мекунем, ҳуқуқи решаро мегирад.

Агар таҳиякунанда ба контейнер ворид шуда, дар он ҷо якчанд фармонҳоро иҷро кунад, ки файлҳоро тавлид мекунанд ва баъд контейнерро тарк мекунанд, пас дар директорияи кории худ вай файле дорад, ки ба он дастрасӣ надорад.

Инро чй тавр хал кардан мумкин аст? Шумо метавонед корбаронеро илова кунед, ки дар контейнер хоҳанд буд.

Вақте ки мо корбарро илова кардем, кадом мушкилот ба миён омад?

Ҳангоми сохтани корбар, ID-и гурӯҳ (UID) ва ID-и корбар (GID) аксар вақт мувофиқат намекунанд.

Барои ҳалли ин мушкилот дар контейнер мо корбарони ID 1000-ро истифода мебарем.

Дар ҳолати мо, ин ба он рост омад, ки қариб ҳамаи таҳиягарон Ubuntu OS-ро истифода мебаранд. Ва дар Ubuntu OS корбари аввал ID 1000 дорад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Оё мо нақша дорем?

Ҳуҷҷатҳои Docker-ро дубора хонед. Лоиҳа фаъолона инкишоф меёбад, ҳуҷҷатҳо тағир меёбанд. Маълумоте, ки ду-се моҳ пеш гирифта шуда буд, оҳиста-оҳиста кӯҳна мешавад.

Баъзе мушкилоте, ки мо ҳал кардем, шояд аллакай бо воситаҳои стандартӣ ҳал карда шуда бошанд.

Ман дар ҳақиқат мехоҳам, ки идома диҳам ва мустақиман ба оркестр гузарам.

Як мисол механизми дарунсохташудаи Docker бо номи Docker Swarm мебошад, ки аз қуттӣ мебарояд. Ман мехоҳам чизеро дар истеҳсолот дар асоси технологияи Docker Swarm оғоз кунам.

Контейнерҳои тухмпошӣ кор бо чӯбҳоро номувофиқ мегардонанд. Ҳоло чӯбҳо ҷудо карда шудаанд. Онҳо дар контейнерҳо пароканда карда мешаванд. Яке аз вазифаҳо дастрасии қулай ба гузоришҳо тавассути интерфейси веб мебошад.

Раванди таҳия ва озмоиш бо Docker ва Gitlab CI

Манбаъ: will.com

Илова Эзоҳ