Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

Earst, in bytsje teory. Wat is der bard De Twelve-Factor App?

Yn ienfâldige wurden is dit dokumint ûntworpen om de ûntwikkeling fan SaaS-applikaasjes te ferienfâldigjen, te helpen troch ûntwikkelders en DevOps-yngenieurs te ynformearjen oer de problemen en praktiken dy't it meast tsjinkomme yn 'e ûntwikkeling fan moderne applikaasjes.

It dokumint is makke troch de ûntwikkelders fan it Heroku-platfoarm.

De Twelve-Factor-app kin tapast wurde op applikaasjes skreaun yn elke programmeartaal en mei elke kombinaasje fan stipetsjinsten (databases, berjochtwachtrige, caches, ensfh.).

Koartsein oer de faktoaren wêrop dizze metodyk basearre is:

  1. Koadebase - Ien koadebase folge yn ferzjekontrôle - meardere ynset
  2. Ofhinklikens - Ferklearje en isolearje ôfhinklikens eksplisyt
  3. Konfiguraasje - Bewarje konfiguraasje yn runtime
  4. Backing Tsjinsten - Beskôgje stipetsjinsten as plug-in-boarnen
  5. Bouwe, loslitte, rinne - Strikt skiede de gearkomste- en útfieringsstadia
  6. Prozessen - Run de applikaasje as ien of mear steatleaze prosessen
  7. Port binding - Eksportearje tsjinsten fia haven binding
  8. Parallelisme - Skaalje jo applikaasje mei prosessen
  9. Wegwerpberens - Maksimalisearje betrouberens mei rappe opstart en skjinne ôfsluting
  10. Applikaasje ûntwikkeling / operaasje parity - Hâld jo omjouwings foar ûntwikkeling, staging en produksje sa ferlykber mooglik
  11. Logging - Besjoch it log as in stream fan eveneminten
  12. Administrative taken - Utfiere administraasje- / beheartaken mei ad hoc-prosessen

Jo kinne mear ynformaasje krije oer de 12 faktoaren fan 'e folgjende boarnen:

Wat is Blue-Green ynset?

Blue-Green ynset is in metoade foar it leverjen fan in applikaasje oan produksje op sa'n wize dat de einklant gjin feroarings fan syn kant sjocht. Mei oare wurden, it ynsetten fan in applikaasje mei nul downtime.

It klassike BG Deploy-skema sjocht der út as it werjûn yn 'e ôfbylding hjirûnder.

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

  • Oan it begjin binne d'r 2 fysike servers mei absolút deselde koade, applikaasje, projekt, en d'r is in router (balancer).
  • De router rjochtet earst alle oanfragen nei ien fan 'e servers (grien).
  • Op it momint dat jo wer frijlitte moatte, wurdt it hiele projekt bywurke op in oare server (blau), dy't op it stuit gjin oanfragen ferwurket.
  • Neidat de koade is op blau tsjinner is folslein bywurke, de router wurdt jûn in kommando om te wikseljen út grien op blau tsjinner.
  • No sjogge alle kliïnten it resultaat fan 'e koade dy't rint mei blau tsjinner.
  • Foar in skoftke, grien de tsjinner tsjinnet as reservekopy yn gefal fan mislearre ynset nei blau tsjinner en yn gefal fan mislearring en bugs, de router skeakelt de brûkersstream werom nei grien tsjinner mei de âlde stabile ferzje, en de nije koade wurdt stjoerd foar revyzje en testen.
  • En oan 'e ein fan it proses wurdt it op deselde wize bywurke grien tsjinner. En nei it bywurkjen skeakelt de router de fersykstream werom nei grien tsjinner.

It sjocht der allegear hiel goed út en op it earste each moatte der gjin problemen mei wêze.
Mar om't wy yn 'e moderne wrâld libje, past de opsje mei fysike skeakeljen lykas oanjûn yn it klassike skema ús net. Nim de ynformaasje foar no op, wy komme der letter op werom.

Min en goed advys

Disclaimer: De foarbylden hjirûnder litte de nutsfoarsjenningen / metoaden sjen dy't ik brûk, jo kinne absolút alle alternativen brûke mei ferlykbere funksjes.

De measte foarbylden sille op ien of oare manier krúsje mei webûntwikkeling (dit is in ferrassing), mei PHP en Docker.

De paragrafen hjirûnder jouwe in ienfâldige praktyske beskriuwing fan it gebrûk fan faktoaren mei spesifike foarbylden; as jo mear teory wolle krije oer dit ûnderwerp, folgje dan de keppelings hjirboppe nei de oarspronklike boarne.

1. Koadebase

Brûk FTP en FileZilla foar in upload triemmen oan de tsjinners ien op in tiid, bewarje de koade net earne oars as op de produksje tsjinner.

It projekt moat altyd in inkele koadebasis hawwe, dat is, alle koade komt fan ien gean repository. Servers (produksje, staging, test1, test2...) brûke koade fan tûken fan ien mienskiplik repository. Op dizze manier berikke wy koadekonsistinsje.

2. Ofhinklikens

Download alle biblioteken yn mappen direkt nei de root fan it projekt. Meitsje updates gewoan troch de nije koade oer te bringen nei de map mei de aktuele ferzje fan 'e bibleteek. Ynstallearje alle nedige nutsbedriuwen direkt op 'e host-tsjinner wêr't 20 mear tsjinsten rinne.

In projekt moat altyd in dúdlik begryplike list fan ôfhinklikens hawwe (mei ôfhinklikens bedoel ik ek de omjouwing). Alle ôfhinklikens moatte eksplisyt definieare en isolearre wurde.
Lit ús nimme as foarbyld komponist и Havenarbeider.

komponist - in pakketbehearder wêrmei jo biblioteken yn PHP kinne ynstallearje. Komponist lit jo ferzjes strikt of los opjaan, en se eksplisyt definiearje. D'r kinne 20 ferskillende projekten op 'e tsjinner wêze en elk sil in persoanlike list hawwe mei pakketten en biblioteken ûnôfhinklik fan' e oare.

Havenarbeider - in hulpprogramma wêrmei jo de omjouwing kinne definiearje en isolearje wêryn de applikaasje sil rinne. Dêrtroch, krekt as by komponist, mar yngeand, kinne wy ​​bepale wêrmei de applikaasje wurket. Selektearje in spesifike ferzje fan PHP, ynstallearje allinich de pakketten dy't nedich binne foar it projekt om te wurkjen, sûnder wat ekstra ta te foegjen. En it wichtichste, sûnder te bemuoien mei de pakketten en omjouwing fan 'e hostmasine en oare projekten. Dat is, alle projekten op 'e server dy't troch Docker rinne, kinne absolút elke set pakketten en in folslein oare omjouwing brûke.

3. Konfiguraasje

Bewarje konfiguraasjes as konstanten direkt yn 'e koade. Aparte konstanten foar de test tsjinner, apart foar produksje. Bind de wurking fan 'e applikaasje ôfhinklik fan' e omjouwing direkt yn 'e saaklike logika fan it projekt mei as oars konstruksjes.

Konfiguraasjes - dit is de iennichste manier wêrop de ynset fan projekten ferskille moatte. Ideal moatte konfiguraasjes wurde trochjûn troch omjouwingsfariabelen (env vars).

Dat is, sels as jo ferskate konfiguraasjetriemmen .config.prod .config.local opslaan en se op it momint fan ynset omneame nei .config (de haadkonfiguraasje wêrfan de applikaasje gegevens lêst) - dit sil net de goeie oanpak wêze, om't yn dit gefal sil de ynformaasje fan 'e konfiguraasjes iepenbier beskikber wêze foar alle applikaasje-ûntwikkelders en sille gegevens fan' e produksjetsjinner kompromitteare wurde. Alle konfiguraasjes moatte direkt wurde opslein yn it ynsetsysteem (CI / CD) en generearre foar ferskate omjouwings mei ferskate wearden dy't nedich binne foar in spesifike omjouwing op it momint fan ynset.

4. Tsjinsten fan tredden

Wês strikt bûn oan it miljeu, brûk ferskate ferbiningen foar deselde tsjinsten yn bepaalde omjouwings.

Yn feite oerlapet dit punt sterk mei it punt oer konfiguraasjes, om't sûnder dit punt normale konfiguraasjegegevens net kinne wurde makke en yn 't algemien sil de mooglikheid om te konfigurearjen nei neat sakje.

Alle ferbiningen mei eksterne tsjinsten, lykas wachtrige tsjinners, databases, caching tsjinsten, moatte itselde wêze foar sawol de lokale omjouwing as de tredde partij / produksjeomjouwing. Mei oare wurden, op elk momint, troch de ferbiningsstring te feroarjen, kin ik oproppen nei basis #1 ferfange mei basis #2 sûnder de applikaasjekoade te feroarjen. Of, as foarbyld, as jo de tsjinst skaalje, hoege jo de ferbining net op in spesjale manier op te jaan foar in ekstra cache-tsjinner.

5. Bouwe, loslitte, útfiere

Hawwe allinich de definitive ferzje fan 'e koade op' e tsjinner, sûnder kâns om de frijlitting werom te rôljen. Gjin needsaak om te foljen skiif romte. Elkenien dy't tinkt dat se koade yn produksje kinne frijlitte mei in flater is in minne programmeur!

Alle stadia fan ynset moatte fan elkoar skieden wurde.

Hawwe in kâns om werom te rôljen. Meitsje releases mei âlde kopyen fan 'e applikaasje (al gearstald en klear foar slach) bewarre yn rappe tagong, sadat jo yn gefal fan flaters de âlde ferzje kinne weromsette. Dat is, betingst is der in map ferliest en folder aktueel, en nei suksesfolle ynset en gearstalling de map aktueel keppele troch in symboalyske keppeling nei de nije útjefte dy't binnen leit ferliest mei de konvinsjonele namme fan it release nûmer.

Dit is wêr't wy ûnthâlde Blue-Green-ynset, wêrtroch jo net allinich kinne wikselje tusken koade, mar ek om te wikseljen tusken alle boarnen en sels omjouwings mei de mooglikheid om alles werom te rôljen.

6. prosessen

Bewarje applikaasjestatusgegevens direkt yn 'e applikaasje sels. Brûk sesjes yn it RAM fan 'e applikaasje sels. Brûk safolle mooglik dielen tusken tsjinsten fan tredden. Fertrouwe op it feit dat de applikaasje mar ien proses kin hawwe en skaalfergrutting net tastean.

Wat sesjes oanbelanget, bewarje gegevens allinich yn in cache kontrolearre troch tsjinsten fan tredden (memcached, redis), dus sels as jo 20 applikaasjeprosessen hawwe rinnen, sil ien fan harren, nei't tagong ta de cache hat, kinne trochgean mei wurkjen mei de kliïnt yn deselde steat wêryn de brûker wurke mei de applikaasje yn in oar proses. Mei dizze oanpak docht bliken dat nettsjinsteande hoefolle kopyen fan tsjinsten fan tredden jo brûke, alles sil normaal wurkje en sûnder problemen mei tagong ta gegevens.

7. Port binding

Allinich de webserver moat witte hoe't se wurkje mei tsjinsten fan tredden. Of noch better, ynstallearje tsjinsten fan tredden direkt binnen de webserver. Bygelyks as PHP-module yn Apache.
Al jo tsjinsten moatte foar elkoar tagonklik wêze fia tagong ta ien adres en poarte (localgost: 5432, localhost: 3000, nginx: 80, php-fpm: 9000), dat is, fan nginx kin ik tagong krije ta sawol php- fpm as nei postgres, en fan php-fpm nei postgres en nginx en eins fan elke tsjinst kin ik tagong krije ta in oare tsjinst. Op dizze manier is de leefberens fan in tsjinst net bûn oan 'e leefberens fan in oare tsjinst.

8. Parallelisme

Wurkje mei ien proses, oars kinne ferskate prosessen net mei-inoar opkomme!

Lit romte foar skaalfergrutting. Docker swarm is geweldich foar dit.
Docker Swarm is in ark foar it meitsjen en behearen fan klusters fan konteners sawol tusken ferskate masines as in boskje konteners op deselde masine.

Mei help fan swarm kin ik bepale hoefolle boarnen ik sil tawize oan elk proses en hoefolle prosessen fan deselde tsjinst ik sil lansearje, en de ynterne balancer, ûntfangt gegevens op in opjûne haven, sil automatysk proxy it oan de prosessen. Sa, sjoen dat de lading op de tsjinner is tanommen, Ik kin tafoegje mear prosessen, dêrmei ferminderjen fan de lading op bepaalde prosessen.

9. Disposability

Brûk gjin wachtrijen om te wurkjen mei prosessen en gegevens. Killing ien proses moat beynfloedzje de hiele applikaasje. As ien tsjinst giet del, alles giet del.

Elk proses en tsjinst kin op elk momint útskeakele wurde en dit soe gjin ynfloed hawwe op oare tsjinsten (dit betsjut fansels net dat de tsjinst net beskikber is foar in oare tsjinst, mar dat in oare tsjinst nei dizze net útskeakele sil). Alle prosessen moatte graceful beëinige wurde, sadat as se wurde beëinige, gjin gegevens wurde skansearre en it systeem sil wurkje goed de folgjende kear as jo it oansette. Dat is, sels yn it gefal fan in needbeëiniging, moatte de gegevens net beskeadige wurde (it transaksjemeganisme is hjir geskikt, queries yn 'e databank wurkje allinich yn groepen, en as op syn minst ien query fan 'e groep mislearret of wurdt útfierd mei in flater, dan mislearret gjin oare fraach fan 'e groep úteinlik yn feite).

10. Applikaasje ûntwikkeling / operaasje parity

Produksje, staging en lokale ferzje fan 'e applikaasje moatte oars wêze. Yn produksje brûke wy it Yii Lite-ramt, en lokaal Yii, sadat it rapper wurket yn produksje!

Yn 'e realiteit moatte alle ynset en wurk mei koade yn hast in identike omjouwing wêze moatte (wy prate net oer fysike hardware). Ek moat elke ûntwikkelingsmeiwurker de koade kinne ynsette foar produksje as it nedich is, en net ien of oare spesjaal oplaat devops-ôfdieling, dy't allinich troch spesjale krêft de applikaasje yn produksje kin ophelje.

Docker helpt ús hjir ek mei. As alle foargeande punten wurde waarnommen, sil it brûken fan docker it proses bringe fan it ynsetten fan 'e omjouwing sawol op produksje as op' e lokale masine om ien of twa kommando's yn te fieren.

11. Logboeken

Wy skriuwe logs nei bestannen en databases! Wy skjinmeitsje bestannen en databases net út logs. Litte wy gewoan in hurde skiif keapje mei 9000 Peta bytes en dat is goed.

Alle logs moatte wurde beskôge as in stream fan eveneminten. De applikaasje sels moat net belutsen wurde by it ferwurkjen fan logs. Logs moatte wurde útstjoerd nei stdout of stjoerd fia in protokol lykas udp, sadat wurkjen mei logs gjin problemen foar de applikaasje makket. Graylog is hjir goed foar. Graylog ûntfangt alle logs fia udp (dit protokol fereasket gjin wachtsjen op in antwurd oer de suksesfolle ûntfangst fan it pakket) bemuoit de applikaasje op gjin inkelde manier en giet allinich om strukturearjen en ferwurkjen fan logs. De applikaasjelogika feroaret net om te wurkjen mei sokke oanpak.

12. Administration taken

Brûk in apart oanmakke einpunt yn 'e API om gegevens, databases, ensfh. Mar do bist net dom, do silst net klikke twa kear, en wy hawwe net nedich migraasje.

Alle administraasjetaken moatte wurde útfierd yn deselde omjouwing as alle koade, op it frijlittingsnivo. Dat is, as wy de struktuer fan 'e databank moatte feroarje, dan sille wy it net manuell dwaan troch de nammen fan kolommen te feroarjen en nije ta te foegjen fia guon ark foar fisuele databankbehear. Foar sokke dingen meitsje wy aparte skripts - migraasjes, dy't oeral en yn alle omjouwings op deselde wize útfierd wurde mei in mienskiplik en begryplik resultaat. Foar alle oare taken, lykas it foljen fan it projekt mei gegevens, moatte ferlykbere metoaden brûkt wurde.

Foarbyld ymplemintaasje yn PHP, Laravel, Laradock, Docker-Compose

PS Alle foarbylden waarden makke op MacOS. De measte fan harren binne ek geskikt foar Linux. Windows brûkers, ferjou my, mar ik haw net wurke mei Windows foar in lange tiid.

Litte wy ús in situaasje foarstelle wêr't wy gjin ferzje fan PHP hawwe ynstalleare op ús PC en hielendal neat.
Ynstallearje de lêste ferzjes fan docker en docker-compose. (dit is te finen op it ynternet)

docker -v && 
docker-compose -v

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

1. Set Laradock

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

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

Oangeande Laradock sil ik sizze dat it in heul cool ding is, dat in protte konteners en auxiliary dingen befettet. Mar ik soe it net oanrikkemandearje om Laradock as sadanich te brûken sûnder modifikaasjes yn produksje fanwegen syn oerstalligens. It is better om jo eigen konteners te meitsjen op basis fan foarbylden yn Laradock, dit sil folle mear optimalisearre wurde, om't gjinien alles nedich hat dat der tagelyk is.

2. Laradock konfigurearje om ús applikaasje út te fieren.

cd laradock && 
cp env-example .env

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

2.1. Iepenje de habr-map (de âldermap wêryn laradock is klone) yn guon bewurker. (Yn myn PHPStorm gefal)

Op dit stadium jouwe wy it projekt allinich in namme.

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

2.2. Launch it wurkromteôfbylding. (Yn jo gefal sille de ôfbyldings wat tiid duorje om te bouwen)
Wurkromte is in spesjaal taret byld foar it wurkjen mei it ramt út namme fan de ûntwikkelder.

Wy geane yn 'e kontener mei help fan

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

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

2.3. Ynstallaasje fan Laravel

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

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

2.4. Nei ynstallaasje kontrolearje wy oft de map mei it projekt is oanmakke en deadzje compose.

ls
exit
docker-compose down

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

2.5. Litte wy weromgean nei PHPStorm en it juste paad ynstelle nei ús laravel-applikaasje yn it .env-bestân.

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

3. Foegje alle koade ta oan Git.

Om dit te dwaan, sille wy in repository oanmeitsje op Github (of earne oars). Litte wy nei de habr-map yn 'e terminal gean en de folgjende koade útfiere.

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

Lit ús kontrolearje oft alles yn oarder is.

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

Foar gemak advisearje ik wat fisuele ynterface te brûken foar Git, yn myn gefal is it GitKraken. (hjir is in ferwizingslink)

4. Litte wy begjinne!

Foardat jo begjinne, soargje derfoar dat neat hinget op havens 80 en 443.

docker-compose up -d nginx php-fpm

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

Sa, ús projekt bestiet út 3 aparte tsjinsten:

  • nginx - webtsjinner
  • php-fpm - php foar it ûntfangen fan oanfragen fan in webserver
  • wurkromte - php foar ûntwikkelders

Op it stuit hawwe wy berikt dat wy in applikaasje hawwe makke dy't foldocht oan 4 punten fan 12, nammentlik:

1. Koadebase - alle koade is yn ien repository (lytse opmerking: it kin korrekt wêze om docker yn it laravel-projekt ta te foegjen, mar dit is net wichtich).

2. Ofhinklikens - Al ús ôfhinklikens binne eksplisyt skreaun yn application/composer.json en yn elke Dockerfile fan elke kontener.

3. Backing Tsjinsten - Elk fan 'e tsjinsten (php-fom, nignx, wurkromte) libbet in eigen libben en is fan bûten ferbûn en as jo mei ien tsjinst wurkje, sil de oare net beynfloede wurde.

4. Prozessen - elke tsjinst is ien proses. Elk fan 'e tsjinsten ûnderhâldt gjin ynterne steat.

5. Port binding

docker ps

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

Sa't wy sjen kinne, rint elke tsjinst op syn eigen haven en is tagonklik foar alle oare tsjinsten.

6. Parallelisme

Docker lit ús meardere prosessen fan deselde tsjinsten spawn mei automatyske loadbalânsjen tusken har.

Litte wy de konteners stopje en se troch de flagge rinne --skaal

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

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

Sa't wy sjen kinne, binne kopyen makke fan 'e php-fpm-container. Wy hoege neat te feroarjen yn it wurkjen mei dizze kontener. Wy bliuwe ek tagong ta haven 9000, en Docker regelet de lading tusken konteners foar ús.

7. Wegwerpberens - elke kontener kin fermoarde wurde sûnder de oare skea. It stopjen of opnij starte fan 'e kontener sil gjin ynfloed hawwe op' e wurking fan 'e applikaasje by folgjende lansearrings. Elke kontener kin ek op elk momint opheft wurde.

8. Applikaasje ûntwikkeling / operaasje parity - al ús omjouwings binne itselde. Troch it systeem út te fieren op in server yn produksje, hoege jo neat te feroarjen yn jo kommando's. Alles sil op deselde manier basearre wurde op Docker.

9. Logging - alle logs yn dizze konteners gean nei stream en binne sichtber yn 'e Docker-konsole. (yn dit gefal, yn feite, mei oare selsmakke konteners, kin dit net it gefal wêze as jo der net foar soargje)

 docker-compose logs -f

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

Mar d'r is in fangen yn dat de standertwearden yn PHP en Nginx ek logs skriuwe nei in bestân. Om de 12 faktoaren te foldwaan, is it nedich losmeitsje skriuwen logs nei in bestân yn 'e konfiguraasjes fan elke kontener apart.

Docker biedt ek de mooglikheid om logs net allinich nei stdout te stjoeren, mar ek nei dingen lykas greylog, dy't ik hjirboppe neamde. En binnen greylog kinne wy ​​​​de logs betsjinje lykas wy wolle en ús applikaasje sil dit op gjin inkelde manier fernimme.

10. Administrative taken - alle administraasjetaken wurde oplost troch laravel tank oan it ambachtlike ark krekt lykas de makkers fan 'e 12-faktorapplikaasje wolle.

As foarbyld sil ik sjen litte hoe't guon kommando's wurde útfierd.
Wy geane yn 'e kontener.

 
docker-compose exec workspace bash
php artisan list

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

No kinne wy ​​elk kommando brûke. (Tink derom dat wy de databank en cache net konfigurearre hawwe, sadat de helte fan 'e kommando's net korrekt wurde útfierd, om't se ûntwurpen binne om te wurkjen mei de cache en databank).

Applikaasjeûntwikkeling en Blue-Green-ynset, basearre op The Twelve-Factor App-metodology mei foarbylden yn php en docker

11. Konfiguraasjes en 12. Bouwe, loslitte, rinne

Ik woe dit diel wijde oan Blue-Green Deployment, mar it die bliken te wiidweidich foar dit artikel. Ik sil hjir in apart artikel oer skriuwe.

Yn in notedop is it konsept basearre op CI / CD-systemen lykas Jenkins и Gitlab CI. Yn beide kinne jo omjouwingsfariabelen ynstelle dy't ferbûn binne mei in spesifike omjouwing. Dêrtroch sil yn dizze situaasje punt c foldien wurde Konfiguraasjes.

En it punt oer Bouwe, loslitte, rinne wurdt oplost troch ynboude funksjes mei de namme Pipeline.

Pipeline kinne jo it ynsetproses ferdielen yn in protte stadia, markearje de stadia fan gearstalling, frijlitting en útfiering. Ek yn Pipeline kinne jo backups meitsje, en yndie alles. Dit is in ark mei limitless potensjeel.

De applikaasje koade is by Github.
Ferjit net de submodule te inisjalisearjen by it klonen fan dit repository.

PS: Al dizze oanpakken kinne brûkt wurde mei alle oare nutsbedriuwen en programmeartalen. It wichtichste ding is dat de essinsje net ferskille.

Boarne: www.habr.com

Add a comment