Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

Якум, як назарияи каме. Чӣ гап шудааст Барномаи дувоздаҳ омил?

Бо ибораи оддӣ, ин ҳуҷҷат барои содда кардани таҳияи барномаҳои SaaS тарҳрезӣ шудааст ва тавассути огоҳ кардани таҳиягарон ва муҳандисони DevOps дар бораи мушкилот ва амалияҳое, ки дар таҳияи замимаҳои муосир бештар дучор мешаванд, кӯмак мекунад.

Ҳуҷҷат аз ҷониби таҳиягарони платформаи Heroku сохта шудааст.

Барномаи дувоздаҳ-омилро метавон ба замимаҳои бо ҳама гуна забони барномасозӣ навишташуда ва бо истифода аз ҳама гуна омезиши хидматҳои пуштибонӣ (ба пойгоҳи додаҳо, навбатҳои паёмҳо, кэшҳо ва ғайра) истифода бурд.

Дар бораи омилҳое, ки ин методология ба онҳо асос ёфтааст, мухтасар:

  1. Пойгоҳи код - Як пойгоҳи кодҳо дар назорати версия пайгирӣ карда мешавад - ҷойгиркунии сершумор
  2. Вобастагӣ - Вобастагиҳоро ошкоро эълон кунед ва ҷудо кунед
  3. Танзимот - Конфигуратсияро дар вақти корӣ захира кунед
  4. Хидматҳои пуштибонӣ – Хидматҳои пуштибонӣ ҳамчун захираҳои плагин баррасӣ карда мешаванд
  5. Сохта, озод кардан, давидан – Марҳилаҳои монтаж ва иҷроро ба таври қатъӣ ҷудо кунед
  6. Тарафҳо - Барномаро ҳамчун як ё якчанд равандҳои бидуни шаҳрвандӣ иҷро кунед
  7. Пайвасткунии порт - Содироти хидматҳо тавассути пайвасти порт
  8. Параллелизм - Бо истифода аз равандҳо барномаи худро миқёс кунед
  9. Якбора истифодашаванда - Эътимодро бо оғози зуд ва хомӯшии тоза ба ҳадди аксар афзоиш диҳед
  10. Рушди барнома/паритети амалиёт - Муҳити таҳия, саҳна ва истеҳсолии худро то ҳадди имкон яксон нигоҳ доред
  11. Сабткунї - Журналро ҳамчун ҷараёни рӯйдодҳо бинед
  12. Вазифаҳои маъмурӣ – Иҷрои вазифаҳои маъмурӣ/идоракунӣ бо истифода аз равандҳои махсус

Шумо метавонед дар бораи 12 омил аз манбаъҳои зерин маълумоти бештар гиред:

Ҷойгиркунии Blue-Green чист?

Ҷойгиркунии кабуд-сабз як усули расонидани барнома ба истеҳсолот ба тавре ки муштарии ниҳоӣ аз ҷониби худ ягон тағйиротро набинад. Ба ибораи дигар, ҷойгиркунии барнома бо сифр вақти кам.

Нақшаи классикии BG Deploy ба нақшаи дар тасвири зер нишондодашуда монанд аст.

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

  • Дар оғоз 2 сервери физикӣ мавҷуданд, ки комилан як код, барнома, лоиҳа доранд ва роутер (балансер) мавҷуд аст.
  • Роутер дар аввал ҳама дархостҳоро ба яке аз серверҳо равона мекунад (сабз).
  • Дар айни замон, ки шумо бояд дубора озод кунед, тамоми лоиҳа дар сервери дигар нав карда мешавад (кабуд), ки ҳоло ягон дархостро коркард намекунад.
  • Пас аз он ки код фаъол аст кабуд сервер комилан нав карда мешавад, ба роутер фармон дода мешавад, ки аз он гузаред сабз ба кабуд сервер.
  • Акнун ҳама муштариён натиҷаи кодеро, ки бо он кор мекунанд, мебинанд кабуд сервер
  • Чанд муддате, сабз сервер дар сурати бемуваффақият ҷойгиркунӣ ҳамчун нусхаи эҳтиётӣ хизмат мекунад кабуд сервер ва дар сурати нокомӣ ва хатогиҳо, роутер ҷараёни корбарро ба он бармегардонад сабз сервер бо версияи кӯҳнаи устувор ва рамзи нав барои аз нав дида баромадан ва санҷиш фиристода мешавад.
  • Ва дар охири раванд он ба ҳамин тариқ нав карда мешавад сабз сервер. Ва пас аз навсозии он, роутер ҷараёни дархостро ба он бармегардонад сабз сервер.

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

Маслиҳати бад ва хуб

Радди: Намунаҳои дар зер утилитаҳо/методологияҳое, ки ман истифода мебарам, нишон медиҳанд, шумо метавонед комилан ҳама алтернативаҳоро бо функсияҳои шабеҳ истифода баред.

Аксари мисолҳо ба ин ё он роҳ бо таҳияи веб (ин ногаҳонӣ аст), бо PHP ва Docker мепайвандад.

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

1. Пойгоҳи код

FTP ва FileZilla-ро барои бор кардани файлҳо ба серверҳо як-як истифода баред, кодро ба ҷуз дар сервери истеҳсолӣ дар ҷои дигаре нигоҳ надоред.

Лоиҳа бояд ҳамеша як пойгоҳи коди ягона дошта бошад, яъне ҳама кодҳо аз як Рафтааст анбор. Серверҳо (истеҳсол, саҳнасозӣ, test1, test2...) кодро аз шохаҳои як репозиторий умумӣ истифода мебаранд. Бо ин роҳ мо мувофиқати кодро ба даст меорем.

2. Вобастагӣ

Ҳама китобхонаҳоро дар ҷузвдонҳо бевосита ба решаи лоиҳа зеркашӣ кунед. Танҳо тавассути интиқол додани рамзи нав ба ҷузвдон бо версияи ҷории китобхона навсозӣ кунед. Ҳама утилитаҳои заруриро мустақиман дар сервери мизбон насб кунед, ки дар он 20 хидмати дигар кор мекунанд.

Лоиҳа бояд ҳамеша рӯйхати возеҳи вобастагӣ дошта бошад (бо вобастагӣ ман муҳити атрофро низ дар назар дорам). Ҳама вобастагӣ бояд ба таври возеҳ муайян ва ҷудо карда шаванд.
Биёед мисолро гирем Оҳангсоз и Доктор.

Оҳангсоз — мудири баста, ки ба шумо имкон медиҳад, ки китобхонаҳоро дар PHP насб кунед. Композитор ба шумо имкон медиҳад, ки версияҳоро ба таври қатъӣ ё озод муайян кунед ва онҳоро ба таври возеҳ муайян кунед. Дар сервер метавонад 20 лоиҳаи гуногун мавҷуд бошад ва ҳар яки онҳо дорои рӯйхати шахсии бастаҳо ва китобхонаҳои новобаста аз дигар мебошанд.

Доктор — утилитае, ки ба шумо имкон медиҳад, ки муҳите, ки барнома кор мекунад, муайян ва ҷудо кунед. Мувофиқи он, ба монанди композитор, аммо дақиқтар, мо метавонем муайян кунем, ки барнома бо чӣ кор мекунад. Версияи мушаххаси PHP-ро интихоб кунед, танҳо бастаҳоеро, ки барои кори лоиҳа заруранд, насб кунед, бе илова ягон чизи иловагӣ. Ва муҳимтар аз ҳама, бидуни дахолат ба бастаҳо ва муҳити мошини мизбон ва дигар лоиҳаҳо. Яъне, ҳама лоиҳаҳои сервере, ки тавассути Docker кор мекунанд, метавонанд комилан ҳама маҷмӯи бастаҳо ва муҳити комилан дигарро истифода баранд.

3. Танзимот

Конфигуратсияҳоро ҳамчун доимӣ мустақиман дар код нигоҳ доред. Константаҳои алоҳида барои сервери санҷишӣ, алоҳида барои истеҳсолот. Фаъолияти барномаро вобаста ба муҳити зист мустақиман дар мантиқи тиҷоратии лоиҳа бо истифода аз if else constructs пайваст кунед.

Конфигуратсияҳо - ин ягона роҳест, ки ҷойгиркунии лоиҳаҳо бояд фарқ кунад. Идеалӣ, конфигуратсияҳо бояд тавассути тағирёбандаҳои муҳити зист (env vars) гузаронида шаванд.

Яъне, ҳатто агар шумо якчанд файлҳои конфигуратсияи .config.prod .config.local нигоҳ доред ва онҳоро дар вақти ҷойгиркунӣ ба .config иваз кунед (конфигуратсияи асосӣ, ки барнома аз он маълумот мехонад) - ин муносибати дуруст нахоҳад буд, зеро дар ин ҳолат маълумот аз конфигуратсияҳо ба ҳама таҳиягарони барнома дастрас хоҳад буд ва маълумот аз сервери истеҳсолӣ халалдор мешавад. Ҳама конфигуратсияҳо бояд мустақиман дар системаи ҷойгиркунӣ (CI/CD) нигоҳ дошта шаванд ва барои муҳитҳои гуногун бо арзишҳои мухталифе, ки барои муҳити мушаххас дар вақти ҷойгиркунӣ заруранд, тавлид карда шаванд.

4. Хидматҳои тарафи сеюм

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

Дарвоқеъ, ин нуқта бо нуктаи конфигуратсияҳо сахт мувофиқат мекунад, зеро бидуни ин нуқта маълумоти муқаррарии конфигуратсияро сохтан мумкин нест ва дар маҷмӯъ қобилияти конфигуратсия ба ҳеҷ чиз намеафтад.

Ҳама пайвастҳо ба хидматҳои беруна, ба монанди серверҳои навбатӣ, пойгоҳи додаҳо, хидматҳои кэш, бояд ҳам барои муҳити маҳаллӣ ва ҳам барои муҳити сеюм/муҳити истеҳсолӣ якхела бошанд. Ба ибораи дигар, дар ҳар вақт, бо иваз кардани сатри пайвастшавӣ, ман метавонам зангҳоро ба пойгоҳи №1 бо пойгоҳи №2 бидуни тағир додани рамзи барнома иваз кунам. Ё, ба пеш менигарем, ҳамчун мисол, ҳангоми миқёси хидмат, ба шумо лозим нест, ки пайвастшавиро бо ягон роҳи махсус барои сервери иловагии кэш муайян кунед.

5. Сохтан, озод кардан, ба чо овардан

Танҳо версияи ниҳоии кодро дар сервер дошта бошед, бе имкони баргардонидани нашр. Барои пур кардани фазои диск лозим нест. Ҳар касе, ки фикр мекунад, ки онҳо метавонанд кодро дар истеҳсолот бо хатогӣ озод кунанд, барномасози бад аст!

Ҳама марҳилаҳои ҷойгиркунӣ бояд аз ҳамдигар ҷудо карда шаванд.

Имконияти бозгаштанро доред. Нашрияҳоро бо нусхаҳои кӯҳнаи барнома (аллакай ҷамъоварӣ ва ба ҷанг омода) дар дастрасии зуд захира кунед, то дар сурати хатогиҳо шумо версияи кӯҳнаро барқарор кунед. Яъне шартан папка мавчуд аст озод карда мешаванд ва папка ҷорӣ, ва пас аз ҷойгиркунӣ ва васлкунии бомуваффақияти ҷузвдон ҷорӣ бо истиноди рамзӣ ба версияи нав, ки дар дохили он ҷойгир аст, алоқаманд аст озод карда мешаванд бо номи шартии рақами нашр.

Дар ин ҷо мо ҷойгиркунии Blue-Green-ро дар хотир дорем, ки ба шумо имкон медиҳад, ки на танҳо байни код гузаред, балки байни ҳама захираҳо ва ҳатто муҳитҳо бо қобилияти баргардонидани ҳама чиз гузаред.

6. Равандҳо

Маълумоти ҳолати барномаро мустақиман дар худи барнома нигоҳ доред. Сеансҳоро дар RAM-и худи барнома истифода баред. То ҳадди имкон мубодилаи байни хидматҳои тарафи сеюмро истифода баред. Ба он такя кунед, ки барнома метавонад танҳо як раванд дошта бошад ва ба миқёс иҷозат надиҳед.

Дар мавриди сессияҳо, маълумотро танҳо дар кэш нигоҳ доред, ки аз ҷониби хидматҳои тарафи сеюм идора карда мешавад (memcached, redis), аз ин рӯ, ҳатто агар шумо 20 раванди барномаро иҷро кунед, ҳар яке аз онҳо, ки ба кэш дастрасӣ пайдо карда, метавонад корро бо муштарӣ дар ҳамон ҳолате, ки корбар дар раванди дигар бо барнома кор мекард. Бо ин равиш, маълум мешавад, ки новобаста аз он ки шумо чанд нусхаи хидматҳои тарафи сеюмро истифода мебаред, ҳама чиз муқаррарӣ ва бидуни мушкилот бо дастрасӣ ба маълумот кор хоҳад кард.

7. Пайвасткунии порт

Танҳо сервери веб бояд донад, ки чӣ тавр бо хидматҳои тарафи сеюм кор кардан лозим аст. Ё беҳтараш, хидматҳои тарафи сеюмро мустақиман дар дохили сервери веб насб кунед. Масалан, ҳамчун модули PHP дар Apache.
Ҳама хидматҳои шумо бояд тавассути дастрасӣ ба ягон суроға ва порт (localgost:5432, localhost:3000, nginx:80, php-fpm:9000) барои ҳамдигар дастрас бошанд, яъне аз nginx ман метавонам ҳам ба php-fpm ва ҳам ба postgres ва аз php-fpm то postgres ва nginx ва воқеан аз ҳар як хидмат ман метавонам ба хидмати дигар дастрасӣ пайдо кунам. Бо ин роҳ, қобилиятнокии хидмат ба қобилиятнокии хидмати дигар вобаста нест.

8. Параллелизм

Бо як раванд кор кунед, вагарна якчанд раванд бо ҳамдигар мувофиқат карда наметавонанд!

Барои андозагирӣ ҷой гузоред. Сӯи Docker барои ин бузург аст.
Docker Swarm як асбобест барои эҷод ва идоракунии кластерҳои контейнерҳо ҳам байни мошинҳои гуногун ва ҳам як қатор контейнерҳо дар як мошин.

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

9. Якбора истифодашаванда

Барои кор бо равандҳо ва додаҳо навбатҳоро истифода набаред. Куштани як раванд бояд ба тамоми барнома таъсир расонад. Агар як хидмат қатъ шавад, ҳама чиз коҳиш меёбад.

Ҳар як раванд ва хидматро дар вақти дилхоҳ хомӯш кардан мумкин аст ва ин набояд ба хидматҳои дигар таъсир расонад (албатта, ин маънои онро надорад, ки хидмат барои хидмати дигар дастнорас хоҳад буд, аммо хидмати дигар пас аз он хомӯш намешавад). Ҳама равандҳо бояд боэҳтиётона қатъ карда шаванд, то вақте ки онҳо қатъ карда шаванд, ягон маълумот осеб набинад ва вақте ки шумо онро фаъол мекунед, система дуруст кор кунад. Яъне, ҳатто дар сурати қатъ шудани ҳолати фавқулодда, маълумот набояд вайрон шавад (механизми транзаксия дар ин ҷо мувофиқ аст, дархостҳо дар пойгоҳи додаҳо танҳо дар гурӯҳҳо кор мекунанд ва агар ҳадди аққал як дархост аз гурӯҳ ноком шавад ё бо як дархост иҷро карда шавад. хато бошад, пас ягон дархости дигари гурӯҳ дар ниҳоят ноком намешавад).

10. Паритети коркард/амалиёт

Истеҳсол, саҳна ва версияи маҳаллии барнома бояд гуногун бошад. Дар истеҳсолот мо чаҳорчӯбаи Yii Lite ва ба таври маҳаллӣ Yii -ро истифода мебарем, то он дар истеҳсолот тезтар кор кунад!

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

Docker низ дар ин кор ба мо кӯмак мекунад. Агар ҳамаи нуктаҳои қаблӣ риоя карда шаванд, истифодаи docker раванди ҷойгиркунии муҳити атрофро ҳам дар истеҳсолот ва ҳам дар мошини маҳаллӣ ба ворид кардани як ё ду фармон меорад.

11. Журналҳо

Мо ба файлҳо ва пойгоҳи додаҳо гузоришҳо менависем! Мо файлҳо ва пойгоҳи додаҳоро аз гузоришҳо тоза намекунем. Биёед танҳо як диски сахт бо 9000 Пета байт харем ва ин хуб аст.

Ҳама гузоришҳо бояд ҳамчун ҷараёни рӯйдодҳо баррасӣ карда шаванд. Худи барнома набояд дар коркарди гузоришҳо иштирок кунад. Гузоришҳо бояд ё ба stdout бароварда шаванд ё тавассути протокол ба монанди udp фиристода шаванд, то кор бо гузоришҳо барои барнома ягон мушкилот эҷод накунад. graylog барои ин хуб аст. Graylog, ки ҳамаи гузоришҳоро тавассути udp қабул мекунад (ин протокол интизори посухро дар бораи қабули бомуваффақияти баста талаб намекунад) ба барнома ҳеҷ ваҷҳ халал намерасонад ва танҳо бо сохтор ва коркарди гузоришҳо сарукор дорад. Мантиқи барнома барои кор бо чунин равишҳо тағир намеёбад.

12. Вазифаҳои маъмурият

Барои навсозии додаҳо, пойгоҳи додаҳо ва ғайра, нуқтаи ниҳоии алоҳида сохташударо дар API истифода баред, 2 маротиба дар як саф иҷро кардани он боиси такрор шудани ҳама чиз мегардад. Аммо шумо беақл нестед, ду маротиба клик намекунед ва ба мо муҳоҷират лозим нест.

Ҳама вазифаҳои маъмурӣ бояд дар ҳамон муҳит бо ҳама рамзҳо, дар сатҳи барориши онҳо иҷро карда шаванд. Яъне, агар ба мо лозим ояд, ки сохтори махзани маълумотро тағир диҳем, он гоҳ мо онро тавассути тағир додани номи сутунҳо ва илова кардани сутунҳои нав тавассути баъзе асбобҳои идоракунии пойгоҳи додаҳо дастӣ иҷро намекунем. Барои чунин чизҳо, мо скриптҳои алоҳида эҷод мекунем - муҳоҷират, ки дар ҳама ҷо ва дар ҳама муҳитҳо ба ҳамон тарз бо натиҷаи умумӣ ва фаҳмо иҷро карда мешаванд. Барои ҳама вазифаҳои дигар, ба монанди пур кардани лоиҳа бо маълумот, методологияҳои шабеҳ бояд истифода шаванд.

Намунаи татбиқ дар PHP, Laravel, Laradock, Docker-Compose

P.S Ҳама мисолҳо дар MacOS сохта шудаанд. Аксарияти онҳо барои Linux низ мувофиқанд. Корбарони Windows, маро бубахшед, аммо ман муддати тӯлонӣ бо Windows кор накардаам.

Биёед вазъиятеро тасаввур кунем, ки мо дар компютери мо ягон версияи PHP насб карда нашудааст ва умуман чизе нест.
Версияҳои охирини docker ва docker-compose -ро насб кунед. (инро метавон дар интернет пайдо кард)

docker -v && 
docker-compose -v

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

1. Гузоштан Ларадок

git clone https://github.com/Laradock/laradock.git && 
ls

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

Дар бораи Ларадок, ман мегӯям, ки ин чизи хеле аҷибест, ки дар таркиби он контейнерҳо ва чизҳои ёрирасон мавҷуданд. Аммо ман тавсия намедиҳам, ки Ларадокро бидуни тағирот дар истеҳсолот аз сабаби зиёдатии он истифода барад. Беҳтар аст, ки контейнерҳои шахсии худро дар асоси мисолҳо дар Ларадок созед, ин хеле оптимизатсия карда мешавад, зеро ба ҳеҷ кас дар як вақт ба ҳама чизҳое ниёз надорад.

2. Laradock-ро барои иҷро кардани замимаи мо танзим кунед.

cd laradock && 
cp env-example .env

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

2.1. Дар ягон муҳаррир феҳристи habr (папкаи волидайн, ки дар он laradock клон карда шудааст) кушоед. (Дар сурати PHPStorm ман)

Дар ин марҳила мо танҳо ба лоиҳа ном медиҳем.

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

2.2. Тасвири фазои корро оғоз кунед. (Дар ҳолати шумо, барои сохтани тасвирҳо каме вақт лозим аст)
Фазои корӣ тасвири махсус омодашуда барои кор бо чаҳорчӯба аз номи таҳиякунанда мебошад.

Мо бо истифода аз дохили контейнер меравем

docker-compose up -d workspace && 
docker-compose exec workspace bash

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

2.3. Насб кардани Laravel

composer create-project --prefer-dist laravel/laravel application

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

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

ls
exit
docker-compose down

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

2.5. Биёед ба PHPStorm баргардем ва роҳи дурусти барномаи laravel-ро дар файли .env муқаррар кунем.

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

3. Ҳама рамзро ба Git илова кунед.

Барои ин, мо дар Github (ё ягон ҷои дигар) анбор эҷод мекунем. Биёед ба директорияи habr дар терминал равем ва рамзи зеринро иҷро кунем.

echo "# habr-12factor" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin [email protected]:nzulfigarov/habr-12factor.git # здесь будет ссылка на ваш репо
git push -u origin master
git status

Биёед тафтиш кунем, ки оё ҳама чиз дуруст аст.

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

Барои роҳат, ман тавсия медиҳам, ки интерфейси визуалиро барои Git истифода барам, дар ҳолати ман ин аст ГитКракен. (ин ҷо як истиноди истинод аст)

4. Биёед оғоз кунем!

Пеш аз оғоз, боварӣ ҳосил кунед, ки ҳеҷ чиз дар бандарҳои 80 ва 443 овезон нест.

docker-compose up -d nginx php-fpm

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

Ҳамин тариқ, лоиҳаи мо аз 3 хидмати алоҳида иборат аст:

  • nginx - сервери веб
  • php-fpm - php барои қабули дархостҳо аз сервери веб
  • фазои корӣ - php барои таҳиягарон

Дар айни замон, мо ба он ноил шудем, ки мо як барномаеро таҳия кардем, ки аз 4 12 хол мувофиқат мекунад, аз ҷумла:

1. Пойгоҳи код — ҳама рамз дар як анбор ҷойгир аст (эзоҳи хурд: илова кардани докер дар дохили лоиҳаи laravel дуруст аст, аммо ин муҳим нест).

2. Вобастагӣ - Ҳама вобастагии мо ба таври возеҳ дар application/composer.json ва дар ҳар як Dockerfile ҳар як контейнер навишта шудаанд.

3. Хидматҳои пуштибонӣ — Ҳар як хидмат (php-fom, nigx, фазои корӣ) ҳаёти худро дорад ва аз берун пайваст аст ва ҳангоми кор бо як хидмат ба дигараш таъсир намерасонад.

4. Тарафҳо — хар як хизмат як процесс аст. Ҳар як хидмат ҳолати дохилиро нигоҳ медорад.

5. Пайвасткунии порт

docker ps

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

Тавре ки мо мебинем, ҳар як хидмат дар бандари худ кор мекунад ва барои ҳама хидматҳои дигар дастрас аст.

6. Параллелизм

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

Биёед контейнерҳоро боздошта, онҳоро тавассути байрақ гузаронем --миқёс

docker-compose down && 
docker-compose up -d --scale php-fpm=3 nginx php-fpm

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

Тавре ки мо мебинем, аз контейнери php-fpm нусхаҳо сохта шудаанд. Ҳангоми кор бо ин контейнер ба мо лозим нест, ки чизеро тағир диҳем. Мо инчунин дастрасии онро дар бандари 9000 идома медиҳем ва Docker бори байни контейнерҳоро барои мо танзим мекунад.

7. Якбора истифодашаванда - ҳар як контейнер метавонад ба дигараш зарар нарасонад. Қатъ ё аз нав оғоз кардани контейнер ба кори барнома ҳангоми оғози минбаъда таъсир намерасонад. Ҳар як контейнерро дар вақти дилхоҳ бардоштан мумкин аст.

8. Рушди барнома/паритети амалиёт — хамаи мухити мо як хел аст. Бо ба кор даровардани система дар сервер дар истеҳсолот, ба шумо лозим нест, ки дар фармонҳои худ чизеро тағир диҳед. Ҳама чиз ба ҳамин тариқ ба Docker асос меёбад.

9. Сабткунї — ҳамаи гузоришҳо дар ин контейнерҳо ба ҷараён мераванд ва дар консоли Docker намоён мешаванд. (дар ин ҳолат, дар асл, бо дигар контейнерҳои худсохти, ин метавонад набошад, агар шумо ба он ғамхорӣ накунед)

 docker-compose logs -f

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

Аммо як чиз дар он аст, ки арзишҳои пешфарз дар PHP ва Nginx инчунин гузоришҳоро ба файл менависанд. Барои қонеъ кардани 12 омил зарур аст бекор карда шавад навиштани гузоришҳо ба файл дар конфигуратсияҳои ҳар як контейнер алоҳида.

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

10. Вазифаҳои маъмурӣ — ҳама вазифаҳои маъмурият тавассути ларавел ба шарофати асбоби ҳунарӣ маҳз ҳамон тавре, ки эҷодкорони барномаи 12 омил мехоҳанд, ҳал карда мешаванд.

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

 
docker-compose exec workspace bash
php artisan list

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

Акнун мо метавонем ягон фармонро истифода барем. (Лутфан қайд кунед, ки мо пойгоҳи додаҳо ва кэшро танзим накардаем, бинобар ин нисфи фармонҳо дуруст иҷро намешаванд, зеро онҳо барои кор бо кэш ва пойгоҳи додаҳо тарҳрезӣ шудаанд).

Таҳияи барномаҳо ва ҷобаҷогузории Blue-Green, дар асоси методологияи дувоздаҳ омили барнома бо мисолҳо дар php ва docker

11. Конфигуратсияҳо ва 12. Сохта, озод кардан, давидан

Ман мехостам, ки ин қисмро ба Ҷойгиркунии Blue-Green бахшам, аммо он барои ин мақола хеле васеъ буд. Дар ин бора мақолаи алоҳида менависам.

Хулоса, консепсия ба системаҳои CI/CD асос ёфтааст Ҷенкинс и Gitlab CI. Дар ҳарду, шумо метавонед тағирёбандаҳои муҳити марбут ба муҳити мушаххасро танзим кунед. Мутаносибан, дар ин вазъият нуқтаи c иҷро мешавад Конфигуратсияҳо.

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

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

Рамзи барнома дар Github.
Ҳангоми клон кардани ин репозиторий зермодулро оғоз карданро фаромӯш накунед.

P.S.: Ҳамаи ин равишҳоро метавон бо ҳама гуна утилитаҳои дигар ва забонҳои барномасозӣ истифода бурд. Чизи асосй он аст, ки мохият фарк намекунад.

Манбаъ: will.com

Илова Эзоҳ