Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

L-ewwel, ftit teorija. X'ġara L-App tat-Tnax-il Fatturi?

Fi kliem sempliċi, dan id-dokument huwa ddisinjat biex jissimplifika l-iżvilupp ta 'applikazzjonijiet SaaS, jgħin billi jinforma lill-iżviluppaturi u lill-inġiniera DevOps dwar il-problemi u l-prattiki li l-aktar spiss jiltaqgħu magħhom fl-iżvilupp ta' applikazzjonijiet moderni.

Id-dokument inħoloq mill-iżviluppaturi tal-pjattaforma Heroku.

L-App Twelve-Factor tista’ tiġi applikata għal applikazzjonijiet miktuba fi kwalunkwe lingwa ta’ programmar u bl-użu ta’ kwalunkwe kombinazzjoni ta’ servizzi ta’ appoġġ (databases, kjuwijiet ta’ messaġġi, caches, eċċ.).

Fil-qosor dwar il-fatturi li fuqhom hija bbażata din il-metodoloġija:

  1. Codebase – Bażi ta’ kodiċi waħda tracked fil-kontroll tal-verżjoni – skjeramenti multipli
  2. Dipendenzi – Iddikjara u iżola d-dipendenzi b'mod espliċitu
  3. Konfigurazzjoni – Issejvja l-konfigurazzjoni fir-runtime
  4. Servizzi ta' Sostenn – Ikkunsidra s-servizzi ta' appoġġ bħala riżorsi plug-in
  5. Ibni, rilaxx, run – Separa b'mod strett l-istadji tal-assemblaġġ u tal-eżekuzzjoni
  6. Proċessi – Mexxi l-applikazzjoni bħala proċess wieħed jew aktar mingħajr stat
  7. L-irbit tal-port – Servizzi ta' esportazzjoni permezz tal-irbit tal-port
  8. Concurrency – Skala l-applikazzjoni tiegħek billi tuża proċessi
  9. Disposabilità – Timmassimizza l-affidabbiltà bi bidu mgħaġġel u għeluq nadif
  10. Parità ta' żvilupp/operazzjoni ta' applikazzjoni – Żomm l-ambjenti ta’ żvilupp, ta’ stadji u ta’ produzzjoni tiegħek simili kemm jista’ jkun
  11. Logging – Ara r-reġistru bħala fluss ta’ avvenimenti
  12. Ħidmiet ta' amministrazzjoni – Iwettaq kompiti ta' amministrazzjoni/ġestjoni bl-użu ta' proċessi ad hoc

Tista' tikseb aktar informazzjoni dwar it-12-il fattur mir-riżorsi li ġejjin:

X'inhu l-iskjerament Blue-Green?

L-iskjerament Blue-Green huwa metodu ta' kif titwassal applikazzjoni lil produzzjoni b’tali mod li l-klijent finali ma jara l-ebda tibdil min-naħa tiegħu. Fi kliem ieħor, l-iskjerament ta 'applikazzjoni b'żero perijodi ta 'waqfien.

L-iskema klassika BG Deploy tidher bħal dik murija fl-immaġni hawn taħt.

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

  • Fil-bidu hemm 2 servers fiżiċi bl-istess kodiċi, applikazzjoni, proġett, u hemm router (balancer).
  • Ir-router inizjalment jidderieġi t-talbiet kollha lil wieħed mis-servers (aħdar).
  • Fil-mument meta jkollok bżonn tirrilaxxa mill-ġdid, il-proġett kollu jiġi aġġornat fuq server ieħor (blu), li bħalissa mhi qed tipproċessa l-ebda talba.
  • Wara li l-kodiċi jkun mixgħul blu server huwa kompletament aġġornat, ir-router jingħata kmand biex jaqleb minnu aħdar fuq blu server.
  • Issa l-klijenti kollha jaraw ir-riżultat tal-kodiċi li qed jaħdem bih tal-blu server.
  • Għal xi żmien, aħdar is-server iservi bħala kopja ta 'backup f'każ ta' skjerament mingħajr suċċess blu server u f'każ ta 'falliment u bugs, ir-router jaqleb il-fluss tal-utent lura lejn aħdar server bil-verżjoni stabbli l-antika, u l-kodiċi l-ġdid jintbagħat għal reviżjoni u ttestjar.
  • U fl-aħħar tal-proċess, huwa aġġornat bl-istess mod aħdar server. U wara li jaġġornaha, ir-router jaqleb il-fluss tat-talba lura għal aħdar server.

Kollox jidher tajjeb ħafna u mal-ewwel daqqa t'għajn m'għandux ikun hemm problemi magħha.
Iżda peress li ngħixu fid-dinja moderna, l-għażla bi swiċċ fiżiku kif indikat fl-iskema klassika ma taqbilx magħna. Irreġistra l-informazzjoni għalissa, se nerġgħu lura għaliha aktar tard.

Pariri ħżiena u tajbin

Ċaħda ta 'responsabbiltà: L-eżempji hawn taħt juru l-utilitajiet/metodoloġiji li nuża, tista 'tuża assolutament kwalunkwe alternattiva b'funzjonijiet simili.

Ħafna mill-eżempji b'xi mod jew ieħor jaqsmu mal-iżvilupp tal-web (din hija sorpriża), ma 'PHP u Docker.

Il-paragrafi hawn taħt jipprovdu deskrizzjoni prattika sempliċi tal-użu ta 'fatturi bl-użu ta' eżempji speċifiċi; jekk trid tikseb aktar teorija dwar dan is-suġġett, segwi l-links hawn fuq għas-sors oriġinali.

1. Codebase

Uża FTP u FileZilla biex ittella' fajls fis-servers wieħed kull darba, taħżinx il-kodiċi mkien għajr fuq is-server tal-produzzjoni.

Il-proġett għandu dejjem ikollu bażi ta 'kodiċi waħda, jiġifieri, il-kodiċi kollu ġej minn wieħed go repożitorju. Servers (produzzjoni, staging, test1, test2...) jużaw kodiċi minn fergħat ta' repożitorju komuni wieħed. B'dan il-mod niksbu konsistenza tal-kodiċi.

2. Dipendenzi

Niżżel il-libreriji kollha fil-folders direttament fl-għerq tal-proġett. Agħmel aġġornamenti sempliċiment billi tittrasferixxi l-kodiċi l-ġdid fil-folder bil-verżjoni attwali tal-librerija. Installa l-utilitajiet kollha meħtieġa direttament fuq is-server ospitanti fejn qed jaħdmu 20 servizz ieħor.

Proġett għandu dejjem ikollu lista ta’ dipendenzi li tinftiehem b’mod ċar (b’dipendenzi nfisser ukoll l-ambjent). Id-dipendenzi kollha għandhom ikunu definiti u iżolati b'mod espliċitu.
Ejja nieħdu bħala eżempju kompożitur и Docker.

kompożitur — maniġer tal-pakketti li jippermettilek tinstalla libreriji fil-PHP. Kompożitur jippermettilek li tispeċifika verżjonijiet b'mod strett jew laxk, u tiddefinixxihom b'mod espliċitu. Jista 'jkun hemm 20 proġett differenti fuq is-server u kull wieħed ikollu lista personali ta' pakketti u libreriji indipendenti mill-oħra.

Docker — utilità li tippermettilek tiddefinixxi u tiżola l-ambjent li fih se taħdem l-applikazzjoni. Għaldaqstant, l-istess bħall-kompożitur, iżda b'mod aktar bir-reqqa, nistgħu niddeterminaw ma 'liema taħdem l-applikazzjoni. Agħżel verżjoni speċifika tal-PHP, installa biss il-pakketti meħtieġa biex il-proġett jaħdem, mingħajr ma żżid xi ħaġa żejda. U aktar importanti, mingħajr ma jinterferixxi mal-pakketti u l-ambjent tal-magna ospitanti u proġetti oħra. Jiġifieri, il-proġetti kollha fuq is-server li għaddej minn Docker jistgħu jużaw assolutament kwalunkwe sett ta 'pakketti u ambjent kompletament differenti.

3. Konfigurazzjoni

Aħżen il-konfigurazzjonijiet bħala kostanti direttament fil-kodiċi. Kostanti separati għas-server tat-test, separati għall-produzzjoni. Orbot l-operazzjoni ta 'l-applikazzjoni skond l-ambjent direttament fil-loġika tan-negozju tal-proġett bl-użu jekk inkella jibni.

Konfigurazzjonijiet - dan huwa l-uniku mod kif l-iskjerament tal-proġetti għandhom ikunu differenti. Idealment, il-konfigurazzjonijiet għandhom jiġu mgħoddija minn varjabbli ambjentali (env vars).

Jiġifieri, anki jekk taħżen diversi fajls ta’ konfigurazzjoni .config.prod .config.local u semmihom mill-ġdid fil-ħin tal-iskjerament għal .config (il-konfigurazzjoni ewlenija li minnha l-applikazzjoni taqra d-dejta) - dan mhux se jkun l-approċċ it-tajjeb, peress li f'dan il-każ l-informazzjoni mill-konfigurazzjonijiet tkun disponibbli pubblikament għall-iżviluppaturi tal-applikazzjoni kollha u d-dejta mis-server tal-produzzjoni tkun kompromessa. Il-konfigurazzjonijiet kollha għandhom jinħażnu direttament fis-sistema ta’ skjerament (CI/CD) u ġenerati għal ambjenti differenti b’valuri differenti meħtieġa għal ambjent speċifiku fil-ħin tal-iskjerament.

4. Servizzi ta' Partijiet Terzi

Kun strettament marbut mal-ambjent, uża konnessjonijiet differenti għall-istess servizzi f'ċerti ambjenti.

Fil-fatt, dan il-punt jikkoinċidi b'mod qawwi mal-punt dwar il-konfigurazzjonijiet, peress li mingħajr dan il-punt, id-dejta tal-konfigurazzjoni normali ma tistax issir u, b'mod ġenerali, il-kapaċità li tiġi kkonfigurata tinżel fix-xejn.

Il-konnessjonijiet kollha għal servizzi esterni, bħal servers ta’ kju, databases, servizzi ta’ caching, għandhom ikunu l-istess kemm għall-ambjent lokali kif ukoll għall-ambjent ta’ parti terza/produzzjoni. Fi kliem ieħor, fi kwalunkwe ħin, billi nbiddel is-sekwenza tal-konnessjoni, nista' nissostitwixxi sejħiet għall-bażi #1 bil-bażi #2 mingħajr ma nbiddel il-kodiċi tal-applikazzjoni. Jew, tħares 'il quddiem, bħala eżempju, meta tiskala s-servizz, ma jkollokx għalfejn tispeċifika l-konnessjoni b'xi mod speċjali għal server ta' cache addizzjonali.

5. Ibni, rilaxx, tesegwixxi

Ikollok biss il-verżjoni finali tal-kodiċi fuq is-server, mingħajr ebda ċans li tirreġġa' lura r-rilaxx. M'hemmx għalfejn timla l-ispazju tad-diska. Kull min jaħseb li jista' jirrilaxxa kodiċi fil-produzzjoni bi żball huwa programmatur ħażin!

L-istadji kollha tal-iskjerament għandhom ikunu separati minn xulxin.

Ikollok iċ-ċans li terġa 'lura. Agħmel rilaxxi b'kopji qodma tal-applikazzjoni (diġà mmuntati u lesti għall-battalja) salvati f'aċċess rapidu, sabiex f'każ ta 'żbalji tkun tista' tirrestawra l-verżjoni l-antika. Jiġifieri, kondizzjonalment hemm folder rilaxxi u folder kurrenti, u wara skjerament u assemblaġġ b'suċċess il-folder kurrenti marbuta b'rabta simbolika mar-rilaxx il-ġdid li jinsab ġewwa rilaxxi bl-isem konvenzjonali tan-numru tar-rilaxx.

Dan huwa fejn niftakru l-iskjerament tal-Blue-Green, li jippermettilek mhux biss taqleb bejn il-kodiċi, iżda wkoll taqleb bejn ir-riżorsi kollha u anke l-ambjenti bil-kapaċità li tirritorna kollox.

6. Proċessi

Aħżen id-dejta tal-istat tal-applikazzjoni direttament fl-applikazzjoni nnifisha. Uża sessjonijiet fir-RAM tal-applikazzjoni nnifisha. Uża kemm jista' jkun qsim bejn servizzi ta' partijiet terzi. Jistrieħ fuq il-fatt li l-applikazzjoni jista 'jkollha biss proċess wieħed u ma jippermettux għall-iskala.

Rigward is-sessjonijiet, aħżen id-dejta biss f'cache ikkontrollata minn servizzi ta 'partijiet terzi (memcached, redis), għalhekk anki jekk għandek 20 proċess ta' applikazzjoni għaddej, kwalunkwe wieħed minnhom, wara li jkun aċċessa għall-cache, ikun jista 'jkompli jaħdem mal-klijent f' l-istess stat li fih l-utent kien qed jaħdem bl-applikazzjoni fi proċess ieħor. B'dan l-approċċ, jirriżulta li tkun kemm tuża kopji ta 'servizzi ta' partijiet terzi, kollox se jaħdem b'mod normali u mingħajr problemi bl-aċċess għad-dejta.

7. L-irbit tal-port

Is-server tal-web biss għandu jkun jaf kif jaħdem ma 'servizzi ta' partijiet terzi. Jew aħjar, installa servizzi ta 'partijiet terzi direttament ġewwa s-server tal-web. Per eżempju, bħala modulu PHP f'Apache.
Is-servizzi kollha tiegħek għandhom ikunu aċċessibbli għal xulxin permezz ta’ aċċess għal xi indirizz u port (localgost:5432, localhost:3000, nginx:80, php-fpm:9000), jiġifieri minn nginx nista’ jaċċessa kemm php- fpm kif ukoll għal postgres, u minn php-fpm għal postgres u nginx u fil-fatt minn kull servizz nista' jaċċessa servizz ieħor. B'dan il-mod, il-vijabbiltà ta' servizz ma tkunx marbuta mal-vijabbiltà ta' servizz ieħor.

8. Paralleliżmu

Aħdem ma 'proċess wieħed, inkella diversi proċessi ma jkunux jistgħu jiksbu flimkien ma' xulxin!

Ħalli spazju għall-iskala. Docker swarm huwa kbir għal dan.
Docker Swarm hija għodda għall-ħolqien u l-ġestjoni ta’ gruppi ta’ kontenituri kemm bejn magni differenti kif ukoll mazz ta’ kontenituri fuq l-istess magna.

Bl-użu ta 'swarm, nista' niddetermina kemm se nalloka riżorsi għal kull proċess u kemm se nniedi proċessi tal-istess servizz, u l-balancer intern, li jirċievi dejta fuq port partikolari, awtomatikament se jipprokuraha lill-proċessi. Għalhekk, meta nara li t-tagħbija fuq is-server żdiedet, nista 'nżid aktar proċessi, u b'hekk inaqqas it-tagħbija fuq ċerti proċessi.

9. Disposabilità

Tużax kjuwijiet biex taħdem bi proċessi u data. Il-qtil ta' proċess wieħed għandu jaffettwa l-applikazzjoni kollha. Jekk servizz wieħed jinżel, kollox jinżel.

Kull proċess u servizz jista’ jintfew fi kwalunkwe ħin u dan m’għandux jaffettwa servizzi oħra (naturalment, dan ma jfissirx li s-servizz mhux se jkun disponibbli għal servizz ieħor, iżda li servizz ieħor ma jintefax wara dan). Il-proċessi kollha għandhom jiġu tterminati b'mod grazzjuż, sabiex meta jiġu tterminati, l-ebda data ma tiġi mħassra u s-sistema taħdem b'mod korrett il-ħin li jmiss li tixgħelha. Jiġifieri, anke fil-każ ta’ terminazzjoni ta’ emerġenza, id-dejta m’għandhiex issirilhom ħsara (il-mekkaniżmu tat-tranżazzjoni huwa adattat hawnhekk, il-mistoqsijiet fid-database jaħdmu biss fi gruppi, u jekk mill-inqas mistoqsija waħda mill-grupp tfalli jew titwettaq b’ żball, allura l-ebda mistoqsija oħra mill-grupp fl-aħħar mill-aħħar ma tfalli fil-fatt).

10. Parità ta' żvilupp/operazzjoni ta' applikazzjoni

Il-produzzjoni, l-istadju u l-verżjoni lokali tal-applikazzjoni għandhom ikunu differenti. Fil-produzzjoni nużaw il-qafas Yii Lite, u lokalment Yii, sabiex taħdem aktar malajr fil-produzzjoni!

Fir-realtà, l-iskjeramenti kollha u x-xogħol bil-kodiċi għandhom ikunu kważi f'ambjent identiku (m'aħniex nitkellmu dwar hardware fiżiku). Ukoll, kwalunkwe impjegat ta 'żvilupp għandu jkun jista' juża l-kodiċi għall-produzzjoni jekk meħtieġ, u mhux xi dipartiment devops imħarreġ apposta, li bis-saħħa biss ta 'saħħa speċjali jista' jneħħi l-applikazzjoni fil-produzzjoni.

Docker jgħinna wkoll f'dan. Jekk jiġu osservati l-punti kollha ta 'qabel, l-użu ta' docker iġib il-proċess tal-iskjerament tal-ambjent kemm fuq il-produzzjoni kif ukoll fuq il-magna lokali biex jiddaħħal kmand wieħed jew tnejn.

11. Zkuk

Aħna niktbu zkuk għal fajls u databases! Aħna ma naddafx fajls u databases minn zkuk. Ejja nixtru ħardrajv b'9000 Peta bytes u tajjeb.

Ir-reġistri kollha għandhom jitqiesu bħala fluss ta' avvenimenti. L-applikazzjoni nnifisha m'għandhiex tkun involuta fl-ipproċessar ta' zkuk. Iċ-zkuk għandhom jinħarġu jew lil stdout jew jintbagħtu permezz ta' protokoll bħal udp, sabiex ix-xogħol ma' zkuk ma joħloq l-ebda problema għall-applikazzjoni. graylog huwa tajjeb għal dan. Graylog li jirċievi z-zkuk kollha permezz ta 'udp (dan il-protokoll ma jeħtieġx stennija għal tweġiba dwar ir-riċeviment b'suċċess tal-pakkett) ma jinterferixxi ma' l-applikazzjoni bl-ebda mod u jittratta biss l-istrutturar u l-ipproċessar ta 'zkuk. Il-loġika tal-applikazzjoni ma tinbidilx biex taħdem ma 'approċċi bħal dawn.

12. Kompiti ta' amministrazzjoni

Biex taġġorna d-dejta, id-databases, eċċ., uża endpoint maħluq separatament fl-API, l-eżekuzzjoni tagħha 2 darbiet wara xulxin tirriżulta f'kollox jiġi duplikat. Imma m'intix stupid, mhux se tikklikkja darbtejn, u m'għandniex bżonn il-migrazzjoni.

Il-kompiti kollha ta' amministrazzjoni għandhom jitwettqu fl-istess ambjent bħall-kodiċi kollha, fil-livell tar-rilaxx. Jiġifieri, jekk ikollna bżonn nibdlu l-istruttura tad-database, allura mhux se nagħmluha manwalment billi nbiddlu l-ismijiet tal-kolonni u nżidu oħrajn ġodda permezz ta 'xi għodod viżwali għall-ġestjoni tad-database. Għal affarijiet bħal dawn, noħolqu skripts separati - migrazzjonijiet, li huma esegwiti kullimkien u fl-ambjenti kollha bl-istess mod b'riżultat komuni u li jinftiehem. Għall-kompiti l-oħra kollha, bħall-mili tal-proġett bid-dejta, għandhom jintużaw metodoloġiji simili.

Eżempju ta' implimentazzjoni f'PHP, Laravel, Laradock, Docker-Compose

PS L-eżempji kollha saru fuq MacOS. Ħafna minnhom huma wkoll adattati għal Linux. Utenti tal-Windows, ahfruni, imma ilni ma naħdimx mal-Windows.

Ejja nimmaġinaw sitwazzjoni fejn m'għandna l-ebda verżjoni tal-PHP installata fuq il-PC tagħna u xejn.
Installa l-aħħar verżjonijiet ta 'docker u docker-compose. (dan jista' jinstab fuq l-Internet)

docker -v && 
docker-compose -v

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

1. Poġġi Laradock

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

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

Rigward Laradock, se ngħid li hija ħaġa friska ħafna, li fiha ħafna kontenituri u affarijiet awżiljarji. Imma jien ma nirrakkomandax li tuża Laradock bħala tali mingħajr modifiki fil-produzzjoni minħabba s-sensja tiegħu. Huwa aħjar li toħloq il-kontenituri tiegħek stess ibbażati fuq eżempji f'Laradock, dan se jkun ħafna aktar ottimizzat, għaliex ħadd ma għandu bżonn dak kollu li jkun hemm fl-istess ħin.

2. Ikkonfigura Laradock biex imexxi l-applikazzjoni tagħna.

cd laradock && 
cp env-example .env

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

2.1. Iftaħ id-direttorju tal-habr (il-folder ġenitur li fih jiġi kklonat laradock) f'xi editur. (Fil-każ tiegħi PHPStorm)

F'dan l-istadju nagħtu biss isem lill-proġett.

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

2.2. Niedi l-immaġni tal-ispazju tax-xogħol. (Fil-każ tiegħek, l-immaġini se jieħdu xi żmien biex jinbnew)
L-ispazju tax-xogħol huwa immaġni ppreparata apposta biex taħdem mal-qafas f'isem l-iżviluppatur.

Immorru ġewwa l-kontenitur bl-użu

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

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

2.3. Installazzjoni ta' Laravel

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

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

2.4. Wara l-installazzjoni, niċċekkjaw jekk id-direttorju bil-proġett inħoloqx u joqtlu l-komponiment.

ls
exit
docker-compose down

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

2.5. Ejja mmorru lura għal PHPStorm u ssettja t-triq korretta għall-applikazzjoni laravel tagħna fil-fajl .env.

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

3. Żid il-kodiċi kollu ma 'Git.

Biex tagħmel dan, aħna se noħolqu repożitorju fuq Github (jew imkien ieħor). Ejja mmorru fid-direttorju habr fit-terminal u tesegwixxi l-kodiċi li ġej.

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

Ejja niċċekkjaw jekk kollox hux tajjeb.

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

Għall-konvenjenza, nirrakkomanda li tuża xi interface viżwali għal Git, fil-każ tiegħi huwa GitKraken. (hawn hawn link ta' referenza)

4. Ejja nniedu!

Qabel ma tibda, kun żgur li xejn mhu mdendel fuq il-portijiet 80 u 443.

docker-compose up -d nginx php-fpm

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

Għalhekk, il-proġett tagħna jikkonsisti fi 3 servizzi separati:

  • nginx - server tal-web
  • php-fpm - php biex tirċievi talbiet minn web server
  • spazju tax-xogħol - php għall-iżviluppaturi

Bħalissa, ksibna li ħloqna applikazzjoni li tissodisfa 4 punti minn 12, jiġifieri:

1. Codebase — il-kodiċi kollu jinsab f'repożitorju wieħed (nota żgħira: jista 'jkun korrett li żżid docker ġewwa l-proġett laravel, iżda dan mhux importanti).

2. Dipendenzi - Id-dipendenzi kollha tagħna huma miktuba b'mod espliċitu f'application/composer.json u f'kull Dockerfile ta' kull kontenitur.

3. Servizzi ta' Sostenn — Kull wieħed mis-servizzi (php-fom, nignx, workspace) jgħix ħajtu stess u huwa konness minn barra u meta jaħdem ma’ servizz wieħed, l-ieħor mhux se jiġi affettwat.

4. Proċessi — kull servizz huwa proċess wieħed. Kull wieħed mis-servizzi ma jżommx stat intern.

5. L-irbit tal-port

docker ps

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

Kif nistgħu naraw, kull servizz jaħdem fuq il-port tiegħu stess u huwa aċċessibbli għas-servizzi l-oħra kollha.

6. Concurrency

Docker jippermettilna nbiddlu proċessi multipli tal-istess servizzi b'ibbilanċjar awtomatiku tat-tagħbija bejniethom.

Ejja nwaqqfu l-kontenituri u ngħadduhom mill-bandiera --skala

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

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

Kif nistgħu naraw, inħolqu kopji tal-kontenitur php-fpm. M'għandna bżonn nibdlu xejn meta naħdmu ma' dan il-kontenitur. Aħna wkoll inkomplu naċċessawha fuq il-port 9000, u Docker jirregola t-tagħbija bejn il-kontejners għalina.

7. Disposabilità - kull kontenitur jista 'jinqatel mingħajr ma ssir ħsara lill-ieħor. Il-waqfien jew il-bidu mill-ġdid tal-kontenitur mhux se jaffettwa l-operat tal-applikazzjoni waqt tnedija sussegwenti. Kull kontenitur jista 'jittella' wkoll fi kwalunkwe ħin.

8. Parità ta' żvilupp/operazzjoni ta' applikazzjoni - l-ambjenti kollha tagħna huma l-istess. Billi tħaddem is-sistema fuq server fil-produzzjoni, ma jkollokx għalfejn tibdel xejn fil-kmandi tiegħek. Kollox se jkun ibbażat fuq Docker bl-istess mod.

9. Logging — zkuk kollha f'dawn il-kontenituri jmorru għall-fluss u huma viżibbli fil-console Docker. (f'dan il-każ, fil-fatt, b'kontenituri oħra magħmula mid-dar, dan jista' ma jkunx il-każ jekk ma tieħux ħsiebu)

 docker-compose logs -f

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

Iżda hemm qabda li l-valuri Default f'PHP u Nginx jiktbu wkoll zkuk f'fajl. Biex jintlaħqu t-12-il fattur, huwa meħtieġ skonnettja kitba ta 'zkuk għal fajl fil-konfigurazzjonijiet ta' kull kontenitur separatament.

Docker jipprovdi wkoll il-kapaċità li jibgħat zkuk mhux biss lil stdout, iżda wkoll lil affarijiet bħal graylog, li semmejt hawn fuq. U ġewwa l-graylog, nistgħu nħaddmu r-zkuk kif jekk jogħġbok u l-applikazzjoni tagħna ma tinnota dan bl-ebda mod.

10. Ħidmiet ta' amministrazzjoni — il-kompiti kollha tal-amministrazzjoni jiġu solvuti minn laravel grazzi għall-għodda artiġjanali eżattament kif jixtiequ l-ħallieqa tal-applikazzjoni tat-12-il fattur.

Bħala eżempju, ser nuri kif xi kmandi huma esegwiti.
Nidħlu fil-kontenitur.

 
docker-compose exec workspace bash
php artisan list

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

Issa nistgħu nużaw kwalunkwe kmand. (jekk jogħġbok innota li aħna ma kkonfigurajniex id-database u l-cache, għalhekk nofs il-kmandi mhux se jiġu esegwiti b'mod korrett, minħabba li huma ddisinjati biex jaħdmu mal-cache u d-database).

Żvilupp tal-applikazzjoni u skjerament Blue-Green, ibbażat fuq il-metodoloġija tal-App Twelve-Factor b'eżempji f'php u docker

11. Konfigurazzjonijiet u 12. Ibni, rilaxx, run

Xtaqt niddedika din il-parti għal Blue-Green Deployment, iżda rriżulta li kien estensiv wisq għal dan l-artikolu. Se nikteb artiklu separat dwar dan.

Fil-qosor, il-kunċett huwa bbażat fuq sistemi CI/CD simili Jenkins и Gitlab CI. Fit-tnejn, tista 'tissettja varjabbli ambjentali assoċjati ma' ambjent speċifiku. Għaldaqstant, f'din is-sitwazzjoni, il-punt c se jiġi sodisfatt Konfigurazzjonijiet.

U l-punt dwar Ibni, rilaxx, run hija solvuta minn funzjonijiet built-in bl-isem Pipeline.

Pipeline jippermettilek taqsam il-proċess ta 'skjerament f'ħafna stadji, u tenfasizza l-istadji ta' assemblaġġ, rilaxx u eżekuzzjoni. Ukoll fil-Pipeline, tista 'toħloq backups, u tabilħaqq xejn. Din hija għodda b'potenzjal bla limitu.

Il-kodiċi tal-applikazzjoni jinsab fuq GitHub.
Tinsiex inizjalizza s-submodulu meta tikklona dan ir-repożitorju.

PS: Dawn l-approċċi kollha jistgħu jintużaw ma 'kwalunkwe utilitajiet u lingwa ta' programmar oħra. Il-ħaġa prinċipali hija li l-essenza ma tvarjax.

Sors: www.habr.com

Żid kumment