ProHoster > Blogs > AdministrÄcija > Lietojumprogrammu izstrÄde un zili zaÄ¼Ä izvietoÅ”ana, pamatojoties uz divpadsmitfaktoru lietotÅu metodoloÄ£iju ar piemÄriem php un docker
Lietojumprogrammu izstrÄde un zili zaÄ¼Ä izvietoÅ”ana, pamatojoties uz divpadsmitfaktoru lietotÅu metodoloÄ£iju ar piemÄriem php un docker
VienkÄrÅ”iem vÄrdiem sakot, Å”is dokuments ir izstrÄdÄts, lai vienkÄrÅ”otu SaaS lietojumprogrammu izstrÄdi, palÄ«dzot informÄt izstrÄdÄtÄjus un DevOps inženierus par problÄmÄm un praksÄm, ar kurÄm visbiežÄk nÄkas saskarties mÅ«sdienu lietojumprogrammu izstrÄdÄ.
Divpadsmit faktoru lietotni var lietot lietojumprogrammÄm, kas rakstÄ«tas jebkurÄ programmÄÅ”anas valodÄ un izmantojot jebkuru atbalsta pakalpojumu kombinÄciju (datu bÄzes, ziÅojumu rindas, keÅ”atmiÅas utt.).
ÄŖsumÄ par faktoriem, uz kuriem Ŕī metodoloÄ£ija ir balstÄ«ta:
Kodu bÄze ā Viena koda bÄze, kas tiek izsekota versiju kontrolÄ ā vairÄkas izvietoÅ”anas
AtkarÄ«bas - Skaidri deklarÄjiet un izolÄjiet atkarÄ«bas
Zili zaÄ¼Ä izvietoÅ”ana ir lietojumprogrammas piegÄdes metode ražoÅ”ana tÄdÄ veidÄ, lai gala klients neredzÄtu nekÄdas izmaiÅas no viÅa puses. Citiem vÄrdiem sakot, lietojumprogrammas izvietoÅ”ana ar nulli dÄ«kstÄves.
SÄkumÄ ir 2 fiziski serveri ar absolÅ«ti vienÄdu kodu, lietojumprogrammu, projektu un ir marÅ”rutÄtÄjs (balansÄtÄjs).
MarÅ”rutÄtÄjs sÄkotnÄji visus pieprasÄ«jumus novirza uz vienu no serveriem (zaļŔ).
BrÄ«dÄ«, kad nepiecieÅ”ams vÄlreiz izlaist, viss projekts tiek atjauninÄts citÄ serverÄ« (zils), kas paÅ”laik neapstrÄdÄ nevienu pieprasÄ«jumu.
Kad kods ir ieslÄgts zils serveris ir pilnÄ«bÄ atjauninÄts, marÅ”rutÄtÄjam tiek dota komanda pÄrslÄgties zaļŔ par zils serveris.
Tagad visi klienti redz koda rezultÄtu zils serveris.
KÄdu laiku, zaļŔ serveris kalpo kÄ rezerves kopija neveiksmÄ«gas izvietoÅ”anas gadÄ«jumÄ zils serveri un kļūmes un kļūdu gadÄ«jumÄ marÅ”rutÄtÄjs pÄrslÄdz lietotÄja plÅ«smu atpakaļ uz zaļŔ serveris ar veco stabilo versiju, un jaunais kods tiek nosÅ«tÄ«ts pÄrskatÄ«Å”anai un pÄrbaudei.
Un procesa beigÄs tas tiek atjauninÄts tÄdÄ paÅ”Ä veidÄ zaļŔ serveris. Un pÄc tÄ atjauninÄÅ”anas marÅ”rutÄtÄjs pÄrslÄdz pieprasÄ«jumu plÅ«smu atpakaļ uz zaļŔ serveris.
Tas viss izskatÄs ļoti labi, un no pirmÄ acu uzmetiena ar to nevajadzÄtu bÅ«t nekÄdÄm problÄmÄm.
Bet, tÄ kÄ mÄs dzÄ«vojam mÅ«sdienu pasaulÄ, klasiskajÄ shÄmÄ norÄdÄ«tÄ iespÄja ar fizisko pÄrslÄgÅ”anu mums nav piemÄrota. PagaidÄm ierakstiet informÄciju, mÄs pie tÄs atgriezÄ«simies vÄlÄk.
Slikts un labs padoms
AtbildÄ«bas noraidÄ«Å”ana: ZemÄk esoÅ”ie piemÄri parÄda manis izmantotÄs utilÄ«tas/metodoloÄ£ijas, jÅ«s varat izmantot pilnÄ«gi jebkuras alternatÄ«vas ar lÄ«dzÄ«gÄm funkcijÄm.
LielÄkÄ daļa piemÄru vienÄ vai otrÄ veidÄ krustosies ar tÄ«mekļa izstrÄdi (tas ir pÄrsteigums), ar PHP un Docker.
TurpmÄkajÄs rindkopÄs ir sniegts vienkÄrÅ”s praktisks faktoru izmantoÅ”anas apraksts, izmantojot konkrÄtus piemÄrus; ja vÄlaties iegÅ«t vairÄk teorijas par Å”o tÄmu, izmantojiet iepriekÅ” norÄdÄ«tÄs saites uz sÄkotnÄjo avotu.
1. Kodu bÄze
Izmantojiet FTP un FileZilla, lai pa vienam augÅ”upielÄdÄtu failus serveros, neglabÄjiet kodu nekur citur kÄ tikai ražoÅ”anas serverÄ«.
Projektam vienmÄr jÄbÅ«t vienai koda bÄzei, tas ir, viss kods nÄk no viena Git krÄtuve. Serveri (ražoÅ”ana, iestudÄÅ”ana, test1, test2...) izmanto kodu no viena kopÄ«ga repozitorija filiÄlÄm. TÄdÄ veidÄ mÄs panÄkam koda konsekvenci.
2. Atkarības
LejupielÄdÄjiet visas mapÄs esoÅ”Äs bibliotÄkas tieÅ”i projekta saknÄ. Veiciet atjauninÄjumus, vienkÄrÅ”i pÄrsÅ«tot jauno kodu uz mapi ar paÅ”reizÄjo bibliotÄkas versiju. InstalÄjiet visas nepiecieÅ”amÄs utilÄ«tas tieÅ”i resursdatora serverÄ«, kur darbojas vÄl 20 pakalpojumi.
Projektam vienmÄr jÄbÅ«t skaidri saprotamam atkarÄ«bu sarakstam (ar atkarÄ«bÄm es domÄju arÄ« vidi). VisÄm atkarÄ«bÄm jÄbÅ«t skaidri definÄtÄm un izolÄtÄm.
Å emsim par piemÄru Komponists Šø dokers.
Komponists ā pakotÅu pÄrvaldnieks, kas ļauj instalÄt bibliotÄkas PHP. Composer ļauj precÄ«zi vai brÄ«vi norÄdÄ«t versijas un tÄs skaidri definÄt. ServerÄ« var bÅ«t 20 dažÄdi projekti, un katram no tiem bÅ«s personisks pakotÅu un bibliotÄku saraksts, kas nav atkarÄ«gs no otra.
dokers ā utilÄ«ta, kas ļauj definÄt un izolÄt vidi, kurÄ lietojumprogramma darbosies. AttiecÄ«gi, tÄpat kÄ ar komponistu, bet pamatÄ«gÄk, varam noteikt, ar ko aplikÄcija darbojas. IzvÄlieties konkrÄtu PHP versiju, instalÄjiet tikai tÄs pakotnes, kas nepiecieÅ”amas, lai projekts darbotos, nepievienojot neko papildus. Un pats galvenais, neiejaucoties resursdatora un citu projektu pakotnÄs un vidÄ. Tas ir, visi projekti serverÄ«, kas darbojas caur Docker, var izmantot pilnÄ«gi jebkuru pakotÅu kopu un pilnÄ«gi atŔķirÄ«gu vidi.
3. KonfigurÄcija
SaglabÄjiet konfigurÄcijas kÄ konstantes tieÅ”i kodÄ. AtseviŔķas konstantes testa serverim, atseviŔķas ražoÅ”anai. Piesaistiet lietojumprogrammas darbÄ«bu atkarÄ«bÄ no vides tieÅ”i projekta biznesa loÄ£ikÄ, izmantojot if else konstrukcijas.
KonfigurÄcijas - tas ir vienÄ«gais veids, kÄ projektu izvietoÅ”anai vajadzÄtu atŔķirties. IdeÄlÄ gadÄ«jumÄ konfigurÄcijas jÄnodod caur vides mainÄ«gajiem (env vars).
Tas ir, pat ja saglabÄjat vairÄkus konfigurÄcijas failus .config.prod .config.local un izvietoÅ”anas laikÄ pÄrdÄvÄjat tos par .config (galveno konfigurÄciju, no kuras lietojumprogramma nolasa datus), tÄ nebÅ«s pareizÄ pieeja, jo Å”ajÄ gadÄ«jumÄ informÄcija no konfigurÄcijÄm bÅ«s publiski pieejama visiem lietojumprogrammu izstrÄdÄtÄjiem, un dati no ražoÅ”anas servera tiks apdraudÄti. Visas konfigurÄcijas ir jÄsaglabÄ tieÅ”i izvietoÅ”anas sistÄmÄ (CI/CD) un jÄÄ£enerÄ dažÄdÄm vidÄm ar dažÄdÄm vÄrtÄ«bÄm, kas nepiecieÅ”amas konkrÄtai videi izvietoÅ”anas laikÄ.
4. TreÅ”Äs puses pakalpojumi
Esiet stingri saistÄ«ts ar vidi, izmantojiet dažÄdus savienojumus vieniem un tiem paÅ”iem pakalpojumiem noteiktÄs vidÄs.
Faktiski Å”is punkts lielÄ mÄrÄ pÄrklÄjas ar punktu par konfigurÄcijÄm, jo āābez Ŕī punkta nevar izveidot normÄlus konfigurÄcijas datus, un kopumÄ konfigurÄÅ”anas iespÄja samazinÄsies.
Visiem savienojumiem ar ÄrÄjiem pakalpojumiem, piemÄram, rindu serveriem, datu bÄzÄm, keÅ”atmiÅas pakalpojumiem, ir jÄbÅ«t vienÄdiem gan lokÄlajÄ vidÄ, gan treÅ”Äs puses/ražoÅ”anas vidÄ. Citiem vÄrdiem sakot, jebkurÄ laikÄ, mainot savienojuma virkni, es varu aizstÄt zvanus uz bÄzi #1 ar bÄzi #2, nemainot lietojumprogrammas kodu. Vai arÄ«, skatoties uz priekÅ”u, piemÄram, mÄrogojot pakalpojumu, jums nebÅ«s Ä«paÅ”i jÄnorÄda savienojums papildu keÅ”atmiÅas serverim.
5. Veidot, atbrīvot, izpildīt
ServerÄ« ir tikai koda galÄ«gÄ versija, bez iespÄjas atsaukt laidienu. Nav nepiecieÅ”ams aizpildÄ«t vietu diskÄ. Ikviens, kurÅ” domÄ, ka var izlaist kodu ražoÅ”anÄ ar kļūdu, ir slikts programmÄtÄjs!
Visiem izvietoÅ”anas posmiem jÄbÅ«t atdalÄ«tiem vienam no otra.
Ir iespÄja atkÄpties. Izveidojiet izlaidumus ar vecÄm lietojumprogrammas kopijÄm (jau saliktas un gatavas cÄ«Åai), kas saglabÄtas ÄtrÄ piekļuvÄ, lai kļūdu gadÄ«jumÄ varÄtu atjaunot veco versiju. Tas ir, nosacÄ«ti ir mape izlaidumi un mapi strÄvaun pÄc veiksmÄ«gas mapes izvietoÅ”anas un montÄžas strÄva ir saistÄ«ta ar simbolisku saiti uz jauno versiju, kas atrodas iekÅ”pusÄ izlaidumi ar parasto izlaiduma numura nosaukumu.
Å eit mÄs atceramies Blue-Green izvietoÅ”anu, kas ļauj ne tikai pÄrslÄgties starp kodiem, bet arÄ« pÄrslÄgties starp visiem resursiem un pat vidÄm ar iespÄju visu atsaukt.
6.Procesi
SaglabÄjiet lietojumprogrammas stÄvokļa datus tieÅ”i paÅ”Ä lietojumprogrammÄ. Izmantojiet sesijas paÅ”as lietojumprogrammas RAM. Izmantojiet pÄc iespÄjas vairÄk koplietoÅ”anas starp treÅ”o puÅ”u pakalpojumiem. Paļaujieties uz to, ka lietojumprogrammai var bÅ«t tikai viens process un neļaujiet mÄrogot.
Kas attiecas uz sesijÄm, glabÄjiet datus tikai keÅ”atmiÅÄ, kuru kontrolÄ treÅ”Äs puses pakalpojumi (memcached, redis), tÄpÄc pat tad, ja jums darbojas 20 lietojumprogrammu procesi, jebkurÅ” no tiem, piekļūstot keÅ”atmiÅai, varÄs turpinÄt darbu ar klientu tas pats stÄvoklis, kurÄ lietotÄjs strÄdÄja ar lietojumprogrammu citÄ procesÄ. Izmantojot Å”o pieeju, izrÄdÄs, ka neatkarÄ«gi no tÄ, cik treÅ”o puÅ”u pakalpojumu kopiju jÅ«s izmantojat, viss darbosies normÄli un bez problÄmÄm ar piekļuvi datiem.
7. Portu iesieŔana
Tikai tÄ«mekļa serverim jÄzina, kÄ strÄdÄt ar treÅ”o puÅ”u pakalpojumiem. Vai vÄl labÄk, instalÄjiet treÅ”Äs puses pakalpojumus tieÅ”i tÄ«mekļa serverÄ«. PiemÄram, kÄ PHP modulis programmÄ Apache.
Visiem jÅ«su pakalpojumiem ir jÄbÅ«t savstarpÄji pieejamiem, izmantojot piekļuvi kÄdai adresei un portam (localgost:5432, localhost:3000, nginx:80, php-fpm:9000), tas ir, no nginx es varu piekļūt gan php- fpm, gan postgres, un no php-fpm lÄ«dz postgres un nginx, un faktiski no katra pakalpojuma es varu piekļūt citam pakalpojumam. TÄdÄ veidÄ pakalpojuma dzÄ«votspÄja nav saistÄ«ta ar cita pakalpojuma dzÄ«votspÄju.
8. ParalÄlisms
StrÄdÄjiet ar vienu procesu, pretÄjÄ gadÄ«jumÄ vairÄki procesi nevarÄs saprasties viens ar otru!
AtstÄjiet vietu mÄrogoÅ”anas palielinÄÅ”anai. Docker spiets tam ir lieliski piemÄrots.
Docker Swarm ir rÄ«ks, lai izveidotu un pÄrvaldÄ«tu konteineru kopas gan starp dažÄdÄm iekÄrtÄm, gan konteineru kopumu vienÄ un tajÄ paÅ”Ä maŔīnÄ.
Izmantojot spietu, varu noteikt, cik resursu pieŔķirÅ”u katram procesam un cik viena un tÄ paÅ”a servisa procesus palaidÄ«Å”u, un iekÅ”Äjais balansÄtÄjs, saÅemot datus par doto portu, automÄtiski tos proksis uz procesiem. TÄdÄjÄdi, redzot, ka servera slodze ir palielinÄjusies, varu pievienot vairÄk procesu, tÄdÄjÄdi samazinot atseviŔķu procesu slodzi.
9. Vienreizlietojamība
Neizmantojiet rindas, lai strÄdÄtu ar procesiem un datiem. Viena procesa nogalinÄÅ”anai vajadzÄtu ietekmÄt visu lietojumprogrammu. Ja viens serviss pazÅ«d, viss pazÅ«d.
Katrs process un pakalpojums var tikt izslÄgts jebkurÄ laikÄ, un tam nevajadzÄtu ietekmÄt citus pakalpojumus (protams, tas nenozÄ«mÄ, ka pakalpojums nebÅ«s pieejams citam pakalpojumam, bet arÄ« to, ka pÄc Ŕī pakalpojuma netiks izslÄgts cits pakalpojums). Visi procesi ir jÄpÄrtrauc graciozi, lai, tos pÄrtraucot, netiktu sabojÄti dati un sistÄma darbotos pareizi nÄkamajÄ ieslÄgÅ”anas reizÄ. Tas ir, pat avÄrijas pÄrtraukÅ”anas gadÄ«jumÄ dati nedrÄ«kst tikt bojÄti (Å”eit ir piemÄrots transakciju mehÄnisms, vaicÄjumi datu bÄzÄ darbojas tikai grupÄs un, ja vismaz viens vaicÄjums no grupas neizdodas vai tiek izpildÄ«ts ar kļūda, tad neviens cits vaicÄjums no grupas galu galÄ faktiski neizdodas).
Lietojumprogrammas ražoÅ”anai, iestudÄjumam un vietÄjai versijai ir jÄbÅ«t atŔķirÄ«gai. RažoÅ”anÄ mÄs izmantojam Yii Lite ietvaru un lokÄli Yii, lai ražoÅ”anÄ tas darbotos ÄtrÄk!
PatiesÄ«bÄ visÄm izvietoÅ”anÄm un darbam ar kodu vajadzÄtu bÅ«t gandrÄ«z identiskÄ vidÄ (mÄs nerunÄjam par fizisko aparatÅ«ru). TÄpat jebkuram izstrÄdes darbiniekam ir jÄbÅ«t iespÄjai ievietot kodu ražoÅ”anÄ, ja nepiecieÅ”ams, nevis kÄdai Ä«paÅ”i apmÄcÄ«tai devops nodaļai, kas, tikai pateicoties Ä«paÅ”ajam spÄkam, var pacelt lietojumprogrammu ražoÅ”anÄ.
Docker mums palÄ«dz arÄ« Å”ajÄ jautÄjumÄ. Ja tiek ievÄroti visi iepriekÅ”Äjie punkti, izmantojot docker, vides izvietoÅ”anas process gan ražoÅ”anÄ, gan vietÄjÄ maŔīnÄ tiks ievadÄ«ts lÄ«dz vienas vai divu komandu ievadÄ«Å”anai.
11. Baļķi
MÄs ierakstÄm žurnÄlus failos un datu bÄzÄs! MÄs netÄ«rÄm failus un datu bÄzes no žurnÄliem. Nopirksim cieto disku ar 9000 Peta baitiem, un tas ir labi.
Visi žurnÄli jÄuzskata par notikumu plÅ«smu. Pati lietojumprogramma nedrÄ«kst bÅ«t iesaistÄ«ta žurnÄlu apstrÄdÄ. ŽurnÄli ir jÄizvada vai nu uz stdout, vai jÄnosÅ«ta, izmantojot protokolu, piemÄram, udp, lai darbs ar žurnÄliem neradÄ«tu lietojumprogrammai problÄmas. graylog ir labs Å”im. Graylog, kas saÅem visus žurnÄlus caur udp (Å”is protokols neprasa gaidÄ«t atbildi par veiksmÄ«gu paketes saÅemÅ”anu), nekÄdÄ veidÄ netraucÄ lietojumprogrammai un nodarbojas tikai ar žurnÄlu strukturÄÅ”anu un apstrÄdi. Lietojumprogrammas loÄ£ika nemainÄs, lai strÄdÄtu ar Å”ÄdÄm pieejÄm.
12. AdministrÄcijas uzdevumi
Lai atjauninÄtu datus, datu bÄzes utt., izmantojiet API atseviŔķi izveidotu galapunktu, izpildot to 2 reizes pÄc kÄrtas, viss tiks dublÄts. Bet jÅ«s neesat stulbs, jÅ«s nenoklikŔķinÄsit divreiz, un mums nav vajadzÄ«ga migrÄcija.
Visi administrÄÅ”anas uzdevumi ir jÄveic tajÄ paÅ”Ä vidÄ, kurÄ ir viss kods, laidiena lÄ«menÄ«. Tas ir, ja mums ir jÄmaina datu bÄzes struktÅ«ra, tad mÄs to nedarÄ«sim manuÄli, mainot kolonnu nosaukumus un pievienojot jaunas, izmantojot dažus vizuÄlus datu bÄzes pÄrvaldÄ«bas rÄ«kus. TÄdÄm lietÄm veidojam atseviŔķus skriptus - migrÄcijas, kuras tiek izpildÄ«tas visur un visÄs vidÄs vienÄdi ar kopÄ«gu un saprotamu rezultÄtu. Visiem pÄrÄjiem uzdevumiem, piemÄram, projekta aizpildÄ«Å”anai ar datiem, jÄizmanto lÄ«dzÄ«gas metodoloÄ£ijas.
P.S. Visi piemÄri tika veikti operÄtÄjsistÄmÄ MacOS. LielÄkÄ daļa no tÄm ir piemÄrotas arÄ« Linux. Windows lietotÄji, piedodiet, bet es ilgu laiku neesmu strÄdÄjis ar Windows.
IedomÄsimies situÄciju, kad mÅ«su datorÄ nav instalÄta neviena PHP versija un nekas nav instalÄts.
InstalÄjiet jaunÄkÄs docker un docker-compose versijas. (to var atrast internetÄ)
git clone https://github.com/Laradock/laradock.git &&
ls
Par Laradoku teikÅ”u, ka ļoti forÅ”a lieta, kurÄ ir daudz konteineru un palÄ«glietas. Bet es neieteiktu izmantot Laradock kÄ tÄdu bez modifikÄcijÄm ražoÅ”anÄ, jo tÄ ir dublÄjoÅ”a. LabÄk ir izveidot savus konteinerus, pamatojoties uz piemÄriem LaradokÄ, tas bÅ«s daudz optimizÄtÄk, jo nevienam nav vajadzÄ«gs viss, kas tur ir vienlaikus.
2. KonfigurÄjiet Laradock, lai palaistu mÅ«su lietojumprogrammu.
ÄrtÄ«bas labad es iesaku izmantot kÄdu Git vizuÄlo saskarni, manÄ gadÄ«jumÄ tÄ ir GitKraken. (Å”eit ir novirzÄ«Å”anas saite)
4. SÄksim palaist!
Pirms palaiÅ”anas pÄrliecinieties, vai 80. un 443. portos nekas nekarÄjas.
docker-compose up -d nginx php-fpm
TÄdÄjÄdi mÅ«su projekts sastÄv no 3 atseviŔķiem pakalpojumiem:
nginx - tīmekļa serveris
php-fpm - php pieprasÄ«jumu saÅemÅ”anai no tÄ«mekļa servera
darbvieta - php izstrÄdÄtÄjiem
Å obrÄ«d esam panÄkuÅ”i, ka esam izveidojuÅ”i aplikÄciju, kas atbilst 4 punktiem no 12, proti:
1. Kodu bÄze ā viss kods atrodas vienÄ repozitorijÄ (maza piezÄ«me: varÄtu bÅ«t pareizi pievienot docker iekÅ”Ä laravel projektu, bet tas nav svarÄ«gi).
2. AtkarÄ«bas - Visas mÅ«su atkarÄ«bas ir skaidri norÄdÄ«tas failÄ application/composer.json un katrÄ katra konteinera Docker failÄ.
3. Atbalsta pakalpojumi ā Katrs no pakalpojumiem (php-fom, nignx, workspace) dzÄ«vo savu dzÄ«vi un ir savienots no Ärpuses un, strÄdÄjot ar vienu pakalpojumu, otrs netiks ietekmÄts.
4. Procesi ā katrs pakalpojums ir viens process. Katrs no pakalpojumiem neuztur iekÅ”Äjo stÄvokli.
5. Portu iesieŔana
docker ps
KÄ redzam, katrs pakalpojums darbojas savÄ portÄ un ir pieejams visiem pÄrÄjiem pakalpojumiem.
6. ParalÄlisms
Docker ļauj mums izveidot vairÄkus vienu un to paÅ”u pakalpojumu procesus ar automÄtisku slodzes lÄ«dzsvaroÅ”anu starp tiem.
ApturÄsim konteinerus un izlaidÄ«sim tos caur karogu -- mÄrogs
docker-compose down &&
docker-compose up -d --scale php-fpm=3 nginx php-fpm
KÄ redzam, ir izveidotas php-fpm konteinera kopijas. StrÄdÄjot ar Å”o konteineru, mums nekas nav jÄmaina. MÄs turpinÄm tai piekļūt arÄ« ostÄ 9000, un Docker regulÄ mÅ«su vietÄ slodzi starp konteineriem.
7. VienreizlietojamÄ«ba - katru konteineru var nogalinÄt, nekaitÄjot otram. Konteinera apturÄÅ”ana vai restartÄÅ”ana neietekmÄs lietojumprogrammas darbÄ«bu turpmÄko palaiÅ”anas laikÄ. Katru konteineru var arÄ« pacelt jebkurÄ laikÄ.
8. Lietojumprogrammu izstrÄdes/darbÄ«bas paritÄte - visas mÅ«su vides ir vienÄdas. Palaižot sistÄmu ražoÅ”anas serverÄ«, jums nekas nebÅ«s jÄmaina savÄs komandÄs. TÄdÄ paÅ”Ä veidÄ viss bÅ«s balstÄ«ts uz Docker.
9. MežizstrÄde ā visi žurnÄli Å”ajos konteineros tiek straumÄti un ir redzami Docker konsolÄ. (Å”ajÄ gadÄ«jumÄ ar citiem mÄjÄs gatavotiem konteineriem tas var nebÅ«t tÄ, ja jÅ«s par to nerÅ«pÄjaties)
docker-compose logs -f
Bet ir tÄda problÄma, ka PHP un Nginx noklusÄjuma vÄrtÄ«bas arÄ« ieraksta žurnÄlus failÄ. Lai izpildÄ«tu 12 faktorus, tas ir nepiecieÅ”ams atspÄjot ierakstot žurnÄlus failÄ katra konteinera konfigurÄcijÄs atseviŔķi.
Docker nodroÅ”ina arÄ« iespÄju nosÅ«tÄ«t žurnÄlus ne tikai uz stdout, bet arÄ« uz tÄdÄm lietÄm kÄ graylog, ko es minÄju iepriekÅ”. Graylog iekÅ”ienÄ mÄs varam darbinÄt žurnÄlus pÄc saviem ieskatiem, un mÅ«su lietojumprogramma to nekÄdÄ veidÄ nepamanÄ«s.
10. AdministrÄcijas uzdevumi ā visus administrÄÅ”anas uzdevumus laravel risina, pateicoties amatnieka rÄ«kam, tieÅ”i tÄ, kÄ to vÄlÄtos 12 faktoru aplikÄcijas veidotÄji.
KÄ piemÄru es parÄdÄ«Å”u, kÄ tiek izpildÄ«tas dažas komandas.
MÄs ieejam konteinerÄ.
docker-compose exec workspace bash
php artisan list
Tagad mÄs varam izmantot jebkuru komandu. (lÅ«dzu, Åemiet vÄrÄ, ka mÄs nekonfigurÄjÄm datu bÄzi un keÅ”atmiÅu, tÄpÄc puse komandu netiks izpildÄ«tas pareizi, jo tÄs ir paredzÄtas darbam ar keÅ”atmiÅu un datu bÄzi).
11. KonfigurÄcijas un 12. gads. Veidojiet, atlaidiet, palaist
Es gribÄju Å”o daļu veltÄ«t Blue-Green Deployment, taÄu tÄ izrÄdÄ«jÄs pÄrÄk plaÅ”a Å”im rakstam. Par to es uzrakstÄ«Å”u atseviŔķu rakstu.
ÄŖsumÄ, koncepcijas pamatÄ ir tÄdas CI/CD sistÄmas kÄ Jenkins Šø Gitlab CI. Abos gadÄ«jumos varat iestatÄ«t vides mainÄ«gos, kas saistÄ«ti ar noteiktu vidi. AttiecÄ«gi Å”ajÄ situÄcijÄ c) punkts tiks izpildÄ«ts KonfigurÄcijas.
Un punkts par Veidojiet, atlaidiet, palaist tiek atrisinÄts ar iebÅ«vÄtÄm funkcijÄm ar nosaukumu Cauruļvads.
Cauruļvads ļauj sadalÄ«t izvietoÅ”anas procesu daudzos posmos, izceļot montÄžas, izlaiÅ”anas un izpildes posmus. ArÄ« programmÄ Pipeline varat izveidot dublÄjumus un jebko. Å is ir rÄ«ks ar neierobežotu potenciÄlu.