Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

Pêşîn, teoriyek piçûk. Çi bûye Serlêdana Diwanzdeh-Faktorê?

Bi gotinên hêsan, ev belge ji bo hêsankirina pêşkeftina serîlêdanên SaaS-ê hatî çêkirin, ji hêla agahdarkirina pêşdebir û endezyarên DevOps-ê di derheqê pirsgirêk û pratîkên ku pir caran di pêşkeftina sepanên nûjen de têne peyda kirin dibe alîkar.

Belge ji hêla pêşdebirên platforma Heroku ve hatî çêkirin.

Serlêdana Diwanzdeh-Faktor dikare li ser sepanên ku bi her zimanek bernamesaziyê hatî nivîsandin û bi karanîna her kombînasyona karûbarên piştgiriyê (danûstandin, rêzikên peyaman, kaş, hwd.) têne sepandin.

Bi kurtî li ser faktorên ku ev metodolojî li ser bingehê ye:

  1. Codebase - Yek bingehek kodê ku di kontrolkirina guhertoyê de tê şopandin - gelek verastkirin
  2. Dependencies - Bi eşkere ragihandin û îzolekirina girêdanan
  3. Guhertin - Veavakirinê di dema xebitandinê de hilînin
  4. Xizmetên Piştgiriyê - Karûbarên piştgiriyê wekî çavkaniyên pêvekê bihesibînin
  5. Avakirin, berdan, birevin - Qonaxên kombûn û bicihkirinê bi tundî ji hev veqetînin
  6. Pêvajoyên - Serlêdanê wekî yek an çend pêvajoyên bêdewlet bimeşînin
  7. Port binding - Karûbarên hinardekirinê bi girêdana portê
  8. Paralelîzm - Serîlêdana xwe bi karanîna pêvajoyan pîvandin
  9. Disposability - Bi destpêkirina bilez û girtina paqij re pêbaweriyê zêde bikin
  10. Pêşveçûna sepanê / hevsengiya xebatê - Pêşveçûn, qonax, û hawîrdora hilberîna we bi qasî ku gengaz dibe
  11. Logging - Têketinê wekî çemek bûyeran bibînin
  12. Karên rêveberiyê - Karên rêveberî/rêveberiyê bi karanîna pêvajoyên ad hoc pêk bînin

Hûn dikarin li ser 12 faktoran ji çavkaniyên jêrîn bêtir agahdarî bistînin:

Bicihkirina Blue-Green çi ye?

Rakirina Şîn-Kesk rêbazek radestkirina serîlêdanê ye çêkerî bi awayekî ku muwekîlê dawî tu guhertinan ji aliyê xwe ve nebîne. Bi gotineke din, danîna serîlêdanek bi sifir .

Pîlana klasîk a BG Deploy mîna ya ku di wêneya jêrîn de tê xuyang kirin xuya dike.

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

  • Di destpêkê de 2 pêşkêşkerên laşî yên bi tevahî heman kod, serîlêdan, proje hene, û routerek (balansek) heye.
  • Router di destpêkê de hemî daxwazan rê dide yek ji pêşkêşkeran (kesk).
  • Dema ku hûn hewce ne ku ji nû ve berdin, tevahiya proje li ser serverek din tê nûve kirin (şîn), ya ku niha tu daxwazan naxebite.
  • Piştî ku kod li ser e şîn server bi tevahî nûvekirî ye, ji router re fermanek tê dayîn ku jê biguhezîne kesk li ser şîn server.
  • Naha hemî xerîdar encama koda ku pê re dixebite dibînin ya şîn server.
  • Ji bo demekê, kesk pêşkêşker di doza ku neserkeftî were bicîh kirin de wekî kopiyek hilanînê kar dike şîn server û di rewşek têkçûn û xeletiyan de, router herikîna bikarhêner vedigere kesk server bi guhertoya stabîl a kevn, û koda nû ji bo verastkirin û ceribandinê tê şandin.
  • Û di dawiya pêvajoyê de, ew bi heman rengî tê nûve kirin kesk server. Û piştî nûvekirina wê, router herikîna daxwazê ​​vedigere kesk server.

Ew hemî pir baş xuya dike û di nihêrîna pêşîn de divê ti pirsgirêk bi wê re nebin.
Lê ji ber ku em di cîhana nûjen de dijîn, vebijarka bi guheztina laşî ya ku di pilana klasîk de hatî destnîşan kirin ne li gorî me ye. Agahiyê ji bo niha tomar bikin, em ê paşê vegerin.

Şîreta xerab û baş

Disclaimer: Mînakên jêrîn karûbarên/rêbazên ku ez bikar tînim destnîşan dikin, hûn dikarin bi tevahî alternatîfên bi fonksiyonên wekhev bikar bînin.

Piraniya mînakan dê bi rengekî an rêyek din bi pêşkeftina malperê (ev surprîz e), bi PHP û Docker re têkildar bibin.

Paragrafên jêrîn ravekek pratîkî ya hêsan a karanîna faktoran bi karanîna nimûneyên taybetî peyda dikin; Heke hûn dixwazin li ser vê mijarê bêtir teoriyê bistînin, lînkên li jor bi çavkaniya orîjînal bişopînin.

1. Codebase

FTP û FileZilla bikar bînin da ku pelan li ser serveran yek bi yek bar bikin, kodê ji bilî servera hilberînê li cîhek din hilînin.

Divê proje her gav xwedan bingehek kodek yekane be, ango hemî kod ji yekê tê herin depo. Server (hilberîn, stasyon, test1, test2...) kodê ji şaxên yek depoyek hevpar bikar tînin. Bi vî rengî em bigihîjin hevrêziya kodê.

2. Girêdayîn

Hemî pirtûkxaneyên di peldankan de rasterast li koka projeyê dakêşin. Bi veguheztina koda nû li peldanka bi guhertoya heyî ya pirtûkxaneyê re nûvekirinan bikin. Hemî karûbarên pêdivî rasterast li ser servera mêvandar ku 20 karûbarên din lê dixebitin saz bikin.

Pêdivî ye ku projeyek her gav navnîşek pêwendiyê bi zelalî tê fêm kirin hebe (ji hêla girêdanan ve mebesta min jî jîngehê ye). Pêdivî ye ku hemî girêbest bi eşkereyî bêne diyar kirin û veqetandin.
Werin em wek nimûne bestekarê и Docker.

bestekarê - Rêvebirek pakêtê ku dihêle hûn pirtûkxaneyan di PHP de saz bikin. Composer destûrê dide te ku hûn guhertoyan bi hişkî an jî bi hûrgulî diyar bikin, û wan bi eşkere diyar bikin. Dibe ku 20 projeyên cihêreng li ser serverê hebin û her yek dê xwediyê navnîşek kesane ya pakêt û pirtûkxaneyên ji yên din be.

Docker - amûrek ku destûrê dide te ku hûn jîngeha ku dê serîlêdan tê de bixebitin diyar bikin û veqetînin. Li gorî vê yekê, mîna bi bestekarê, lê bi hûrgulî, em dikarin diyar bikin ka serîlêdan bi çi re dixebite. Guhertoyek taybetî ya PHP-ê hilbijêrin, tenê pakêtên ku ji bo xebitandina projeyê hewce ne saz bikin, bêyî ku tiştek zêde zêde bikin. Û ya herî girîng, bêyî ku destwerdana pakêt û hawîrdora makîneya mêvandar û projeyên din bike. Ango, hemî projeyên li ser serverê ku bi navgîniya Docker ve têne xebitandin dikarin bêkêmasî her komek pakêt û jîngehek bi tevahî cûda bikar bînin.

3. Veavakirin

Veguheztinan wekî domdar rasterast di kodê de hilînin. Ji bo servera testê domdar veqetandî, ji bo hilberînê veqetandî. Operasyona serîlêdanê bi hawîrdorê ve rasterast di mantiqa karsaziya projeyê de bi karanîna heke din ava dike ve girêbide.

Configurations - ev riya yekane ye ku divê bicîhkirina projeyê cûda bibe. Bi îdeal, veavakirin divê di nav guhêrbarên jîngehê (env vars) de werin derbas kirin.

Ango, her çend hûn çend pelên vesazkirinê .config.prod .config.local hilînin û di dema danînê de navên wan biguherînin .config (vehenga sereke ya ku serîlêdan daneyan jê dixwîne) - ev ê ne nêzîkatiyek rast be, ji ber ku di vê rewşê de agahdariya ji veavakirinan dê ji hemî pêşdebirên serîlêdanê re bi gelemperî peyda bibe û daneyên ji servera hilberînê dê werin tawîz kirin. Pêdivî ye ku hemî veavakirin rasterast di pergala bicîhkirinê de (CI/CD) werin hilanîn û ji bo hawîrdorên cihêreng ên bi nirxên cûda yên ku ji bo hawîrdorek taybetî di dema bicîhkirinê de hewce ne têne hilberandin.

4. Xizmetên Partiya Sêyem

Bi jîngehê re bi hişkî ve girêdayî bin, di hin hawîrdoran de ji bo heman karûbaran girêdanên cûda bikar bînin.

Bi rastî, ev xal bi xala di derbarê veavakirinan de bi tundî li hev dikeve, ji ber ku bêyî vê xalê, daneyên mîhengê normal nayê çêkirin û, bi gelemperî, şiyana mîhengkirinê dê nemîne.

Pêdivî ye ku hemî girêdanên karûbarên derveyî, wekî serverên rêzê, databas, karûbarên caching, hem ji bo hawîrdora herêmî û hem jî ji bo hawîrdora sêyemîn / hilberînê yek bin. Bi gotinek din, di her kêliyê de, bi guheztina rêzika pêwendiyê, ez dikarim bêyî ku koda serîlêdanê biguhezînim bangên bingeha # 1 bi bingeha # 2 re biguhezînim. An jî, li pêş çavan, wekî mînakek, dema ku karûbar pîvandin, hûn neçar in ku ji bo serverek cache-ya zêde pêwendiyê bi rengek taybetî diyar bikin.

5. Avakirin, berdan, bicihanîn

Tenê guhertoya paşîn a kodê li ser serverê hebe, bêyî ku şansê vegerandina berdanê hebe. Ne hewce ye ku cîhê dîskê dagirtin. Kesê ku difikire ku ew bi xeletiyek kodê di hilberînê de derxîne bernamenûsek xirab e!

Divê hemû qonaxên bicihkirinê ji hev bên veqetandin.

Derfetek heye ku vegerin. Bi kopiyên kevin ên serîlêdanê (jixwe hatine berhev kirin û ji bo şer amade ne) ku di gihîştina bilez de hatine hilanîn, danûstendinan çêbikin, da ku di bûyera xeletiyan de hûn dikarin guhertoya kevin sererast bikin. Ango bi şertê peldankek heye belavkirin û peldankê vêga, û piştî bicihkirin û komkirina serketî peldanka vêga ji hêla girêdanek sembolîk ve bi serbestberdana nû ya ku di hundurê de ye ve girêdayî ye belavkirin bi navê adetî yên hejmara serbestberdana.

Li vir e ku em bicîhkirina Blue-Green bi bîr tînin, ku dihêle hûn ne tenê di navbera kodê de biguhezînin, lê di heman demê de di navbera hemî çavkaniyan û tewra jî hawîrdoran de bi şiyana ku hûn her tiştî paşde bizivirînin veguhezînin.

6. Pêvajoyên

Daneyên dewleta serîlêdanê rasterast di hundurê serîlêdanê bixwe de hilînin. Di RAM-a serîlêdanê bixwe de danişînan bikar bînin. Bi qasî ku gengaz be parvekirina di navbera karûbarên sêyemîn de bikar bînin. Li ser vê yekê bisekinin ku serîlêdan tenê dikare yek pêvajoyek hebe û destûr nede pîvandinê.

Di derbarê danişînan de, daneyan tenê di cache-ya ku ji hêla karûbarên sêyemîn ve tê kontrol kirin (memcached, redis) hilînin, ji ber vê yekê heke we 20 pêvajoyên serîlêdanê dimeşînin jî, yek ji wan, ku xwe gihandiye cache, dê karibe bi xerîdar re xebata xwe bidomîne. heman rewşa ku bikarhêner di pêvajoyek din de bi serîlêdanê re dixebitî. Bi vê nêzîkbûnê re, derdikeve holê ku hûn çiqas kopiyên karûbarên sêyemîn bikar tînin jî, dê her tişt bi asayî û bêyî pirsgirêkên gihîştina daneyê bixebite.

7. Girêdana Port

Tenê servera malperê divê zanibe ka meriv çawa bi karûbarên sêyemîn re dixebite. An jî çêtir e, karûbarên sêyemîn rasterast di hundurê servera malperê de saz bikin. Mînakî, wekî modulek PHP-ê di Apache de.
Pêdivî ye ku hemî karûbarên we bi gihîştina hin navnîşan û portê (localgost:5432, localhost:3000, nginx:80, php-fpm:9000) ji hev re bigihîjin hev, ango ji nginx ez dikarim hem bigihîjim php-fpm û hem jî postgres, û ji php-fpm bigire heya postgres û nginx û bi rastî ji her karûbarê ez dikarim bigihîjim karûbarek din. Bi vî rengî, zindîbûna karûbarek bi zindîbûna karûbarek din ve nayê girêdan.

8. Paralelîzm

Bi yek pêvajoyê re bixebitin, wekî din çend pêvajo dê nikaribin bi hevûdu re li hev bikin!

Ji bo pîvandinê cîh bihêlin. Docker swarm ji bo vê yekê mezin e.
Docker Swarm amûrek e ku hem di navbera makîneyên cihêreng û hem jî komek konteyneran de li ser heman makîneyê diafirîne û rêve dibe.

Bi karanîna swarm, ez dikarim diyar bikim ka ez ê çend çavkaniyan ji her pêvajoyê re veqetînim û çend pêvajoyên heman karûbarê ku ez ê dest pê bikim, û balansa hundurîn, ku daneyan li ser portek diyarkirî werdigire, dê bixweber wê bi pêvajoyan re bişopîne. Bi vî rengî, gava ku barkirina serverê zêde bûye, ez dikarim pêvajoyan zêde bikim, bi vî rengî barkirina hin pêvajoyan kêm bikim.

9. Veqetandin

Ji bo xebatê bi pêvajo û daneyan re rêzan bikar neynin. Kuştina yek pêvajoyê divê bandorê li tevahiya serîlêdanê bike. Ger yek xizmet biçe, her tişt têk diçe.

Her pêvajo û karûbar dikare di her kêliyê de were girtin û divê ev bandorê li ser karûbarên din neke (bê guman, ev nayê vê wateyê ku dê karûbar ji bo karûbarek din tune be, lê ew ê piştî vê yekê karûbarek din neyê qut kirin). Pêdivî ye ku hemî pêvajo bi dilşewatî bêne bidawî kirin, da ku gava ku ew bi dawî bibin, ti dane zirarê nebîne û gava ku hûn wê vekin pergal dê rast bixebite. Ango, tewra di bûyerek bidawîbûna acîl de jî, pêdivî ye ku dane zirar nebin (mekanîzmaya danûstendinê li vir guncan e, lêpirsînên di databasê de tenê di koman de dixebitin, û heke bi kêmî ve pirsek ji komê têk neçe an bi ankek were darve kirin. xeletî, wê hingê tu pirsek din ji komê di dawiyê de di rastiyê de têk naçe).

10. Pêşveçûna sepanê / hevsengiya xebatê

Pêdivî ye ku hilberandin, cîhan û guhertoya herêmî ya serîlêdanê cûda be. Di hilberînê de em çarçoveya Yii Lite, û herêmî Yii bikar tînin, da ku ew di hilberînê de zûtir bixebite!

Di rastiyê de, hemî verastkirin û xebata bi kodê re divê hema hema di hawîrdorek wekhev de bin (em ne li ser hardware fîzîkî diaxivin). Di heman demê de, her karmendek pêşkeftinê pêdivî ye ku ger hewce bike kodê li hilberînê bi cih bike, û ne hin dezgehên devops ên bi taybetî perwerdekirî, ku tenê bi saya hêza taybetî dikare serîlêdanê hilkişîne nav hilberînê.

Docker jî bi vê yekê alîkariya me dike. Ger hemî xalên berê bêne dîtin, karanîna docker dê pêvajoya bicîhkirina jîngehê hem li ser hilberînê û hem jî li ser makîneya herêmî bigihîne yek an du fermanan.

11. Têketin

Em têketinên pelan û databasan dinivîsin! Em pel û databasan ji têketin paqij nakin. Werin em tenê dîskek bi 9000 Peta byte bikirin û ew baş e.

Divê hemî têketin wekî herikîna bûyeran bêne hesibandin. Pêdivî ye ku serîlêdan bixwe tev li tomarkirina tomaran nebe. Pêdivî ye ku têketin an ji stdout re bêne derxistin an jî bi protokolek wekî udp ve werin şandin, da ku xebata bi têketin ji bo serîlêdanê ti pirsgirêk dernekeve. graylog ji bo vê yekê baş e. Graylog ku hemî têketin bi udp-ê distîne (ev protokol ne hewce ye ku li benda bersivek di derbarê wergirtina serketî ya pakêtê de be) bi tu awayî destwerdanê li serîlêdanê nake û tenê bi avahîsazkirin û pêvajoyek têketin re mijûl dibe. Mantiqa serîlêdanê nayê guhertin ku bi nêzîkatiyên weha re bixebite.

12. Karên rêveberiyê

Ji bo nûvekirina daneyan, databasan, hwd., di API-ê de xalek dawîn a ku ji hev veqetandî hatî afirandin bikar bînin, pêkanîna wê 2 caran li pey hev dê bibe sedema ku her tişt dubare bibe. Lê hûn ne ehmeq in, hûn ê du caran klîk nekin, û em ne hewceyî koçberiyê ne.

Pêdivî ye ku hemî karên rêveberiyê di heman hawîrdorê de wekî hemî kodê, di asta berdanê de bêne kirin. Ango, ger hewce be ku em avahiya databasê biguhezînin, wê hingê em ê bi guheztina navên stûnan û lê zêdekirina yên nû bi navgîniya hin amûrên rêveberiya databasa dîtbar ve wiya bi destan nekin. Ji bo tiştên weha, em skrîptên cihê diafirînin - koçberî, ku li her deverê û li hemî hawîrdoran bi heman rengî bi encamek hevpar û têgihîştî têne darve kirin. Ji bo hemî karên din, wek dagirtina projeyê bi daneyan, divê metodolojiyên wekhev werin bikar anîn.

Nimûne pêkanîna di PHP, Laravel, Laradock, Docker-Compose

P.S Hemî mînak li ser MacOS-ê hatine çêkirin. Piraniya wan ji bo Linux-ê jî minasib in. Bikarhênerên Windows, min biborînin, lê ez demek dirêj bi Windows-ê re nexebitim.

Ka em rewşek bifikirin ku me tu guhertoyek PHP-ê li ser PC-ya me sazkirî tune û qet tiştek tune.
Guhertoyên herî dawî yên docker û docker-compose saz bikin. (ev dikare li ser Înternetê were dîtin)

docker -v && 
docker-compose -v

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

1. danîn Laradock

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

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

Di derbarê Laradock de, ez ê bibêjim ku ew tiştek pir xweş e, ku tê de gelek konteynir û tiştên alîkar hene. Lê ez ê ji ber zêdebûna wê bêyî guheztinên di hilberînê de Laradock wekî wusa bikar neyînim. Çêtir e ku hûn li ser bingeha nimûneyên li Laradock konteynerên xwe biafirînin, ev ê pir xweştir be, ji ber ku kes ne hewce ye ku her tiştê ku di heman demê de li wir heye.

2. Laradock mîheng bikin ku serlêdana me bimeşîne.

cd laradock && 
cp env-example .env

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

2.1. Peldanka habrê (peldanka dêûbavê ku laradock tê de tê klon kirin) di hin edîtoran de vekin. (Di doza min a PHPStormê de)

Di vê qonaxê de em tenê navekî didin projeyê.

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

2.2. Wêneyê cîhê xebatê dest pê bikin. (Di doza we de, çêkirina wêneyan dê hin dem bigire)
Workspace wêneyek taybetî ye ku ji bo xebatê bi çarçoweyê re li ser navê pêşdebiran hatî amadekirin.

Em diçin hundurê konteynerê bikar tînin

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

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

2.3. Sazkirina Laravel

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

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

2.4. Piştî sazkirinê, em kontrol dikin ka pelrêça bi projeyê re hatî çêkirin an na û berhevokê dikujin.

ls
exit
docker-compose down

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

2.5. Ka em vegerin ser PHPStorm û di pelê .env de riya rast ji serîlêdana xweya laravel re destnîşan bikin.

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

3. Hemî kodê li Git zêde bikin.

Ji bo vê yekê, em ê li ser Github (an cîhek din) depoyek biafirînin. Ka em biçin pelrêça habrê ya di termînalê de û koda jêrîn bicîh bikin.

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

Ka em kontrol bikin ka her tişt di rê de ye.

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

Ji bo rehetiyê, ez pêşniyar dikim ku hin pêwendiya dîtbarî ji bo Git bikar bînin, di doza min de ew e GitKraken. (li vir girêdanek referansê ye)

4. Werin em dest pê bikin!

Berî ku dest pê bikin, pê ewle bine ku tiştek li ser portên 80 û 443-ê ve girêdayî ye.

docker-compose up -d nginx php-fpm

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

Bi vî awayî, projeya me ji 3 xizmetên cuda pêk tê:

  • nginx - servera malperê
  • php-fpm - php ji bo wergirtina daxwazan ji serverek malperê
  • qada xebatê - php ji bo pêşdebiran

Heya nuha, me gihîştiye ku me serîlêdanek çêkiriye ku ji 4 xalan 12 xalan pêk tîne, ew jî:

1. Codebase - Hemî kod di yek depoyê de ye (têbînî piçûk: dibe ku rast be ku meriv docker di hundurê projeya laravel de zêde bike, lê ev ne girîng e).

2. Dependencies - Hemî girêdanên me bi eşkere di serlêdan/composer.json û di her Dockerfile ya her konteynerê de têne nivîsandin.

3. Xizmetên Piştgiriyê - Her karûbar (php-fom, nignx, cîhê xebatê) jiyana xwe bi xwe dijî û ji derve ve girêdayî ye û dema ku bi karûbarek re bixebite, ya din dê bandor nebe.

4. Pêvajoyên - Her karûbar yek pêvajoyek e. Her yek ji karûbar rewşa navxweyî naparêze.

5. Port binding

docker ps

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

Wekî ku em dibînin, her karûbar li ser porta xwe dixebite û ji hemî karûbarên din re tê gihîştin.

6. Paralelîzm

Docker destûrê dide me ku em gelek pêvajoyên heman karûbaran bi hevsengiya barkirina otomatîkî di navbera wan de bişopînin.

Werin em konteyniran rawestînin û di nav alê re derbas bikin -- pîvan

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

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

Wekî ku em dibînin, kopiyên konteynera php-fpm hatine afirandin. Di xebata bi vê konteynerê de ne hewce ye ku em tiştek biguhezînin. Di heman demê de em gihîştina wê li porta 9000-ê jî berdewam dikin, û Docker ji bo me barkirina di navbera konteyneran de rêve dike.

7. Disposability - Her konteynir bêyî ku zirarê bide yê din dikare were kuştin. Rawestandin an ji nû ve destpêkirina konteynerê dê bandorê li xebata sepanê di dema destpêkirina paşîn de neke. Her konteynir jî di her kêliyê de dikare were rakirin.

8. Pêşveçûna sepanê / hevsengiya xebatê - Hemî derdorên me yek in. Bi xebitandina pergalê li ser serverek di hilberînê de, hûn neçar in ku di emrên xwe de tiştek biguhezînin. Dê her tişt bi heman rengî li ser Docker-ê be.

9. Logging - Hemî têketin di van konteyneran de diçin diherikin û di konsolê Docker de têne xuyang kirin. (di vê rewşê de, bi rastî, bi konteynerên din ên xwemalî re, dibe ku ev ne wusa be heke hûn lênihêrin)

 docker-compose logs -f

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

Lê vegirtinek heye ku nirxên Default di PHP û Nginx de jî têketinek li pelek dinivîsin. Ji bo pêkanîna 12 faktoran, pêdivî ye asteng kirin nivîsandina têketinên pelê di veavakirina her konteynerê de ji hev cuda.

Docker di heman demê de şiyana şandina têketin ne tenê ji stdout, lê di heman demê de ji tiştên wekî graylog re jî peyda dike, ku min li jor behs kir. Û di hundurê graylogê de, em dikarin têketinên ku ji kerema xwe dixwazin bixebitin û serlêdana me dê bi tu awayî vê yekê ferq neke.

10. Karên rêveberiyê - Hemî karên rêveberiyê ji hêla laravel ve bi saya amûra hunerî tam wekî ku afirînerên serîlêdana faktora 12 dixwazin têne çareser kirin.

Wek mînak, ez ê nîşan bidim ka hin ferman çawa têne darve kirin.
Em diçin nav konteynerê.

 
docker-compose exec workspace bash
php artisan list

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

Niha em dikarin her fermanê bikar bînin. (ji kerema xwe bala xwe bidin ku me databas û cache mîheng nekiriye, ji ber vê yekê nîvê fermanan dê rast neyên înfaz kirin, ji ber ku ew hatine sêwirandin ku bi cache û databasê re bixebitin).

Pêşveçûna serîlêdanê û bicihkirina Şîn-Kesk, li ser bingeha metodolojiya Serlêdana Diwanzdeh-Factor bi mînakan di php û docker de

11. Configurations û 12. Avakirin, berdan, birevin

Min xwest ez vê beşê veqetînim Dabeşkirina Blue-Green, lê ew ji bo vê gotarê pir berfireh derket. Ez ê li ser vê gotarek cuda binivîsim.

Bi kurtasî, têgeh li ser pergalên CI / CD-yê yên mîna Jenkins и Gitlab CI. Di her duyan de, hûn dikarin guhêrbarên jîngehê yên ku bi hawîrdorek taybetî re têkildar in saz bikin. Li gorî vê yekê, di vê rewşê de xala c wê were cih Veavakirin.

Û xala li ser Avakirin, berdan, birevin ji hêla fonksiyonên çêkirî yên bi navê ve têne çareser kirin Pipeline.

Pipeline destûrê dide te ku hûn pêvajoya bicîhkirinê li gelek qonaxan dabeş bikin, qonaxên kombûn, berdan û darvekirinê ronî bikin. Di heman demê de di Pipeline de, hûn dikarin paşgiran, û bi rastî jî her tiştî biafirînin. Ev amûrek bi potansiyela bêsînor e.

Koda serîlêdanê li ser e Github.
Dema klonkirina vê depoyê ji bîr nekin ku binemodulê dest pê bikin.

P.S.: Hemî van nêzîkatî dikarin bi her karûbar û zimanên bernamesaziyê yên din re werin bikar anîn. Ya sereke ev e ku cewher ne cûda ye.

Source: www.habr.com

Add a comment