Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

Yn gyntaf, ychydig o theori. Beth sydd wedi digwydd Yr Ap Deuddeg Ffactor?

Mewn geiriau syml, mae'r ddogfen hon wedi'i chynllunio i symleiddio datblygiad cymwysiadau SaaS, gan helpu trwy hysbysu datblygwyr a pheirianwyr DevOps am y problemau a'r arferion a wynebir amlaf wrth ddatblygu cymwysiadau modern.

Crëwyd y ddogfen gan ddatblygwyr y platfform Heroku.

Gellir cymhwyso'r Ap Deuddeg Ffactor i gymwysiadau sydd wedi'u hysgrifennu mewn unrhyw iaith raglennu ac sy'n defnyddio unrhyw gyfuniad o wasanaethau cefnogi (cronfeydd data, ciwiau neges, celc, ac ati).

Yn gryno, am y ffactorau y seiliwyd y fethodoleg hon arnynt:

  1. Codebase - Un sylfaen god wedi'i olrhain wrth reoli fersiynau - sawl defnydd
  2. Dibyniaethau – Datgan ac ynysu dibyniaethau yn benodol
  3. Ffurfweddiad - Arbedwch y cyfluniad mewn amser rhedeg
  4. Gwasanaethau Cefnogol – Ystyried cefnogi gwasanaethau fel adnoddau plug-in
  5. Adeiladu, rhyddhau, rhedeg - Gwahanwch y camau cydosod a gweithredu yn llym
  6. Y prosesau - Rhedeg y cais fel un neu fwy o brosesau di-wladwriaeth
  7. Rhwymo porthladd - Allforio gwasanaethau trwy rwymo porthladd
  8. Cyfochrogrwydd – Graddiwch eich cais gan ddefnyddio prosesau
  9. Gwaredigaeth - Gwneud y mwyaf o ddibynadwyedd gyda chychwyn cyflym a chau i lawr yn lân
  10. Cymhwysedd datblygu/gweithredu cydraddoldeb - Cadwch eich amgylcheddau datblygu, llwyfannu a chynhyrchu mor debyg â phosibl
  11. Logio - Gweld y log fel ffrwd o ddigwyddiadau
  12. Tasgau gweinyddol – Cyflawni tasgau gweinyddol/rheoli gan ddefnyddio prosesau ad hoc

Gallwch gael rhagor o wybodaeth am y 12 ffactor o'r adnoddau canlynol:

Beth yw defnydd Blue-Green?

Mae defnyddio Blue-Green yn ddull o gyflwyno cais i cynhyrchu yn y fath fodd fel nad yw'r cleient terfynol yn gweld unrhyw newidiadau ar ei ran. Mewn geiriau eraill, defnyddio cais gyda sero amser segur.

Mae cynllun clasurol BG Deploy yn edrych fel yr un a ddangosir yn y ddelwedd isod.

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

  • Ar y dechrau mae yna 2 weinydd corfforol gyda'r un cod, cymhwysiad, prosiect, ac mae llwybrydd (cydbwysedd).
  • I ddechrau mae'r llwybrydd yn cyfeirio pob cais at un o'r gweinyddion (gwyrdd).
  • Ar hyn o bryd pan fydd angen rhyddhau eto, mae'r prosiect cyfan yn cael ei ddiweddaru ar weinydd arall (glas), nad yw'n prosesu unrhyw geisiadau ar hyn o bryd.
  • Ar ôl i'r cod fod ymlaen glas gweinydd wedi'i ddiweddaru'n llwyr, mae'r llwybrydd yn cael gorchymyn i newid ohono gwyrdd ar glas gweinydd.
  • Nawr mae pob cleient yn gweld canlyniad y cod yn rhedeg gyda o las gweinydd.
  • Am beth amser, gwyrdd mae'r gweinydd yn gwasanaethu fel copi wrth gefn rhag ofn y bydd defnydd aflwyddiannus i glas gweinydd ac mewn achos o fethiant a bygiau, mae'r llwybrydd yn newid llif y defnyddiwr yn ôl i gwyrdd gweinydd gyda'r hen fersiwn sefydlog, ac anfonir y cod newydd i'w adolygu a'i brofi.
  • Ac ar ddiwedd y broses, caiff ei ddiweddaru yn yr un modd gwyrdd gweinydd. Ac ar ôl ei ddiweddaru, mae'r llwybrydd yn newid llif y cais yn ôl i gwyrdd gweinydd.

Mae'r cyfan yn edrych yn dda iawn ac ar yr olwg gyntaf ni ddylai fod unrhyw broblemau ag ef.
Ond gan ein bod yn byw yn y byd modern, nid yw'r opsiwn gyda newid corfforol fel y nodir yn y cynllun clasurol yn addas i ni. Cofnodwch y wybodaeth am y tro, byddwn yn dychwelyd ato yn nes ymlaen.

Cyngor drwg a da

Ymwadiad: Mae'r enghreifftiau isod yn dangos y cyfleustodau/methodolegau yr wyf yn eu defnyddio, gallwch ddefnyddio unrhyw ddewisiadau amgen gyda swyddogaethau tebyg.

Bydd y rhan fwyaf o'r enghreifftiau mewn un ffordd neu'r llall yn croestorri â datblygu gwe (mae hyn yn syndod), gyda PHP a Docker.

Mae'r paragraffau isod yn rhoi disgrifiad ymarferol syml o'r defnydd o ffactorau gan ddefnyddio enghreifftiau penodol; os ydych chi am gael mwy o ddamcaniaeth ar y pwnc hwn, dilynwch y dolenni uchod i'r ffynhonnell wreiddiol.

1. Codebase

Defnyddiwch FTP a FileZilla i uwchlwytho ffeiliau i'r gweinyddwyr un ar y tro, peidiwch â storio'r cod yn unrhyw le ac eithrio ar y gweinydd cynhyrchu.

Dylai fod gan y prosiect sylfaen cod sengl bob amser, hynny yw, daw'r holl god o un mynd ystorfa. Mae gweinyddwyr (cynhyrchu, llwyfannu, prawf1, prawf2...) yn defnyddio cod o ganghennau un gadwrfa gyffredin. Fel hyn rydym yn cyflawni cysondeb cod.

2. Dibyniaethau

Lawrlwythwch yr holl lyfrgelloedd mewn ffolderi yn uniongyrchol at wraidd y prosiect. Gwnewch ddiweddariadau yn syml trwy drosglwyddo'r cod newydd i'r ffolder gyda fersiwn gyfredol y llyfrgell. Gosodwch yr holl gyfleustodau angenrheidiol yn uniongyrchol ar y gweinydd gwesteiwr lle mae 20 yn fwy o wasanaethau'n rhedeg.

Dylai fod gan brosiect bob amser restr hawdd ei deall o ddibyniaethau (wrth ddibyniaethau dwi hefyd yn golygu'r amgylchedd). Rhaid i bob dibyniaeth gael ei diffinio'n benodol a'i hynysu.
Gadewch i ni gymryd fel enghraifft Cyfansoddi и Docker.

Cyfansoddi - rheolwr pecyn sy'n eich galluogi i osod llyfrgelloedd yn PHP. Mae Cyfansoddwr yn caniatáu ichi nodi fersiynau'n llym neu'n llac, a'u diffinio'n benodol. Gall fod 20 o brosiectau gwahanol ar y gweinydd a bydd gan bob un restr bersonol o becynnau a llyfrgelloedd yn annibynnol ar y llall.

Docker - cyfleustodau sy'n eich galluogi i ddiffinio ac ynysu'r amgylchedd y bydd y rhaglen yn rhedeg ynddo. Yn unol â hynny, yn union fel gyda'r cyfansoddwr, ond yn fwy trylwyr, gallwn benderfynu gyda'r hyn y mae'r cais yn gweithio. Dewiswch fersiwn benodol o PHP, gosodwch y pecynnau angenrheidiol yn unig i'r prosiect weithio, heb ychwanegu unrhyw beth ychwanegol. Ac yn bwysicaf oll, heb ymyrryd â phecynnau ac amgylchedd y peiriant gwesteiwr a phrosiectau eraill. Hynny yw, gall pob prosiect ar y gweinydd sy'n rhedeg trwy Docker ddefnyddio unrhyw set o becynnau ac amgylchedd hollol wahanol.

3. Cyfluniad

Storio cyfluniadau fel cysonion yn uniongyrchol yn y cod. Cysonion ar wahân ar gyfer y gweinydd prawf, ar wahân ar gyfer cynhyrchu. Clymwch weithrediad y cais yn dibynnu ar yr amgylchedd yn uniongyrchol yn rhesymeg busnes y prosiect gan ddefnyddio os yw lluniadau eraill.

Cyfluniadau - dyma'r unig ffordd y dylai gosodiadau prosiectau fod yn wahanol. Yn ddelfrydol, dylid trosglwyddo ffurfweddiadau trwy newidynnau amgylchedd (env vars).

Hynny yw, hyd yn oed os ydych chi'n storio sawl ffeil ffurfweddu .config.prod .config.local a'u hail-enwi ar adeg eu defnyddio i .config (y prif config y mae'r rhaglen yn darllen data ohono) - nid dyma'r dull cywir, gan fod yn yr achos hwn bydd y wybodaeth o'r ffurfweddiadau ar gael i'r cyhoedd i holl ddatblygwyr y rhaglen a bydd data o'r gweinydd cynhyrchu yn cael ei beryglu. Rhaid storio pob ffurfweddiad yn uniongyrchol yn y system lleoli (CI / CD) a'i gynhyrchu ar gyfer gwahanol amgylcheddau gyda gwerthoedd gwahanol sy'n angenrheidiol ar gyfer amgylchedd penodol ar adeg eu defnyddio.

4. Gwasanaethau Trydydd Parti

Byddwch yn gaeth i'r amgylchedd, defnyddiwch wahanol gysylltiadau ar gyfer yr un gwasanaethau mewn rhai amgylcheddau.

Mewn gwirionedd, mae'r pwynt hwn yn gorgyffwrdd yn gryf â'r pwynt am gyfluniadau, oherwydd heb y pwynt hwn, ni ellir gwneud data cyfluniad arferol ac, yn gyffredinol, ni fydd y gallu i ffurfweddu yn gostwng i ddim.

Rhaid i bob cysylltiad â gwasanaethau allanol, megis gweinyddwyr ciw, cronfeydd data, gwasanaethau caching, fod yr un fath ar gyfer yr amgylchedd lleol a'r amgylchedd trydydd parti / cynhyrchu. Mewn geiriau eraill, ar unrhyw adeg, trwy newid y llinyn cysylltiad, gallaf ddisodli galwadau i sylfaen #1 gyda sylfaen #2 heb newid cod y cais. Neu, wrth edrych ymlaen, fel enghraifft, wrth raddio'r gwasanaeth, ni fydd yn rhaid i chi nodi'r cysylltiad mewn unrhyw ffordd arbennig ar gyfer gweinydd cache ychwanegol.

5. Adeiladu, rhyddhau, gweithredu

Cael fersiwn terfynol y cod yn unig ar y gweinydd, heb unrhyw siawns o rolio'r datganiad yn ôl. Nid oes angen llenwi gofod disg. Mae unrhyw un sy'n meddwl y gallant ryddhau cod i gynhyrchu gyda gwall yn rhaglennydd gwael!

Rhaid gwahanu pob cam o'r defnydd oddi wrth ei gilydd.

Cael cyfle i rolio'n ôl. Gwnewch ddatganiadau gyda hen gopïau o'r cais (eisoes wedi'u cydosod ac yn barod ar gyfer brwydr) wedi'u cadw mewn mynediad cyflym, fel y gallwch chi adfer yr hen fersiwn rhag ofn y bydd gwallau. Hynny yw, yn amodol mae ffolder rhyddhau a ffolder ar hyn o bryd, ac ar ôl lleoli a chydosod y ffolder yn llwyddiannus ar hyn o bryd wedi'i gysylltu gan ddolen symbolaidd i'r datganiad newydd sydd y tu mewn rhyddhau gydag enw confensiynol y rhif rhyddhau.

Dyma lle rydyn ni'n cofio defnyddio Blue-Green, sy'n eich galluogi nid yn unig i newid rhwng cod, ond hefyd i newid rhwng yr holl adnoddau a hyd yn oed amgylcheddau gyda'r gallu i rolio popeth yn ôl.

6. Prosesau

Storio data cyflwr cymhwysiad yn uniongyrchol o fewn y rhaglen ei hun. Defnyddiwch sesiynau yn RAM y rhaglen ei hun. Defnyddiwch gymaint o rannu rhwng gwasanaethau trydydd parti â phosibl. Dibynnu ar y ffaith mai dim ond un broses y gall y cais ei chael a pheidiwch â chaniatáu ar gyfer graddio.

Ynglŷn â sesiynau, storio data yn unig mewn storfa a reolir gan wasanaethau trydydd parti (memcached, redis), felly hyd yn oed os oes gennych 20 proses ymgeisio yn rhedeg, bydd unrhyw un ohonynt, ar ôl cyrchu'r storfa, yn gallu parhau i weithio gyda'r cleient yn yr un cyflwr ag yr oedd y defnyddiwr yn gweithio gyda'r cais mewn proses arall. Gyda'r dull hwn, mae'n ymddangos, ni waeth faint o gopïau o wasanaethau trydydd parti rydych chi'n eu defnyddio, bydd popeth yn gweithio fel arfer a heb broblemau gyda mynediad at ddata.

7. Rhwymo porthladd

Dim ond y gweinydd gwe ddylai wybod sut i weithio gyda gwasanaethau trydydd parti. Neu'n well eto, gosodwch wasanaethau trydydd parti yn uniongyrchol y tu mewn i'r gweinydd gwe. Er enghraifft, fel modiwl PHP yn Apache.
Rhaid i'ch holl wasanaethau fod yn hygyrch i'ch gilydd trwy fynediad i ryw gyfeiriad a phorthladd (localgost: 5432, localhost: 3000, nginx: 80, php-fpm: 9000), hynny yw, o nginx gallaf gyrchu php- fpm ac i postgres, ac o php-fpm i postgres a nginx ac mewn gwirionedd o bob gwasanaeth gallaf gael mynediad at wasanaeth arall. Fel hyn, nid yw hyfywedd gwasanaeth yn gysylltiedig â hyfywedd gwasanaeth arall.

8. Cyfochredd

Gweithiwch gydag un broses, fel arall ni fydd sawl proses yn gallu cyd-dynnu â'i gilydd!

Gadael lle ar gyfer graddio. Mae haid docwyr yn wych ar gyfer hyn.
Offeryn yw Docker Swarm ar gyfer creu a rheoli clystyrau o gynwysyddion rhwng gwahanol beiriannau a chriw o gynwysyddion ar yr un peiriant.

Gan ddefnyddio haid, gallaf benderfynu faint o adnoddau y byddaf yn eu dyrannu i bob proses a faint o brosesau o'r un gwasanaeth y byddaf yn ei lansio, a bydd y cydbwysedd mewnol, sy'n derbyn data ar borthladd penodol, yn ei ddirprwyo'n awtomatig i'r prosesau. Felly, o weld bod y llwyth ar y gweinydd wedi cynyddu, gallaf ychwanegu mwy o brosesau, a thrwy hynny leihau'r llwyth ar rai prosesau.

9. Gwaredigaeth

Peidiwch â defnyddio ciwiau i weithio gyda phrosesau a data. Dylai lladd un broses effeithio ar y cais cyfan. Os bydd un gwasanaeth yn mynd i lawr, mae popeth yn mynd i lawr.

Gellir diffodd pob proses a gwasanaeth ar unrhyw adeg ac ni ddylai hyn effeithio ar wasanaethau eraill (wrth gwrs, nid yw hyn yn golygu na fydd y gwasanaeth ar gael ar gyfer gwasanaeth arall, ond na fydd gwasanaeth arall yn diffodd ar ôl hyn). Rhaid terfynu pob proses yn osgeiddig, fel na fydd unrhyw ddata yn cael ei niweidio pan gânt eu terfynu a bydd y system yn gweithio'n gywir y tro nesaf y byddwch chi'n ei droi ymlaen. Hynny yw, hyd yn oed os bydd terfyniad brys, ni ddylai'r data gael ei niweidio (mae'r mecanwaith trafodion yn addas yma, mae ymholiadau yn y gronfa ddata yn gweithio mewn grwpiau yn unig, ac os bydd o leiaf un ymholiad gan y grŵp yn methu neu'n cael ei weithredu gydag un). gwall, yna nid oes unrhyw ymholiad arall gan y grŵp yn methu mewn gwirionedd).

10. Cymhwysedd datblygu/gweithredu cydraddoldeb

Rhaid i gynhyrchiad, llwyfannu a fersiwn lleol o'r cais fod yn wahanol. Wrth gynhyrchu rydym yn defnyddio'r fframwaith Yii Lite, ac yn lleol Yii, fel ei fod yn gweithio'n gyflymach wrth gynhyrchu!

Mewn gwirionedd, dylai pob gosodiad a gwaith gyda chod fod mewn amgylchedd sydd bron yn union yr un fath (nid ydym yn sôn am galedwedd ffisegol). Hefyd, dylai unrhyw weithiwr datblygu allu defnyddio'r cod i gynhyrchu os oes angen, ac nid rhai adran devops sydd wedi'u hyfforddi'n arbennig, a all dim ond diolch i gryfder arbennig godi'r cais i gynhyrchu.

Mae Docker hefyd yn ein helpu gyda hyn. Os gwelir yr holl bwyntiau blaenorol, bydd defnyddio docwr yn dod â'r broses o leoli'r amgylchedd ar gynhyrchu ac ar y peiriant lleol i mewn i un neu ddau orchymyn.

11. boncyffion

Rydym yn ysgrifennu logiau i ffeiliau a chronfeydd data! Nid ydym yn glanhau ffeiliau a chronfeydd data o logiau. Gadewch i ni brynu gyriant caled gyda 9000 Peta beit ac mae hynny'n iawn.

Dylid ystyried pob cofnod fel ffrwd o ddigwyddiadau. Ni ddylai'r cais ei hun ymwneud â phrosesu logiau. Dylai logiau gael eu hallbynnu naill ai i stdout neu eu hanfon trwy brotocol fel udp, fel nad yw gweithio gyda logiau yn creu unrhyw broblemau i'r rhaglen. llwydlog yn dda ar gyfer hyn. Nid yw Graylog sy'n derbyn yr holl logiau trwy udp (nid yw'r protocol hwn yn gofyn am aros am ymateb ynghylch derbyniad llwyddiannus y pecyn) yn ymyrryd â'r cais mewn unrhyw ffordd ac mae'n delio â strwythuro a phrosesu logiau yn unig. Nid yw'r rhesymeg cymhwyso yn newid i weithio gyda dulliau o'r fath.

12. Tasgau gweinyddol

I ddiweddaru data, cronfeydd data, ac ati, defnyddiwch ddiweddbwynt a grëwyd ar wahân yn yr API, bydd ei weithredu 2 waith yn olynol yn arwain at ddyblygu popeth. Ond nid ydych chi'n dwp, ni fyddwch yn clicio ddwywaith, ac nid oes angen mudo arnom.

Dylid cyflawni pob tasg weinyddol yn yr un amgylchedd â phob cod, ar y lefel rhyddhau. Hynny yw, os oes angen i ni newid strwythur y gronfa ddata, yna ni fyddwn yn ei wneud â llaw trwy newid enwau colofnau ac ychwanegu rhai newydd trwy rai offer rheoli cronfa ddata gweledol. Ar gyfer pethau o'r fath, rydym yn creu sgriptiau ar wahân - ymfudiadau, sy'n cael eu gweithredu ym mhobman ac ym mhob amgylchedd yn yr un modd gyda chanlyniad cyffredin a dealladwy. Ar gyfer pob tasg arall, megis llenwi'r prosiect â data, dylid defnyddio methodolegau tebyg.

Enghraifft o weithredu yn PHP, Laravel, Laradock, Docker-Compose

ON Gwnaed pob enghraifft ar MacOS. Mae'r rhan fwyaf ohonynt hefyd yn addas ar gyfer Linux. Defnyddwyr Windows, maddeuwch i mi, ond nid wyf wedi gweithio gyda Windows ers amser maith.

Gadewch i ni ddychmygu sefyllfa lle nad oes gennym unrhyw fersiwn o PHP wedi'i osod ar ein cyfrifiadur personol a dim byd o gwbl.
Gosodwch y fersiynau diweddaraf o docker a docker-compose. (gellir dod o hyd i hwn ar y Rhyngrwyd)

docker -v && 
docker-compose -v

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

1. Rhoi Laradock

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

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

Ynglŷn â Laradock, dywedaf ei fod yn beth cŵl iawn, sy'n cynnwys llawer o gynwysyddion a phethau ategol. Ond ni fyddwn yn argymell defnyddio Laradock fel y cyfryw heb addasiadau wrth gynhyrchu oherwydd ei ddiswyddo. Mae'n well creu eich cynwysyddion eich hun yn seiliedig ar enghreifftiau yn Laradock, bydd hyn wedi'i optimeiddio'n llawer mwy, oherwydd nid oes angen popeth sydd yno ar unrhyw un ar yr un pryd.

2. Ffurfweddu Laradock i redeg ein cais.

cd laradock && 
cp env-example .env

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

2.1. Agorwch y cyfeiriadur habr (y ffolder rhiant y mae laradock wedi'i glonio ynddo) mewn rhai golygydd. (Yn fy achos PHPStorm)

Ar hyn o bryd dim ond enw rydyn ni'n ei roi i'r prosiect.

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

2.2. Lansio delwedd y gweithle. (Yn eich achos chi, bydd y delweddau'n cymryd peth amser i'w hadeiladu)
Mae Workspace yn ddelwedd sydd wedi'i pharatoi'n arbennig ar gyfer gweithio gyda'r fframwaith ar ran y datblygwr.

Rydyn ni'n mynd i mewn i'r cynhwysydd gan ddefnyddio

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

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

2.3. Gosod Laravel

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

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

2.4. Ar ôl gosod, rydym yn gwirio a yw'r cyfeiriadur gyda'r prosiect wedi'i greu a lladd cyfansoddi.

ls
exit
docker-compose down

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

2.5. Gadewch i ni fynd yn ôl i PHPStorm a gosod y llwybr cywir i'n cais laravel yn y ffeil .env.

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

3. Ychwanegwch yr holl god i Git.

I wneud hyn, byddwn yn creu ystorfa ar Github (neu unrhyw le arall). Gadewch i ni fynd i'r cyfeiriadur habr yn y derfynell a gweithredu'r cod canlynol.

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

Gadewch i ni wirio a yw popeth mewn trefn.

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

Er hwylustod, rwy'n argymell defnyddio rhywfaint o ryngwyneb gweledol ar gyfer Git, yn fy achos i GitKraken. (dyma ddolen atgyfeirio)

4. Gadewch i ni lansio!

Cyn dechrau, gwnewch yn siŵr nad oes unrhyw beth yn hongian ar borthladdoedd 80 a 443.

docker-compose up -d nginx php-fpm

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

Felly, mae ein prosiect yn cynnwys 3 gwasanaeth ar wahân:

  • nginx - gweinydd gwe
  • php-fpm - php ar gyfer derbyn ceisiadau gan weinydd gwe
  • man gwaith - php ar gyfer datblygwyr

Ar hyn o bryd, rydym wedi cyflawni ein bod wedi creu cais sy’n bodloni 4 pwynt allan o 12, sef:

1. Codebase — mae'r holl god mewn un ystorfa (nodyn bach: efallai ei bod yn gywir ychwanegu docwr y tu mewn i'r prosiect larafel, ond nid yw hyn yn bwysig).

2. Dibyniaethau - Mae ein holl ddibyniaethau wedi'u hysgrifennu'n benodol yn application/composer.json ac ym mhob Dockerfile o bob cynhwysydd.

3. Gwasanaethau Cefnogol — Mae pob un o'r gwasanaethau (php-fom, nignx, gweithle) yn byw ei fywyd ei hun ac yn gysylltiedig o'r tu allan ac wrth weithio gydag un gwasanaeth, ni fydd y llall yn cael ei effeithio.

4. Y prosesau — mae pob gwasanaeth yn un broses. Nid yw pob un o'r gwasanaethau yn cynnal cyflwr mewnol.

5. Rhwymo porthladd

docker ps

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

Fel y gallwn weld, mae pob gwasanaeth yn rhedeg ar ei borthladd ei hun ac yn hygyrch i bob gwasanaeth arall.

6. Cyfochrogrwydd

Mae Docker yn caniatáu inni silio prosesau lluosog o'r un gwasanaethau gyda chydbwyso llwyth awtomatig rhyngddynt.

Gadewch i ni atal y cynwysyddion a'u rhedeg trwy'r faner --graddfa

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

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

Fel y gallwn weld, mae copïau wedi'u creu o'r cynhwysydd php-fpm. Nid oes angen i ni newid unrhyw beth wrth weithio gyda'r cynhwysydd hwn. Rydym hefyd yn parhau i gael mynediad iddo ar borthladd 9000, ac mae Docker yn rheoleiddio'r llwyth rhwng cynwysyddion i ni.

7. Gwaredigaeth - gellir lladd pob cynhwysydd heb niweidio'r llall. Ni fydd atal neu ailgychwyn y cynhwysydd yn effeithio ar weithrediad y cais yn ystod lansiadau dilynol. Gellir codi pob cynhwysydd ar unrhyw adeg hefyd.

8. Cymhwysedd datblygu/gweithredu cydraddoldeb - mae ein holl amgylcheddau yr un peth. Trwy redeg y system ar weinydd wrth gynhyrchu, ni fydd yn rhaid i chi newid unrhyw beth yn eich gorchmynion. Bydd popeth yn seiliedig ar Docker yn yr un modd.

9. Logio - mae'r holl logiau yn y cynwysyddion hyn yn mynd i'r ffrwd ac maent yn weladwy yn y consol Docker. (yn yr achos hwn, mewn gwirionedd, gyda chynwysyddion cartref eraill, efallai na fydd hyn yn wir os na fyddwch chi'n gofalu amdano)

 docker-compose logs -f

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

Ond mae dal gan fod y gwerthoedd Diofyn yn PHP a Nginx hefyd yn ysgrifennu logiau i ffeil. Er mwyn bodloni'r 12 ffactor, mae'n angenrheidiol diweithdra ysgrifennu logiau i ffeil yng nghyfluniadau pob cynhwysydd ar wahân.

Mae Docker hefyd yn darparu'r gallu i anfon boncyffion nid yn unig i stdout, ond hefyd at bethau fel llwydlog, y soniais amdano uchod. Ac y tu mewn i graylog, gallwn weithredu'r boncyffion fel y mynnwn ac ni fydd ein cais yn sylwi ar hyn mewn unrhyw ffordd.

10. Tasgau gweinyddol - mae'r holl dasgau gweinyddol yn cael eu datrys gan laravel diolch i'r offeryn crefftwr yn union fel y byddai crewyr y cymhwysiad 12 ffactor yn ei hoffi.

Fel enghraifft, byddaf yn dangos sut mae rhai gorchmynion yn cael eu gweithredu.
Rydyn ni'n mynd i mewn i'r cynhwysydd.

 
docker-compose exec workspace bash
php artisan list

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

Nawr gallwn ddefnyddio unrhyw orchymyn. (sylwch na wnaethom ffurfweddu'r gronfa ddata a'r storfa, felly ni fydd hanner y gorchmynion yn cael eu gweithredu'n gywir, oherwydd eu bod wedi'u cynllunio i weithio gyda'r storfa a'r gronfa ddata).

Datblygu cymwysiadau a defnyddio Blue-Green, yn seiliedig ar fethodoleg The Twelve-Factor App gydag enghreifftiau yn php a docker

11. Cyfluniadau a 12. Adeiladu, rhyddhau, rhedeg

Roeddwn i eisiau cysegru'r rhan hon i Blue-Green Deployment, ond roedd yn rhy helaeth ar gyfer yr erthygl hon. Byddaf yn ysgrifennu erthygl ar wahân am hyn.

Yn gryno, mae'r cysyniad yn seiliedig ar systemau CI/CD fel Jenkins и Gitlab CI. Yn y ddau, gallwch osod newidynnau amgylchedd sy'n gysylltiedig ag amgylchedd penodol. Yn unol â hynny, yn y sefyllfa hon, cyflawnir pwynt c Cyfluniadau.

A'r pwynt am Adeiladu, rhyddhau, rhedeg yn cael ei datrys gan swyddogaethau adeiledig gyda'r enw Pipeline.

Pipeline yn caniatáu ichi rannu'r broses leoli yn sawl cam, gan amlygu'r camau cydosod, rhyddhau a gweithredu. Hefyd yn Pipeline, gallwch greu copïau wrth gefn, ac yn wir unrhyw beth. Mae hwn yn offeryn â photensial di-ben-draw.

Mae'r cod cais yn Github.
Peidiwch ag anghofio cychwyn yr is-fodiwl wrth glonio'r ystorfa hon.

PS: Gellir defnyddio'r holl ddulliau hyn gydag unrhyw gyfleustodau ac ieithoedd rhaglennu eraill. Y prif beth yw nad yw'r hanfod yn wahanol.

Ffynhonnell: hab.com

Ychwanegu sylw