PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

Биринчиден, бир аз теория. Эмне болду Он эки фактордук колдонмо?

Жөнөкөй сөз менен айтканда, бул документ иштеп чыгуучуларга жана DevOps инженерлерине заманбап тиркемелерди иштеп чыгууда эң көп кездешүүчү көйгөйлөр жана практикалар жөнүндө маалымат берип, SaaS тиркемелерин иштеп чыгууну жөнөкөйлөтүү үчүн иштелип чыккан.

Документ Heroku платформасынын иштеп чыгуучулары тарабынан түзүлгөн.

Он эки фактордук колдонмону каалаган программалоо тилинде жазылган жана колдоо кызматтарынын (маалымат базалары, билдирүү кезеги, кэш ж.

Бул методология негизделген факторлор жөнүндө кыскача:

  1. Codebase – Версияны башкарууда көзөмөлдөнгөн бир коддук база – бир нече жайгаштыруу
  2. Көз карандылык – Көз карандылыкты ачык жарыялоо жана изоляциялоо
  3. тарам – Иштөө убагында конфигурацияны сактаңыз
  4. Backing Services – Колдонуучу ресурстар катары колдоо кызматтарын караңыз
  5. Куруу, бошотуу, чуркоо – Чогултуу жана аткаруу этаптарын катуу бөлүңүз
  6. жараяндар – Тиркемени бир же бир нече жарандыгы жок процесстер катары иштетиңиз
  7. Порт туташуусу – Порт байланышы аркылуу кызматтарды экспорттоо
  8. Параллелизм - Процесстерди колдонуу менен колдонмоңузду масштабдаңыз
  9. Бир жолу колдонуу – Ыкчам ишке киргизүү жана таза өчүрүү менен ишенимдүүлүктү жогорулатуу
  10. Колдонмолорду иштеп чыгуу/иш паритети – Өнүктүрүү, сахналаштыруу жана өндүрүш чөйрөлөрүңүздү мүмкүн болушунча окшош кармаңыз
  11. Каттоо – Журналды окуялардын агымы катары көрүңүз
  12. Администрациянын милдеттери – Ad hoc процесстерин колдонуу менен башкаруу/башкаруу тапшырмаларын аткарыңыз

12 фактор тууралуу кененирээк маалыматты төмөнкү булактардан ала аласыз:

Көк-Жашыл жайылтуу деген эмне?

Көк-Жашыл жайылтуу - бул колдонмону жеткирүү ыкмасы продукция акыркы кардар өз тарабынан эч кандай өзгөрүүлөрдү көрбөй тургандай кылып. Башка сөз менен айтканда, нөл менен колдонмону жайылтуу даун.

BG Deploy классикалык схемасы төмөндөгү сүрөттө көрсөтүлгөндөй көрүнөт.

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

  • Башында такыр эле коду, тиркемеси, долбоору менен 2 физикалык сервер бар жана роутер (балансатор) бар.
  • Роутер адегенде бардык суроо-талаптарды серверлердин бирине багыттайт (жашыл).
  • Сиз кайра чыгарышыңыз керек болгон учурда, бүт долбоор башка серверде жаңыртылды (көгүлтүр), ал учурда эч кандай сурамдарды иштетпей жатат.
  • Код күйгөндөн кийин көк сервер толугу менен жаңыртылды, роутерге которулуу буйругу берилет жашыл боюнча көгүлтүр сервер.
  • Эми бардык кардарлар коддун натыйжасын көрүшөт көгүлтүр сервер.
  • Бир нече убакытка, жашыл серверге ийгиликсиз жайгаштырылган учурда резервдик көчүрмө катары кызмат кылат көгүлтүр сервер жана каталар жана мүчүлүштүктөр болгон учурда, роутер колдонуучунун агымын кайра которот жашыл эски стабилдүү версиясы бар сервер, ал эми жаңы код кайра карап чыгууга жана сыноого жөнөтүлөт.
  • Ал эми процесстин аягында дал ушундай жаңыртылат жашыл сервер. Жана аны жаңырткандан кийин, роутер суроо агымын кайра которот жашыл сервер.

Мунун баары абдан жакшы көрүнөт жана бир караганда, аны менен эч кандай көйгөйлөр жок болушу керек.
Бирок биз заманбап дүйнөдө жашап жаткандыктан, классикалык схемада көрсөтүлгөн физикалык которуштуруу опциясы бизге туура келбейт. Азырынча маалыматты жазыңыз, биз ага кийинчерээк кайрылабыз.

Жаман жана жакшы кеңеш

баш тартуу: Төмөндөгү мисалдар мен колдонгон утилиталарды/методологияларды көрсөтөт, сиз окшош функциялар менен каалаган альтернативаларды колдоно аласыз.

Мисалдардын көбү тигил же бул түрдө веб-иштеп чыгуу менен (бул күтүлбөгөн окуя), PHP жана Docker менен кесилишет.

Төмөндөгү абзацтар конкреттүү мисалдарды колдонуу менен факторлорду колдонуунун жөнөкөй практикалык сыпаттамасын берет; эгер сиз бул тема боюнча көбүрөөк теорияны алгыңыз келсе, баштапкы булакка жогорудагы шилтемелерди басыңыз.

1. Codebase

Файлдарды серверлерге бирден жүктөө үчүн FTP жана FileZilla колдонуңуз, кодду өндүрүш серверинен башка жерде сактабаңыз.

Долбоор ар дайым бир коддук базага ээ болушу керек, башкача айтканда, бардык код бирден келет барып, репозиторий. Серверлер (өндүрүш, сахналаштыруу, test1, test2...) бир жалпы репозиторийдин бутактарынан кодду колдонушат. Ушундай жол менен биз коддун ырааттуулугуна жетишебиз.

2. Көз карандылыктар

Папкалардагы бардык китепканаларды түздөн-түз долбоордун тамырына жүктөп алыңыз. Жаңы кодду китепкананын учурдагы версиясы бар папкага өткөрүп берүү менен жаңыртууларды жасаңыз. Бардык керектүү утилиталарды түздөн-түз дагы 20 кызмат иштеп жаткан хост серверине орнотуңуз.

Долбоордо ар дайым көз карандылыктардын так түшүнүктүү тизмеси болушу керек (көз карандылык деп мен айлана-чөйрөнү да айтам). Бардык көз карандылыктар так аныкталган жана обочолонушу керек.
Мисал катары алалы композитор и ютуб.

композитор — PHPде китепканаларды орнотууга мүмкүндүк берген пакет менеджери. Композитор версияларды катуу же эркин көрсөтүүгө жана аларды так аныктоого мүмкүндүк берет. Серверде 20 түрдүү долбоорлор болушу мүмкүн жана ар биринде бири-биринен көз карандысыз пакеттердин жана китепканалардын жеке тизмеси болот.

ютуб — колдонмо иштей турган чөйрөнү аныктоого жана изоляциялоого мүмкүндүк берген утилита. Демек, композитор сыяктуу эле, бирок кылдаттык менен, биз колдонмо эмне менен иштээрин аныктай алабыз. PHPдин белгилүү бир версиясын тандап, кошумча эч нерсе кошпостон, долбоордун иштеши үчүн керектүү пакеттерди гана орнотуңуз. Эң негизгиси, кабыл алуучу машинанын жана башка долбоорлордун пакеттерине жана чөйрөсүнө кийлигишпей. Башкача айтканда, Docker аркылуу иштеген сервердеги бардык долбоорлор пакеттердин ар кандай топтомун жана такыр башка чөйрөнү колдоно алат.

3. Конфигурация

Конфигурацияларды түздөн-түз коддо туруктуулар катары сактаңыз. Сыноо сервери үчүн өзүнчө константалар, өндүрүш үчүн өзүнчө. Колдонмонун иштешин айлана-чөйрөгө жараша түздөн-түз долбоордун бизнес логикасына байлап, if else конструкцияларын колдонуңуз.

Конфигурациялар - Долбоорду жайгаштыруу бир гана ушундай жол менен айырмаланышы керек. Идеалында, конфигурациялар чөйрө өзгөрмөлөрү (env vars) аркылуу өтүшү керек.

Башкача айтканда, сиз .config.prod .config.local бир нече конфигурация файлдарын сактасаңыз да жана аларды жайгаштыруу учурунда .config деп өзгөртсөңүз да (тиркеме маалыматтарды окуй турган негизги конфигурация) - бул туура мамиле болбойт, анткени бул учурда конфигурациялардагы маалымат бардык тиркемелерди иштеп чыгуучулар үчүн жалпыга жеткиликтүү болот жана өндүрүш серверинен алынган маалыматтар бузулат. Бардык конфигурациялар түздөн-түз жайылтуу тутумунда (CI/CD) сакталышы керек жана жайгаштыруу учурунда белгилүү бир чөйрө үчүн зарыл болгон ар кандай маанилер менен ар кандай чөйрөлөр үчүн түзүлүшү керек.

4. Үчүнчү Тарап Кызматтары

Айлана-чөйрө менен катуу байланышта болуңуз, белгилүү чөйрөлөрдө бир эле кызматтар үчүн ар кандай байланыштарды колдонуңуз.

Чынында, бул пункт конфигурациялар жөнүндөгү пункт менен катуу дал келет, анткени бул пунктсуз кадимки конфигурация маалыматтарын жасоо мүмкүн эмес жана жалпысынан конфигурациялоо жөндөмү эч нерсеге түшөт.

Кезектеги серверлер, маалымат базалары, кэш кызматтары сыяктуу тышкы кызматтарга бардык туташуулар жергиликтүү чөйрө үчүн да, үчүнчү тараптын/өндүрүштүк чөйрө үчүн да бирдей болушу керек. Башкача айтканда, каалаган убакта, туташуу сабын өзгөртүү менен, мен №1 базага чалууларды колдонмо кодун өзгөртпөстөн №2 базага алмаштыра алам. Же болбосо, алдыга карап, мисал катары, кызматтын масштабын кеңейтүүдө кошумча кэш сервери үчүн кандайдыр бир өзгөчө жол менен байланышты көрсөтүүнүн кереги жок.

5. Куруу, чыгаруу, аткаруу

Серверде коддун акыркы версиясы гана болсун, чыгарууну артка кайтаруу мүмкүнчүлүгү жок. Дисктеги мейкиндикти толтуруунун кереги жок. Кодду ката менен өндүрүшкө чыгарам деп ойлогон адам жаман программист!

Жайгаштыруунун бардык этаптары бири-биринен бөлүнүшү керек.

Артка кайтууга мүмкүнчүлүк бар. Ыкчам жетүү режиминде сакталган тиркеменин эски көчүрмөлөрү (мурда эле чогултулган жана согушка даяр) менен релиздерди чыгарыңыз, ошондо каталар болгон учурда эски версияны калыбына келтире аласыз. Башкача айтканда, шарттуу түрдө папка бар релиздер жана папка учурдагы, жана ийгиликтүү жайгаштыруу жана папканы чогултуу кийин учурдагы ичинде жаткан жаңы релизге символикалык шилтеме менен байланышкан релиздер чыгаруу номеринин шарттуу аталышы менен.

Бул жерде биз Blue-Green жайгаштырууну эстейбиз, ал сизге кодду алмаштырууга гана эмес, ошондой эле бардык ресурстарды жана ал тургай, баарын артка кайтаруу мүмкүнчүлүгү бар чөйрөлөрдү алмаштырууга мүмкүндүк берет.

6. Процесстер

Колдонмонун абалын түздөн-түз колдонмонун ичинде сактаңыз. Сеанстарды тиркеменин RAM эсинде колдонуңуз. Мүмкүн болушунча үчүнчү тараптын кызматтарынын ортосунда бөлүшүүнү колдонуңуз. Тиркемеде бир гана процесс болушу мүмкүн экенине ишениңиз жана масштабга жол бербеңиз.

Сеанстарга келсек, маалыматтарды үчүнчү тараптын кызматтары (memcached, redis) көзөмөлдөгөн кэште гана сактаңыз, андыктан сизде 20 тиркеме процесси иштесе дагы, алардын ар бири кэшке кирип, кардар менен иштөөнү уланта алат. колдонуучу башка процессте колдонмо менен иштеген ошол эле абал. Бул ыкма менен, үчүнчү тараптын кызматтарынын канча нускасын колдонбоңуз, баары кадимкидей жана маалыматтарга жетүү менен көйгөйсүз иштейт.

7. Порт менен байланышуу

Веб сервер гана үчүнчү тараптын кызматтары менен иштөөнү билиши керек. Же андан да жакшысы, үчүнчү тараптын кызматтарын түздөн-түз веб-серверге орнотуңуз. Мисалы, Apache бир PHP модулу катары.
Сиздин бардык кызматтарыңыз кандайдыр бир дарекке жана портко (localgost:5432, localhost:3000, nginx:80, php-fpm:9000) жетүү аркылуу бири-бирине жеткиликтүү болушу керек, башкача айтканда, nginxтен мен php-fpm жана postgres жана php-fpmден postgres жана nginxке чейин жана чындыгында ар бир кызматтан мен башка кызматка кире алам. Ошентип, кызматтын жашоо жөндөмдүүлүгү башка кызматтын жашоо жөндөмдүүлүгүнө байланбайт.

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

Бир процесс менен иштеңиз, антпесе бир нече процесс бири-бири менен тил табыша албайт!

Масштабдоо үчүн орун калтырыңыз. Докер үйүрү бул үчүн эң сонун.
Docker Swarm - бул ар кандай машиналар жана бир эле машинадагы бир топ контейнерлер ортосундагы контейнерлердин кластерлерин түзүү жана башкаруу куралы.

Swarm колдонуп, мен ар бир процесске канча ресурстарды бөлөөрүмдү жана ошол эле кызматтын канча процессин ишке киргизээримди аныктай алам, ал эми ички баланстоочу, берилген портто маалыматтарды кабыл алып, аны процесстерге автоматтык түрдө проксилейт. Ошентип, сервердеги жүктөм көбөйгөнүн көрүп, мен дагы процесстерди кошо алам, ошону менен айрым процесстерге жүктөмдү азайтам.

9. Бир жолу колдонуу

Процесстер жана маалыматтар менен иштөө үчүн кезектерди колдонбоңуз. Бир процессти өлтүрүү бүт колдонмого таасир этиши керек. Эгер бир кызмат иштебей калса, баары иштебей калат.

Ар бир процессти жана кызматты каалаган убакта өчүрсө болот жана бул башка кызматтарга таасирин тийгизбеши керек (албетте, бул кызмат башка кызмат үчүн жеткиликтүү болбой калат дегенди билдирбейт, бирок андан кийин башка кызмат өчүрүлбөйт). Бардык процесстер акырындык менен токтотулушу керек, алар токтотулганда эч кандай маалымат бузулбайт жана кийинки жолу күйгүзгөндө система туура иштеши керек. То есть даже в случае аварийного завершения, данные не должны пострадать (тут подойдет механизм транзакций, запросы в бд работают только группами, и если хоть один запрос из группы не выполнился или выполнился с ошибкой, то не никакой другой запрос из группы в итоге не выполняется Чындыгында).

10. Колдонмолорду иштеп чыгуу/иштетүү паритети

Өндүрүш, сахналаштыруу жана тиркеменин жергиликтүү версиясы башка болушу керек. Өндүрүштө биз Yii Lite негизин, ал эми жергиликтүү Yii колдонобуз, ал өндүрүштө тезирээк иштейт!

Чындыгында, бардык жайылтуулар жана код менен иштөө дээрлик бирдей чөйрөдө болушу керек (биз физикалык жабдыктар жөнүндө сөз кылбайбыз). Ошондой эле, ар бир иштеп чыгуучу кызматкер керек болсо, өндүрүшкө кодду жайгаштыра алышы керек, ал эми атайын даярдыктан өткөн devops бөлүмү эмес, атайын күчтүн аркасында гана тиркемени өндүрүшкө көтөрө алат.

Бул жагынан бизге Докер да жардам берет. Эгерде бардык мурунку пункттар сакталса, докерди колдонуу чөйрөнү өндүрүштө да, жергиликтүү машинада да жайылтуу процессин бир же эки буйрукту киргизүүгө алып келет.

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

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

1. Биз койдук Ларадок

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

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

Ларадок жөнүндө айта турган болсом, бул абдан сонун нерсе, анда көптөгөн контейнерлер жана жардамчы нерселер бар. Бирок мен Ларадокту ашыкча болгондуктан, өндүрүштө өзгөртүүсүз колдонууну сунуш кылбайм. Ларадоктогу мисалдардын негизинде өзүңүздүн контейнерлериңизди түзгөнүңүз жакшы, бул алда канча оптималдаштырылат, анткени бир эле учурда ал жерде болгон нерселердин бардыгы эч кимге керек эмес.

2. Ларадокту биздин тиркемени иштетүү үчүн конфигурациялаңыз.

cd laradock && 
cp env-example .env

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

2.1. Кээ бир редактордо habr каталогун (ларадок клондолгон негизги папка) ачыңыз. (Менин PHPStorm учурда)

Бул этапта биз долбоорго ат гана беребиз.

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

2.2. Жумуш мейкиндигинин сүрөтүн ишке киргизиңиз. (Сиздин учурда, сүрөттөрдү куруу үчүн бир аз убакыт талап кылынат)
Workspace - бул иштеп чыгуучунун атынан алкак менен иштөө үчүн атайын даярдалган сүрөт.

Колдонуу менен контейнердин ичине киребиз

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

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

2.3. Laravel орнотуу

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

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

2.4. Орнотуудан кийин, биз долбоор менен каталог түзүлгөнүн текшерип, түзүүнү өлтүрөбүз.

ls
exit
docker-compose down

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

2.5. Келгиле, PHPStorm'го кайтып баралы жана .env файлында laravel тиркемебизге туура жолду орнотолу.

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

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

Баары жайындабы, текшерип көрөлү.

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

Ыңгайлуу болуу үчүн, мен Git үчүн кандайдыр бир визуалдык интерфейсти колдонууну сунуштайм, менин учурда бул GitKraken. (бул жерде шилтеме шилтемеси бар)

4. Келгиле, ишке киргизели!

Баштоодон мурун, 80 жана 443 портторунда эч нерсе илинип турбагандыгын текшериңиз.

docker-compose up -d nginx php-fpm

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

Ошентип, биздин долбоор 3 өзүнчө кызматтан турат:

  • nginx - веб-сервер
  • php-fpm - веб-серверден суроо-талаптарды кабыл алуу үчүн php
  • жумушчу мейкиндиги - иштеп чыгуучулар үчүн php

Учурда биз 4ден 12 пунктка жооп берген тиркемени түздүк, атап айтканда:

1. Codebase — бардык код бир репозиторийде (кичинекей эскертүү: laravel долбооруна докерди кошуу туура болушу мүмкүн, бирок бул маанилүү эмес).

2. Көз карандылык - Биздин бардык көз карандылыктар ачык түрдө application/composer.json жана ар бир контейнердин ар бир Докер файлында жазылган.

3. Backing Services — Кызматтардын ар бири (php-fom, nigx, жумушчу мейкиндиги) өз жашоосун жашайт жана сырттан туташкан жана бир кызмат менен иштегенде экинчисине таасир этпейт.

4. жараяндар — ар бир кызмат бир процесс. Кызматтардын ар бири ички абалын сактабайт.

5. Порт туташуусу

docker ps

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

Көрүнүп тургандай, ар бир кызмат өз портунда иштейт жана башка бардык кызматтарга жеткиликтүү.

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

Docker бизге бир эле кызматтардын бир нече процесстерин алардын ортосунда автоматтык жүктөмдү тең салмактуулук менен чыгарууга мүмкүндүк берет.

Келгиле, контейнерлерди токтотуп, желек аркылуу өткөрөлү --масштаб

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

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

Көрүнүп тургандай, php-fpm контейнеринин көчүрмөлөрү түзүлдү. Бул контейнер менен иштөөдө эч нерсени өзгөртүүнүн кереги жок. Ошондой эле биз ага 9000 портуна кирүүнү улантабыз жана Docker биз үчүн контейнерлердин ортосундагы жүктү жөнгө салат.

7. Бир жолу колдонуу - ар бир контейнер экинчисине зыян келтирбестен өлтүрүлүшү мүмкүн. Контейнерди токтотуу же кайра иштетүү кийинки ишке киргизүү учурунда колдонмонун иштешине таасирин тийгизбейт. Ар бир контейнерди каалаган убакта көтөрсө болот.

8. Колдонмолорду иштеп чыгуу/иш паритети - Биздин бардык чөйрөлөр бирдей. Системаны өндүрүштөгү серверде иштетүү менен, буйруктарыңызда эч нерсени өзгөртүүгө туура келбейт. Баары ушундай эле Докерге негизделет.

9. Каттоо — бул контейнерлердеги бардык журналдар агымга өтөт жана Docker консолунда көрүнөт. (бул учурда, чындыгында, башка үй идиштери менен, эгер сиз кам көрбөсөңүз, андай болбошу мүмкүн)

 docker-compose logs -f

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

Бирок PHP жана Nginxдеги Демейки маанилер файлга журналдарды да жазат. 12 факторду канааттандыруу үчүн, бул зарыл жап журналдарды ар бир контейнердин конфигурацияларында өзүнчө файлга жазуу.

Docker ошондой эле журналдарды жөн гана stdoutке эмес, мен жогоруда айткан graylog сыяктуу нерселерге да жөнөтүү мүмкүнчүлүгүн берет. Graylog ичинде биз журналдарды каалагандай иштете алабыз жана биздин колдонмо муну эч кандай байкабайт.

10. Администрациянын милдеттери — башкаруунун бардык милдеттери 12 фактордук тиркеменин жаратуучулары каалагандай, чебер куралдын аркасында laravel тарабынан чечилет.

Мисал катары, мен кээ бир буйруктар кантип аткарыларын көрсөтөм.
Биз контейнерге киребиз.

 
docker-compose exec workspace bash
php artisan list

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

Эми биз каалаган буйрукту колдоно алабыз. (сураныч, биз маалымат базасын жана кэшти конфигурациялаган жокпуз, ошондуктан буйруктардын жарымы туура аткарылбайт, анткени алар кэш жана маалымат базасы менен иштөөгө ылайыкталган).

PHP жана докердеги мисалдар менен он эки фактордук колдонмонун методологиясына негизделген тиркемелерди иштеп чыгуу жана көк-жашыл жайылтуу

11. Конфигурациялар жана 12. Куруу, бошотуу, чуркоо

Мен бул бөлүгүн Көк-Жашыл жайылтууга арнагым келди, бирок бул макала үчүн өтө кеңири болуп чыкты. Бул тууралуу өзүнчө макала жазам.

Кыскача айтканда, концепция CI/CD системаларына негизделген Jenkins и Gitlab CI. Экөөндө тең белгилүү бир чөйрө менен байланышкан чөйрө өзгөрмөлөрүн орното аласыз. Демек, бул жагдайда с пункту аткарылат Конфигурациялар.

Жана кеп жөнүндө Куруу, бошотуу, чуркоо аты менен камтылган функциялар менен чечилет түтүк.

түтүк монтаждоо, чыгаруу жана аткаруу этаптарын бөлүп көрсөтүү менен, жайылтуу процессин көптөгөн этаптарга бөлүүгө мүмкүндүк берет. Ошондой эле Pipeline'да сиз камдык көчүрмөлөрдү жана чындыгында каалаган нерсени түзө аласыз. Бул чексиз потенциалы бар курал.

Колдонмонун коду төмөнкү жерде Github.
Бул репозиторийди клондоодо субмодулду инициализациялоону унутпаңыз.

P.S.: Бул ыкмалардын бардыгын башка утилиталар жана программалоо тилдери менен колдонсо болот. Эң негизгиси, маңызы айырмаланбашы керек.

Source: www.habr.com

Комментарий кошуу