Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

Esiteks vĂ€ike teooria. Mis on juhtunud KaheteistkĂŒmne teguri rakendus?

Lihtsamalt öeldes on see dokument loodud SaaS-i rakenduste arendamise lihtsustamiseks, aidates arendajaid ja DevOpsi insenere teavitada probleemidest ja tavadest, millega tÀnapÀevaste rakenduste arendamisel kÔige sagedamini kokku puututakse.

Dokumendi lÔid Heroku platvormi arendajad.

KaheteistkĂŒmne teguri rakendust saab rakendada rakendustele, mis on kirjutatud mis tahes programmeerimiskeeles ja kasutavad mis tahes tugiteenuste kombinatsiooni (andmebaasid, sĂ”numijĂ€rjekorrad, vahemĂ€lud jne).

LĂŒhidalt teguritest, millel see metoodika pĂ”hineb:

  1. Koodibaas – Üks koodibaas, mida jĂ€lgitakse versioonikontrollis – mitu juurutamist
  2. SĂ”ltuvused – SĂ”ltuvuste selgesĂ”naline deklareerimine ja eraldamine
  3. Konfiguratsioon - Salvestage konfiguratsioon kÀitusajal
  4. Taustateenused – Kaaluge tugiteenuseid pistikprogrammide ressurssidena
  5. Ehitage, vabastage, jookske – Eraldage rangelt montaaĆŸi- ja teostamisetapid
  6. Protsessid – KĂ€ivitage rakendus ĂŒhe vĂ”i mitme olekuta protsessina
  7. Pordi sidumine – Eksporditeenused pordi sidumise kaudu
  8. Paralleelsus – Skaleerige oma rakendust protsesside abil
  9. Ühekordseks kasutamiseks - Maksimeerige töökindlus kiire kĂ€ivitamise ja puhta vĂ€ljalĂŒlitamisega
  10. Rakenduste arendamise/operatsiooni paarsus – Hoidke oma arendus-, lavastus- ja tootmiskeskkonnad vĂ”imalikult sarnased
  11. Logimine – Vaadake logi sĂŒndmuste voona
  12. HaldusĂŒlesanded – tĂ€itke haldus-/haldusĂŒlesandeid, kasutades ad hoc protsesse

12 teguri kohta saate lisateavet jÀrgmistest allikatest.

Mis on sinine-roheline juurutamine?

Sinine-roheline juurutus on meetod rakenduse edastamiseks tootmine selliselt, et lÔppklient ei nÀeks omapoolseid muutusi. TeisisÔnu, rakenduse juurutamine nulliga seisakuaeg.

Klassikaline BG juurutamise skeem nÀeb vÀlja selline, nagu on nÀidatud alloleval pildil.

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

  • Alguses on 2 fĂŒĂŒsilist serverit absoluutselt sama koodi, rakenduse, projektiga ja olemas on ruuter (balancer).
  • Algselt suunab ruuter kĂ”ik pĂ€ringud ĂŒhte serveritest (roheline).
  • Sel hetkel, kui peate uuesti vabastama, vĂ€rskendatakse kogu projekti teises serveris (SININE ), mis praegu taotlusi ei töötle.
  • PĂ€rast koodi sisselĂŒlitamist sinine server on tĂ€ielikult uuendatud, antakse ruuterile kĂ€sk lĂŒlituda roheline edasi SININE server.
  • NĂŒĂŒd nĂ€evad kĂ”ik kliendid töötava koodi tulemust sinine server.
  • MĂ”nda aega, roheline server toimib varukoopiana, kui selle juurutamine ebaĂ”nnestub SININE server ning tĂ”rgete ja vigade korral lĂŒlitab ruuter kasutajavoo tagasi roheline serverisse vana stabiilse versiooniga ning uus kood saadetakse ĂŒlevaatamiseks ja testimiseks.
  • Ja protsessi lĂ”pus vĂ€rskendatakse seda samal viisil roheline server. Ja pĂ€rast selle vĂ€rskendamist lĂŒlitab ruuter pĂ€ringuvoo tagasi roheline server.

KÔik tundub vÀga hea ja esmapilgul ei tohiks sellega probleeme tekkida.
Kuid kuna me elame kaasaegses maailmas, siis klassikalises skeemis nĂ€idatud fĂŒĂŒsilise ĂŒmberlĂŒlitamise vĂ”imalus meile ei sobi. Salvestage teave praegu, me naaseme selle juurde hiljem.

Halb ja hea nÔuanne

Vastutusest loobumine: Allolevad nÀited nÀitavad minu kasutatavaid utiliite/metoodikaid, vÔite kasutada absoluutselt kÔiki sarnaste funktsioonidega alternatiive.

Enamik nĂ€iteid ristub ĂŒhel vĂ”i teisel viisil veebiarendusega (see on ĂŒllatus), PHP ja Dockeriga.

Allolevates lĂ”ikudes kirjeldatakse lihtsat praktilist tegurite kasutamist konkreetsete nĂ€idete abil; kui soovite selle teema kohta rohkem teooriat saada, jĂ€rgige ĂŒlalolevaid linke algallikale.

1. Koodibaas

Failide ĂŒkshaaval ĂŒleslaadimiseks serveritesse kasutage FTP-d ja FileZillat, Ă€rge salvestage koodi mujal kui tootmisserveris.

Projektil peaks alati olema ĂŒks koodibaas, see tĂ€hendab, et kogu kood pĂ€rineb ĂŒhest Git hoidla. Serverid (tootmine, lavastus, test1, test2...) kasutavad koodi ĂŒhe ĂŒhise hoidla harudest. Nii saavutame koodi jĂ€rjepidevuse.

2. SÔltuvused

Laadige kÔik kaustades olevad teegid alla otse projekti juure. Tehke vÀrskendusi lihtsalt, teisaldades uue koodi teegi praeguse versiooniga kausta. Installige kÔik vajalikud utiliidid otse hostserverisse, kus töötab veel 20 teenust.

Projektil peaks alati olema selgelt arusaadav sÔltuvuste loetelu (sÔltuvuste all pean silmas ka keskkonda). KÔik sÔltuvused peavad olema selgelt mÀÀratletud ja eraldatud.
VÔtame nÀiteks Koostama О laevalaadija.

Koostama — paketihaldur, mis vĂ”imaldab installida PHP-sse teeke. Helilooja vĂ”imaldab teil versioone rangelt vĂ”i lĂ”dvalt mÀÀrata ja need selgesĂ”naliselt mÀÀratleda. Serveris vĂ”ib olla 20 erinevat projekti ja igaĂŒhel neist on teisest sĂ”ltumatu pakettide ja teekide isiklik loend.

laevalaadija — utiliit, mis vĂ”imaldab mÀÀrata ja eraldada keskkonna, milles rakendus töötab. Sellest lĂ€htuvalt, nagu helilooja puhul, aga pĂ”hjalikumalt, saame mÀÀrata, millega rakendus töötab. Valige konkreetne PHP versioon, installige ainult projekti toimimiseks vajalikud paketid, ilma midagi lisamata. Ja mis kĂ”ige tĂ€htsam, ilma peremeesmasina ja muude projektide pakette ja keskkonda segamata. See tĂ€hendab, et kĂ”ik Dockeri kaudu töötavad projektid saavad kasutada absoluutselt mis tahes pakettide komplekti ja tĂ€iesti erinevat keskkonda.

3. Konfiguratsioon

Salvestage konfiguratsioonid konstantidena otse koodis. Testserveri jaoks eraldi konstandid, tootmise jaoks eraldi. Seo rakenduse toimimine sÔltuvalt keskkonnast otse projekti Àriloogikasse, kasutades if else konstruktsioone.

Konfiguratsioonid - see on ainus viis, kuidas projekti kasutuselevÔtt peaks erinema. Ideaalis tuleks konfiguratsioonid edastada keskkonnamuutujate (env vars) kaudu.

See tĂ€hendab, et isegi kui salvestate mitu konfiguratsioonifaili .config.prod .config.local ja nimetate need juurutamise ajal ĂŒmber konfiguratsiooniks .config (peamine konfiguratsioon, millest rakendus andmeid loeb), ei ole see Ă”ige lĂ€henemisviis, kuna sel juhul on konfiguratsioonide teave avalikult kĂ€ttesaadav kĂ”igile rakenduste arendajatele ja tootmisserveri andmed on ohustatud. KĂ”ik konfiguratsioonid tuleb salvestada otse juurutussĂŒsteemi (CI/CD) ja genereerida erinevate keskkondade jaoks erinevate vÀÀrtustega, mis on juurutamise ajal konkreetse keskkonna jaoks vajalikud.

4. Kolmanda osapoole teenused

Olge keskkonnaga rangelt seotud, kasutage teatud keskkondades samade teenuste jaoks erinevaid ĂŒhendusi.

Tegelikult kattub see punkt tugevalt konfiguratsiooni puudutava punktiga, kuna ilma selle punktita ei saa teha tavalisi konfiguratsiooniandmeid ja ĂŒldiselt langeb konfigureerimise vĂ”imalus olematuks.

KĂ”ik ĂŒhendused vĂ€listeenustega, nagu jĂ€rjekorraserverid, andmebaasid, vahemĂ€luteenused, peavad olema samad nii kohaliku keskkonna kui ka kolmanda osapoole/tootmiskeskkonna jaoks. TeisisĂ”nu, ĂŒhendusstringi muutes saan igal ajal asendada kĂ”ned baasi nr 1 baasiga nr 2 ilma rakenduse koodi muutmata. VĂ”i tulevikku vaadates ei pea te teenuse skaleerimisel nĂ€iteks tĂ€iendava vahemĂ€luserveri jaoks ĂŒhendust eriliselt mÀÀrama.

5. Ehitage, vabastage, teostage

Serveris peab olema ainult koodi lĂ”plik versioon, ilma vĂ”imaluseta vĂ€ljalaset tagasi pöörata. Kettaruumi pole vaja tĂ€ita. IgaĂŒks, kes arvab, et suudab veaga koodi tootmisse lasta, on halb programmeerija!

KĂ”ik kasutuselevĂ”tu etapid peavad olema ĂŒksteisest eraldatud.

Teil on vĂ”imalus tagasi pöörata. Tehke vĂ€ljalasked rakenduse vanade koopiatega (juba kokkupandud ja lahinguvalmis), mis on salvestatud kiirjuurdepÀÀsusse, et vigade korral saaksite vana versiooni taastada. See tĂ€hendab, et tingimuslikult on kaust releases ja kaust praegunening pĂ€rast edukat juurutamist ja kausta kokkupanemist praegune on seotud sĂŒmboolse lingiga uuele vĂ€ljalasele, mis asub sees releases vĂ€ljalaskenumbri tavapĂ€rase nimetusega.

Siin mĂ€letame sini-rohelist juurutamist, mis vĂ”imaldab teil mitte ainult koodide vahel lĂŒlituda, vaid ka lĂŒlituda kĂ”igi ressursside ja isegi keskkondade vahel koos vĂ”imalusega kĂ”ik tagasi pöörata.

6. Protsessid

Salvestage rakenduse olekuandmed otse rakenduses endas. Kasutage seansse rakenduse enda RAM-is. Kasutage vĂ”imalikult palju jagamist kolmandate osapoolte teenuste vahel. Toetuge asjaolule, et rakendusel vĂ”ib olla ainult ĂŒks protsess ja see ei vĂ”imalda skaleerimist.

Seansside puhul salvestage andmeid ainult vahemĂ€llu, mida juhivad kolmandate osapoolte teenused (memcached, redis), nii et isegi kui teil on töös 20 rakendusprotsessi, saab igaĂŒks neist pĂ€rast vahemĂ€llu juurde pÀÀsemist jĂ€tkata kliendiga koostööd samas olekus, milles kasutaja töötas rakendusega teises protsessis. Selle lĂ€henemisviisiga selgub, et olenemata sellest, kui palju kolmandate osapoolte teenuste koopiaid te kasutate, töötab kĂ”ik normaalselt ja andmetele juurdepÀÀsu probleemideta.

7. Pordiköitmine

Ainult veebiserver peaks teadma, kuidas töötada kolmanda osapoole teenustega. VÔi veel parem, installige kolmanda osapoole teenused otse veebiserverisse. NÀiteks PHP-moodulina Apache'is.
KĂ”ik teie teenused peavad olema ĂŒksteisele juurdepÀÀsetavad lĂ€bi juurdepÀÀsu mĂ”nele aadressile ja pordile (localgost: 5432, localhost: 3000, nginx: 80, php-fpm: 9000), see tĂ€hendab, et nginxist pÀÀsen juurde nii php- fpm kui ka postgres ja php-fpm kuni postgres ja nginx ning tegelikult pÀÀsen igast teenusest juurde teisele teenusele. Nii ei ole teenuse elujĂ”ulisus seotud mĂ”ne teise teenuse elujĂ”ulisusega.

8. Paralleelsus

Töötage ĂŒhe protsessiga, muidu ei saa mitu protsessi omavahel lĂ€bi!

JĂ€ta ruumi skaleerimiseks. Dockeri sĂŒlem on selleks suurepĂ€rane.
Docker Swarm on tööriist konteinerite klastrite loomiseks ja haldamiseks nii erinevate masinate kui ka sama masina konteinerite hunniku vahel.

Swarmi abil saan mÀÀrata, kui palju ressursse ma igale protsessile eraldan ja mitu sama teenuse protsessi kÀivitan ning sisemine tasakaalustaja, saades andmeid antud pordi kohta, puhverdab selle automaatselt protsessidele. Seega, nÀhes, et serveri koormus on suurenenud, saan lisada protsesse juurde, vÀhendades seelÀbi teatud protsesside koormust.

9. Ühekordseks kasutamiseks

Ärge kasutage protsesside ja andmetega töötamiseks jĂ€rjekordi. Ühe protsessi tapmine peaks mĂ”jutama kogu rakendust. Kui ĂŒks teenus kaob, lĂ€heb kĂ”ik alla.

Iga protsessi ja teenuse saab igal ajal vĂ€lja lĂŒlitada ja see ei tohiks mĂ”jutada teisi teenuseid (loomulikult ei tĂ€henda see, et teenus ei oleks mĂ”ne teise teenuse jaoks saadaval, vaid seda, et pĂ€rast seda ei lĂŒlitu mĂ”ni teenus vĂ€lja). KĂ”ik protsessid tuleb lĂ”petada graatsiliselt, et nende lĂ”petamisel andmed ei kahjustataks ja sĂŒsteem töötaks jĂ€rgmisel sisselĂŒlitamisel Ă”igesti. See tĂ€hendab, et isegi hĂ€daolukorra lĂ”petamise korral ei tohiks andmeid kahjustada (siia sobib tehingumehhanism, pĂ€ringud andmebaasis töötavad ainult rĂŒhmadena ja kui vĂ€hemalt ĂŒks pĂ€ring grupist ebaĂ”nnestub vĂ”i tĂ€idetakse viga, siis ĂŒkski teine ​​pĂ€ring grupist lĂ”puks ebaĂ”nnestub).

10. Rakenduse arendamise/operatsiooni pariteedi

Rakenduse tootmine, lavastus ja kohalik versioon peavad olema erinevad. Tootmises kasutame Yii Lite raamistikku ja kohapeal Yii, et see toimiks tootmises kiiremini!

Tegelikkuses peaksid kĂ”ik juurutused ja koodiga töötamine olema peaaegu identses keskkonnas (me ei rÀÀgi fĂŒĂŒsilisest riistvarast). Samuti peaks vajadusel saama koodi tootmisse juurutada iga arendustöötaja, mitte mĂ”ni erivĂ€ljaĂ”ppe saanud devops osakond, mis ainult tĂ€nu erilisele tugevusele suudab rakenduse tootmisse tĂ”sta.

Docker aitab meid ka selles. Kui jĂ€rgite kĂ”iki eelnevaid punkte, viib dockeri kasutamine keskkonna juurutamise protsessi nii tootmises kui ka kohalikus masinas ĂŒhe vĂ”i kahe kĂ€su sisestamiseni.

11. Palgid

Kirjutame logid failidesse ja andmebaasidesse! Me ei puhasta faile ja andmebaase logidest. Ostame 9000 Peta-baidiga kÔvaketta ja see on korras.

KĂ”iki logisid tuleks kĂ€sitleda sĂŒndmuste voona. Rakendus ise ei tohiks olla seotud logide töötlemisega. Logid tuleks vĂ€ljastada kas stdout-i vĂ”i saata protokolli (nt udp) kaudu, et logidega töötamine ei tekitaks rakendusele probleeme. graylog sobib selleks hĂ€sti. Graylog, mis vĂ”tab kĂ”iki logisid udp kaudu (see protokoll ei nĂ”ua vastuse ootamist paketi eduka vastuvĂ”tmise kohta) ei sega rakendust kuidagi ja tegeleb ainult logide struktureerimise ja töötlemisega. Rakendusloogika ei muutu selliste lĂ€henemisviisidega töötamiseks.

12. HaldusĂŒlesanded

Andmete, andmebaaside jms vÀrskendamiseks kasutage API-s eraldi loodud lÔpp-punkti, selle 2 korda jÀrjest kÀivitades dubleeritakse kÔik. Kuid te pole loll, te ei klÔpsa kaks korda ja me ei vaja migratsiooni.

KĂ”ik haldustoimingud tuleks teostada samas keskkonnas kui kogu kood, vĂ€ljalaske tasemel. See tĂ€hendab, et kui meil on vaja muuta andmebaasi struktuuri, siis me ei tee seda kĂ€sitsi, muutes veergude nimesid ja lisades uusi lĂ€bi mĂ”ne visuaalse andmebaasihaldustööriista. Selliste asjade jaoks loome eraldi skriptid - migratsioonid, mida teostatakse kĂ”ikjal ja kĂ”igis keskkondades ĂŒhtmoodi ĂŒhise ja arusaadava tulemusega. KĂ”igi muude ĂŒlesannete puhul, nĂ€iteks projekti andmetega tĂ€itmisel, tuleks kasutada sarnaseid metoodikaid.

NĂ€idisrakendus PHP-s, Laravelis, Laradockis, Docker-Compose'is

PS KÔik nÀited tehti MacOS-is. Enamik neist sobib ka Linuxile. Windowsi kasutajad, andke andeks, aga ma pole Windowsiga pikka aega töötanud.

Kujutagem ette olukorda, kus meie arvutisse pole installitud ĂŒhtegi PHP versiooni ja ĂŒldse mitte midagi.
Installige dockeri ja docker-compose'i uusimad versioonid. (seda vÔib leida Internetist)

docker -v && 
docker-compose -v

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

1. Panime Laradock

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

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

Laradocki kohta ĂŒtlen, et see on vĂ€ga lahe asi, mis sisaldab palju anumaid ja abiasju. Kuid ma ei soovitaks Laradocki kui sellist ilma tootmises muudatusteta kasutada selle koondamise tĂ”ttu. Parem on luua oma konteinerid Laradocki nĂ€idete pĂ”hjal, see on palju optimeeritum, sest keegi ei vaja kĂ”ike, mis seal on samal ajal.

2. Seadistage Laradock meie rakenduse kÀivitamiseks.

cd laradock && 
cp env-example .env

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

2.1. Avage mĂ”nes redaktoris kataloog habr (ĂŒlemakaust, kuhu laradock kloonitakse). (Minu PHPStormi puhul)

Selles etapis anname projektile ainult nime.

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

2.2. KÀivitage tööruumi pilt. (Teie puhul vÔtab piltide koostamine veidi aega)
Tööruum on spetsiaalselt ettevalmistatud pilt arendaja nimel raamistikuga töötamiseks.

Me lÀheme konteinerisse kasutades

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

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

2.3. Laraveli installimine

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

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

2.4. PĂ€rast installimist kontrollime, kas projektiga kataloog on loodud ja tapame koostamise.

ls
exit
docker-compose down

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

2.5. LÀheme tagasi PHPStormi juurde ja mÀÀrame .env-failis oma laraveli rakenduse Ôige tee.

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

3. Lisage kogu kood Giti.

Selleks loome Githubis (vÔi mujal) hoidla. Liigume terminalis habr kataloogi ja kÀivitame jÀrgmise koodi.

echo "# habr-12factor" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:nzulfigarov/habr-12factor.git # Đ·ĐŽĐ”ŃŃŒ Đ±ŃƒĐŽĐ”Ń‚ ссылĐșа ĐœĐ° ĐČаш Ń€Đ”ĐżĐŸ
git push -u origin master
git status

Kontrollime, kas kÔik on korras.

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

Mugavuse huvides soovitan kasutada Giti jaoks mÔnda visuaalset liidest, minu puhul on see nii GitKraken. (siin on viitelink)

4. KĂ€ivitame!

Enne kĂ€ivitamist veenduge, et portide 80 ja 443 kĂŒljes ei ripuks midagi.

docker-compose up -d nginx php-fpm

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

Seega koosneb meie projekt kolmest eraldi teenusest:

  • nginx - veebiserver
  • php-fpm - php pĂ€ringute vastuvĂ”tmiseks veebiserverist
  • tööruum - php arendajatele

Hetkel oleme saavutanud selle, et oleme loonud rakenduse, mis vastab 4 punktile 12-st, nimelt:

1. Koodibaas — kogu kood on ĂŒhes hoidlas (vĂ€ike mĂ€rkus: vĂ”ib-olla oleks Ă”ige lisada docker laraveli projekti sisse, kuid see pole oluline).

2. SÔltuvused - KÔik meie sÔltuvused on sÔnaselgelt kirjas failis application/composer.json ja iga konteineri igas Dockeri failis.

3. Taustateenused — Iga teenus (php-fom, nignx, tööruum) elab oma elu ja on vĂ€ljastpoolt ĂŒhendatud ning ĂŒhe teenusega töötamine ei mĂ”juta teist.

4. Protsessid — iga teenus on ĂŒks protsess. Iga teenus ei sĂ€ilita sisemist olekut.

5. Pordi sidumine

docker ps

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

Nagu nÀeme, töötab iga teenus oma pordis ja on juurdepÀÀsetav kÔigile teistele teenustele.

6. Paralleelsus

Docker vÔimaldab meil luua samade teenuste mitu protsessi koos nendevahelise automaatse koormuse tasakaalustamisega.

Peatame konteinerid ja laseme need lipust lÀbi --kaal

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

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

Nagu nÀeme, on php-fpm konteinerist tehtud koopiad. Me ei pea selle konteineriga töötades midagi muutma. Samuti jÀtkame sellele juurdepÀÀsu pordist 9000 ja Docker reguleerib meie eest konteinerite vahelist koormust.

7. Ühekordseks kasutamiseks - iga konteinerit saab tappa ilma teist kahjustamata. Konteineri peatamine vĂ”i taaskĂ€ivitamine ei mĂ”juta rakenduse tööd jĂ€rgnevate kĂ€ivitamiste ajal. Iga konteinerit saab ka igal ajal tĂ”sta.

8. Rakenduste arendamise/operatsiooni paarsus - kĂ”ik meie keskkonnad on ĂŒhesugused. Kui kĂ€ivitate sĂŒsteemi tootmisserveris, ei pea te oma kĂ€skudes midagi muutma. KĂ”ik pĂ”hineb samamoodi Dockeril.

9. Logimine — kĂ”ik nendes konteinerites olevad logid lĂ€hevad voogu ja on nĂ€htavad Dockeri konsoolis. (Antud juhul ei pruugi see teiste omatehtud konteinerite puhul nii olla, kui te selle eest ei hoolitse)

 docker-compose logs -f

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

Kuid selles on konks, et PHP ja Nginxi vaikevÀÀrtused kirjutavad faili ka logisid. 12 teguri tĂ€itmiseks on see vajalik lahti ĂŒhendada logide kirjutamine faili iga konteineri konfiguratsioonides eraldi.

Docker pakub ka vÔimalust saata logisid mitte ainult stdoutile, vaid ka sellistele asjadele nagu graylog, mida ma eespool mainisin. Ja halllogi sees saame logisid oma ÀranÀgemise jÀrgi kasutada ja meie rakendus ei mÀrka seda kuidagi.

10. HaldusĂŒlesanded — kĂ”ik haldusĂŒlesanded lahendab laravel tĂ€nu kĂ€sitöölisele tööriistale tĂ€pselt nii, nagu 12-faktorilise rakenduse loojad sooviksid.

NÀitena nÀitan, kuidas mÔnda kÀsku tÀidetakse.
Me lÀheme konteinerisse.

 
docker-compose exec workspace bash
php artisan list

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

NĂŒĂŒd saame kasutada mis tahes kĂ€sku. (pange tĂ€hele, et me ei konfigureerinud andmebaasi ja vahemĂ€lu, mistĂ”ttu pooled kĂ€sud ei kĂ€ivitu Ă”igesti, kuna need on loodud töötama koos vahemĂ€lu ja andmebaasiga).

Rakenduste arendus ja siniroheline juurutamine, mis pÔhineb The Twelve-Factor App metoodikal koos nÀidetega php-s ja dockeris

11. Konfiguratsioonid ja 12. Ehitage, vabastage, jookske

Tahtsin selle osa pĂŒhendada sinirohelisele juurutamisele, kuid see osutus selle artikli jaoks liiga mahukaks. Kirjutan selle kohta eraldi artikli.

LĂŒhidalt öeldes pĂ”hineb kontseptsioon CI/CD sĂŒsteemidel nagu Jenkins Đž Gitlab CI. MĂ”lemas saate mÀÀrata konkreetse keskkonnaga seotud keskkonnamuutujaid. Vastavalt sellele tĂ€idetakse selles olukorras punkt c Konfiguratsioonid.

Ja point umbes Ehitage, vabastage, jookske on lahendatud nimega sisseehitatud funktsioonidega Torujuhe.

Torujuhe vÔimaldab jagada juurutamisprotsessi mitmeks etapiks, tuues esile kokkupaneku, vabastamise ja tÀitmise etapid. Ka Pipeline'is saate luua varukoopiaid ja tegelikult kÔike. See on piiramatu potentsiaaliga tööriist.

Rakenduse kood asub aadressil Github.
Ärge unustage selle hoidla kloonimisel alammoodulit lĂ€htestada.

PS: KÔiki neid lÀhenemisviise saab kasutada mis tahes muude utiliitide ja programmeerimiskeeltega. Peaasi, et olemus ei erine.

Allikas: www.habr.com