Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

Ua ntej, me ntsis kev xav. Muaj dab tsi tshwm sim Kaum ob-Factor App?

Hauv cov lus yooj yim, daim ntawv no yog tsim los ua kom yooj yim rau kev txhim kho SaaS daim ntawv thov, pab los ntawm kev qhia rau cov neeg tsim khoom thiab DevOps engineers txog cov teeb meem thiab kev coj ua uas feem ntau ntsib hauv kev tsim cov ntawv thov niaj hnub no.

Cov ntaub ntawv tau tsim los ntawm cov neeg tsim khoom ntawm Heroku platform.

Qhov Twelve-Factor App tuaj yeem siv rau cov ntawv thov sau ua lus programming thiab siv cov kev pabcuam thaub qab (databases, message queues, caches, etc.).

Luv luv txog cov yam ntxwv ntawm qhov txheej txheem no yog raws li:

  1. Codebase - Ib qho codebase taug qab hauv kev tswj hwm version - ntau qhov kev xa tawm
  2. Kev vam meej - Tshaj tawm meej meej thiab cais cov kev vam meej
  3. Configuration - Txuag configuration hauv runtime
  4. Kev Pabcuam Rov Qab - Xav txog cov kev pabcuam thaub qab raws li cov khoom siv ntsaws
  5. Tsim, tso, khiav - nruj nreem cais cov kev sib dhos thiab ua tiav theem
  6. Cov txheej txheem - Khiav daim ntawv thov ua ib lossis ntau qhov txheej txheem tsis muaj neeg nyob
  7. Chaw nres nkoj khi - Export cov kev pab cuam ntawm chaw nres nkoj khi
  8. Parallelism - Ntsuas koj daim ntawv thov siv cov txheej txheem
  9. Kev tsis taus - Ua kom muaj kev ntseeg siab tshaj plaws nrog kev pib sai thiab kev kaw kom huv
  10. Kev txhim kho kev siv / kev ua haujlwm sib luag - Khaws koj txoj kev loj hlob, kev ua haujlwm, thiab kev tsim khoom ib puag ncig zoo ib yam li qhov ua tau
  11. Kev sau npe - Saib lub cav raws li cov kwj ntawm cov xwm txheej
  12. Cov hauj lwm tswj - Ua haujlwm tswj hwm / tswj kev siv cov txheej txheem ad hoc

Koj tuaj yeem tau txais cov ntaub ntawv ntau ntxiv txog 12 yam ntawm cov peev txheej hauv qab no:

Blue-Green deployment yog dab tsi?

Blue-Green deployment yog ib txoj hauv kev xa daim ntawv thov mus rau ntau lawm nyob rau hauv xws li ib txoj kev uas tus neeg siv kawg tsis pom kev hloov pauv ntawm nws feem. Hauv lwm lo lus, xa ib daim ntawv thov nrog xoom downtime.

Classic BG Deploy scheme zoo li qhov pom hauv daim duab hauv qab no.

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

  • Thaum pib muaj 2 lub cev servers nrog tib cov lej, daim ntawv thov, qhov project, thiab muaj router (balancer).
  • Lub router pib coj txhua qhov kev thov mus rau ib qho ntawm cov servers (ntsuab).
  • Thaum lub sijhawm koj xav tau tso tawm dua, tag nrho qhov project tau hloov kho rau lwm tus neeg rau zaub mov (xiav), uas tam sim no tsis ua cov kev thov.
  • Tom qab lub code yog nyob rau xiav server tau hloov kho tag nrho, lub router tau muab cov lus txib kom hloov los ntawm ntsuab rau xiav server.
  • Tam sim no txhua tus neeg siv pom qhov tshwm sim ntawm tus lej khiav nrog xiav server.
  • Rau qee lub sijhawm, ntsuab tus neeg rau zaub mov ua hauj lwm raws li ib tug backup daim ntawv nyob rau hauv cov ntaub ntawv ntawm unsuccessful xa mus rau xiav server thiab nyob rau hauv cov ntaub ntawv ntawm tsis ua hauj lwm thiab kab, lub router hloov cov neeg siv ntws rov qab mus rau ntsuab server nrog cov qub ruaj khov version, thiab cov cai tshiab raug xa mus rau kev kho dua tshiab thiab kev sim.
  • Thiab thaum kawg ntawm tus txheej txheem, nws yog hloov kho nyob rau hauv tib txoj kev ntsuab server. Thiab tom qab hloov kho nws, lub router hloov qhov kev thov ntws rov qab mus rau ntsuab server.

Nws zoo nkaus li zoo heev thiab thaum xub thawj siab ib muag yuav tsum tsis txhob muaj teeb meem nrog nws.
Tab sis txij li thaum peb nyob hauv lub ntiaj teb niaj hnub no, qhov kev xaiv nrog lub cev hloov pauv raws li qhia hauv cov txheej txheem classical tsis haum rau peb. Sau cov ntaub ntawv tam sim no, peb yuav rov qab mus rau nws tom qab.

Cov lus qhia phem thiab zoo

Disclaimer: Cov piv txwv hauv qab no qhia txog cov khoom siv hluav taws xob / txheej txheem uas kuv siv, koj tuaj yeem siv txhua yam kev xaiv nrog cov haujlwm zoo sib xws.

Feem ntau ntawm cov piv txwv yuav nyob rau hauv ib txoj kev lossis lwm qhov cuam tshuam nrog kev txhim kho lub vev xaib (qhov no yog qhov xav tsis thoob), nrog PHP thiab Docker.

Cov kab lus hauv qab no muab cov lus piav qhia yooj yim ntawm kev siv cov yam ntxwv uas siv cov piv txwv tshwj xeeb; yog tias koj xav tau ntau txoj kev xav ntawm lub ncauj lus no, ua raws li cov kev txuas saum toj no mus rau qhov qub.

1. Codebase

Siv FTP thiab FileZilla txhawm rau xa cov ntaub ntawv mus rau cov servers ib zaug, tsis txhob khaws cov cai nyob txhua qhov chaw uas tsis yog ntawm cov khoom siv ntau lawm.

Qhov project yuav tsum yeej ib txwm muaj ib tug code puag, uas yog, tag nrho cov code los ntawm ib tug Cia li mus chaw khaws cia. Servers (ntau lawm, staging, test1, test2...) siv code los ntawm ceg ntawm ib qho chaw repository. Txoj kev no peb ua tiav txoj cai sib xws.

2. Kev vam meej

Download tau tag nrho cov tsev qiv ntawv hauv folders ncaj qha mus rau hauv paus ntawm qhov project. Ua qhov hloov tshiab yooj yim los ntawm kev hloov cov lej tshiab rau hauv daim nplaub tshev nrog cov ntawv tam sim no ntawm lub tsev qiv ntawv. Nruab tag nrho cov khoom siv hluav taws xob tsim nyog ncaj qha rau ntawm tus tswv server qhov twg 20 qhov kev pabcuam ntxiv tau ua haujlwm.

Ib qhov project yuav tsum nco ntsoov muaj cov npe kom nkag siab meej ntawm kev vam meej (los ntawm kev vam khom kuv kuj txhais tau tias ib puag ncig). Txhua qhov kev vam khom yuav tsum tau hais meej meej thiab cais tawm.
Cia peb ua piv txwv Composer ΠΈ docker.

Composer - tus thawj tswj pob uas tso cai rau koj los nruab cov tsev qiv ntawv hauv PHP. Composer tso cai rau koj los qhia meej versions nruj me ntsis los yog xoob, thiab qhia meej meej lawv. Nws tuaj yeem muaj 20 qhov haujlwm sib txawv ntawm tus neeg rau zaub mov thiab txhua tus yuav muaj cov npe ntawm cov pob khoom thiab cov tsev qiv ntawv ywj pheej ntawm lwm tus.

docker - Cov khoom siv hluav taws xob uas tso cai rau koj los txhais thiab cais ib puag ncig uas daim ntawv thov yuav khiav. Raws li, ib yam li nrog composer, tab sis ntau dua, peb tuaj yeem txiav txim siab seb daim ntawv thov ua haujlwm nrog. Xaiv ib qho tshwj xeeb version ntawm PHP, nruab tsuas yog cov pob khoom tsim nyog rau txoj haujlwm ua haujlwm, tsis tas yuav ntxiv dab tsi ntxiv. Thiab qhov tseem ceeb tshaj plaws, tsis muaj kev cuam tshuam nrog cov pob khoom thiab ib puag ncig ntawm tus tswv tshuab thiab lwm yam haujlwm. Ntawd yog, txhua qhov haujlwm ntawm lub server uas khiav los ntawm Docker tuaj yeem siv kiag li txhua pob khoom thiab ib puag ncig sib txawv kiag li.

3. Kev teeb tsa

Khaws configs raws li qhov tsis tu ncua ncaj qha hauv cov cai. Cais qhov tsis tu ncua rau cov neeg rau zaub mov xeem, cais rau ntau lawm. Khi txoj haujlwm ntawm daim ntawv thov nyob ntawm ib puag ncig ncaj qha hauv kev lag luam logic ntawm qhov project siv yog tias lwm tus tsim.

Configurations - qhov no yog tib txoj kev uas qhov kev xa tawm yuav tsum sib txawv. Qhov zoo tshaj plaws, kev teeb tsa yuav tsum dhau los ntawm ib puag ncig hloov pauv (env vars).

Ntawd yog, txawm tias koj khaws ntau cov ntaub ntawv teeb tsa .config.prod .config.local thiab hloov npe lawv thaum lub sijhawm xa mus rau .config (lub ntsiab config los ntawm daim ntawv thov nyeem cov ntaub ntawv) - qhov no yuav tsis yog txoj hauv kev, txij li thaum Hauv qhov no, cov ntaub ntawv los ntawm kev teeb tsa yuav raug nthuav tawm rau txhua tus neeg tsim khoom siv thiab cov ntaub ntawv los ntawm cov neeg siv khoom tsim khoom yuav raug cuam tshuam. Txhua qhov kev teeb tsa yuav tsum tau muab khaws cia ncaj qha rau hauv kev xa tawm (CI / CD) thiab tsim rau cov chaw sib txawv nrog cov txiaj ntsig sib txawv uas tsim nyog rau ib puag ncig tshwj xeeb thaum lub sijhawm xa tawm.

4. Kev Pabcuam Thib Peb

Ua nruj me ntsis rau ib puag ncig, siv kev sib txuas sib txawv rau cov kev pabcuam tib yam hauv qee qhov chaw.

Qhov tseeb, qhov taw tes no sib tshooj nrog cov ntsiab lus hais txog kev teeb tsa, txij li tsis muaj qhov taw tes no, cov ntaub ntawv teeb tsa ib txwm tsis tuaj yeem ua thiab, feem ntau, lub peev xwm los teeb tsa yuav poob rau tsis muaj dab tsi.

Tag nrho cov kev sib txuas rau cov kev pabcuam sab nraud, xws li cov neeg ua haujlwm queue, databases, caching cov kev pabcuam, yuav tsum yog tib yam rau ob qho tib si hauv cheeb tsam thiab qhov chaw thib peb / ntau lawm. Hauv lwm lo lus, txhua lub sijhawm, los ntawm kev hloov txoj hlua txuas, Kuv tuaj yeem hloov hu mus rau lub hauv paus # 1 nrog lub hauv paus # 2 yam tsis tau hloov daim ntawv thov code. Los yog, saib ua ntej, ua piv txwv, thaum ntsuas qhov kev pabcuam, koj yuav tsis tas yuav qhia txog kev sib txuas hauv txhua txoj hauv kev tshwj xeeb rau lub cache server ntxiv.

5. Tsim, tso, ua

Muaj tsuas yog qhov kawg version ntawm cov cai ntawm tus neeg rau zaub mov, tsis muaj caij nyoog ntawm dov rov qab tso tawm. Tsis tas yuav sau qhov chaw disk. Tus neeg twg uas xav tias lawv tuaj yeem tso cai rau hauv kev tsim khoom nrog qhov yuam kev yog tus programmer phem!

Txhua theem ntawm kev xa tawm yuav tsum tau sib cais los ntawm ib leeg.

Muaj sij hawm tig rov qab. Ua cov ntawv tshaj tawm nrog cov ntawv qub ntawm daim ntawv thov (tam sim tau sib sau ua ke thiab npaj rau kev sib ntaus sib tua) khaws cia hauv kev nkag tau sai, yog li ntawd thaum muaj kev ua yuam kev koj tuaj yeem rov qab kho cov qub version. Ntawd yog, conditionally muaj ib daim nplaub tshev Tshaj tawm thiab folder tam sim no, thiab tom qab ua tiav kev xa tawm thiab sib dhos cov ntawv tais ceev tseg tam sim no txuas los ntawm cov cim txuas rau qhov kev tso tawm tshiab uas nyob hauv Tshaj tawm nrog rau cov pa npe ntawm tus naj npawb tso tawm.

Qhov no yog qhov uas peb nco ntsoov Blue-Green deployment, uas tso cai rau koj tsis tsuas yog hloov ntawm cov cai, tab sis kuj hloov ntawm tag nrho cov peev txheej thiab txawm ib puag ncig nrog lub peev xwm rov qab txhua yam.

6. Cov txheej txheem

Khaws daim ntawv thov lub xeev cov ntaub ntawv ncaj qha hauv daim ntawv thov nws tus kheej. Siv cov ntu hauv RAM ntawm daim ntawv thov nws tus kheej. Siv ntau qhov sib koom ntawm cov kev pabcuam thib peb raws li qhov ua tau. Cia siab rau qhov tseeb tias daim ntawv thov tsuas muaj ib txoj kev thiab tsis tso cai rau scaling.

Hais txog cov kev sib tham, khaws cov ntaub ntawv tsuas yog hauv lub cache tswj los ntawm cov kev pabcuam thib peb (memcached, redis), yog li txawm tias koj muaj 20 daim ntawv thov txheej txheem khiav, ib qho ntawm lawv, tau nkag mus rau lub cache, yuav tuaj yeem txuas ntxiv ua haujlwm nrog tus neeg siv khoom hauv tib lub xeev uas tus neeg siv tau ua haujlwm nrog daim ntawv thov hauv lwm tus txheej txheem. Nrog rau txoj hauv kev no, nws hloov tawm tias txawm tias muaj pes tsawg daim ntawv luam ntawm cov kev pabcuam thib peb uas koj siv, txhua yam yuav ua haujlwm ib txwm thiab tsis muaj teeb meem nrog kev nkag mus rau cov ntaub ntawv.

7. Chaw nres nkoj khi

Tsuas yog lub vev xaib server yuav tsum paub ua haujlwm nrog cov kev pabcuam thib peb. Los yog zoo dua tsis tau, nruab cov kev pabcuam thib peb ncaj qha hauv lub vev xaib server. Piv txwv li, raws li PHP module hauv Apache.
Tag nrho koj cov kev pabcuam yuav tsum nkag mus rau ib leeg los ntawm kev nkag mus rau qee qhov chaw nyob thiab chaw nres nkoj (localgost: 5432, localhost: 3000, nginx: 80, php-fpm: 9000), uas yog, los ntawm nginx Kuv tuaj yeem nkag mus rau php-fpm thiab mus rau postgres, thiab los ntawm php-fpm mus rau postgres thiab nginx thiab ua tau los ntawm txhua qhov kev pabcuam kuv tuaj yeem nkag mus rau lwm qhov kev pabcuam. Txoj kev no, qhov muaj txiaj ntsig ntawm kev pabcuam tsis raug khi rau qhov muaj txiaj ntsig ntawm lwm qhov kev pabcuam.

8. Parallelism

Ua haujlwm nrog ib tus txheej txheem, txwv tsis pub ntau cov txheej txheem yuav tsis tuaj yeem sib koom ua ke!

Tawm hauv chav rau scaling. Docker swarm yog qhov zoo rau qhov no.
Docker Swarm yog ib qho cuab yeej tsim thiab tswj cov pawg ntawm cov ntim ob qho tib si ntawm cov tshuab sib txawv thiab ib pawg ntawm cov ntim ntawm tib lub tshuab.

Siv swarm, Kuv tuaj yeem txiav txim siab seb muaj pes tsawg qhov peev txheej kuv yuav faib rau txhua tus txheej txheem thiab muaj pes tsawg txheej txheem ntawm tib qhov kev pabcuam kuv yuav tso tawm, thiab cov khoom sib npaug sab hauv, tau txais cov ntaub ntawv ntawm qhov chaw nres nkoj muab, yuav cia li tso npe rau cov txheej txheem. Yog li, pom tias cov khoom thauj ntawm cov neeg rau zaub mov tau nce, Kuv tuaj yeem ntxiv cov txheej txheem ntxiv, yog li txo cov load ntawm qee cov txheej txheem.

9. Kev pov tseg

Tsis txhob siv cov kab ke ua haujlwm nrog cov txheej txheem thiab cov ntaub ntawv. Kev tua ib tus txheej txheem yuav tsum cuam tshuam rau tag nrho daim ntawv thov. Yog tias ib qho kev pabcuam poob qis, txhua yam poob qis.

Txhua tus txheej txheem thiab kev pabcuam tuaj yeem raug kaw txhua lub sijhawm thiab qhov no yuav tsum tsis txhob cuam tshuam rau lwm cov kev pabcuam (qhov no tsis txhais tau tias qhov kev pabcuam yuav tsis muaj rau lwm qhov kev pabcuam, tabsis lwm qhov kev pabcuam yuav tsis tua tomqab qhov no). Tag nrho cov txheej txheem yuav tsum raug txiav tawm kom zoo, yog li thaum lawv raug txiav tawm, tsis muaj cov ntaub ntawv yuav raug puas tsuaj thiab lub kaw lus yuav ua haujlwm kom raug rau lwm zaus koj qhib nws. Ntawd yog, txawm tias thaum muaj xwm txheej ceev, cov ntaub ntawv yuav tsum tsis txhob raug puas tsuaj (qhov kev hloov pauv yog tsim nyog ntawm no, cov lus nug hauv cov ntaub ntawv tsuas yog ua haujlwm hauv pab pawg, thiab yog tias tsawg kawg ib qho lus nug los ntawm pab pawg ua tsis tiav lossis raug tua nrog ib qho yuam kev, ces tsis muaj lwm cov lus nug los ntawm pab pawg neeg thaum kawg ua tsis tau qhov tseeb).

10. Daim ntawv thov kev txhim kho / kev ua haujlwm sib luag

Ntau lawm, staging thiab hauv zos version ntawm daim ntawv thov yuav tsum sib txawv. Hauv kev tsim khoom peb siv Yii Lite lub moj khaum, thiab hauv zos Yii, kom nws ua haujlwm sai dua hauv kev tsim khoom!

Hauv kev muaj tiag, txhua qhov kev xa tawm thiab ua haujlwm nrog cov lej yuav tsum nyob hauv ib puag ncig zoo ib yam (peb tsis tau tham txog lub cev kho vajtse). Tsis tas li ntawd, txhua tus neeg ua haujlwm txhim kho yuav tsum tuaj yeem xa cov cai rau kev tsim khoom yog tias tsim nyog, thiab tsis yog qee qhov tshwj xeeb kev cob qhia devops department, uas tsuas yog ua tsaug rau lub zog tshwj xeeb tuaj yeem nqa daim ntawv thov rau hauv kev tsim khoom.

Docker kuj pab peb nrog qhov no. Yog tias tag nrho cov ntsiab lus dhau los tau pom, siv docker yuav coj cov txheej txheem ntawm kev xa tawm ib puag ncig ntawm kev tsim khoom thiab ntawm lub tshuab hauv zos kom nkag mus rau ib lossis ob qho lus txib.

11. Cov ntaub ntawv

Peb sau cov cav rau cov ntaub ntawv thiab databases! Peb tsis ntxuav cov ntaub ntawv thiab cov ntaub ntawv los ntawm cov cav. Cia li yuav ib lub hard drive nrog 9000 Peta bytes thiab qhov zoo.

Tag nrho cov cav yuav tsum raug suav hais tias yog cov kwj ntawm cov xwm txheej. Daim ntawv thov nws tus kheej yuav tsum tsis txhob koom nrog hauv kev ua cov cav. Cov cav yuav tsum tau tso tawm los ntawm stdout lossis xa los ntawm cov txheej txheem xws li udp, kom ua haujlwm nrog cov cav tsis tsim teeb meem rau daim ntawv thov. greylog yog qhov zoo rau qhov no. Graylog tau txais tag nrho cov cav ntawm udp (cov txheej txheem no tsis tas yuav tos cov lus teb txog kev txais tos zoo ntawm pob ntawv) tsis cuam tshuam nrog daim ntawv thov txhua txoj kev thiab tsuas yog cuam tshuam nrog kev teeb tsa thiab kev ua cov cav. Daim ntawv thov logic tsis hloov mus ua hauj lwm nrog xws li mus kom ze.

12. Kev tswj xyuas cov haujlwm

Txhawm rau hloov kho cov ntaub ntawv, databases, thiab lwm yam, siv qhov sib cais tsim qhov kawg hauv API, ua tiav 2 zaug ua ke yuav ua rau txhua yam raug duplicated. Tab sis koj tsis ruam, koj yuav tsis nyem ob zaug, thiab peb tsis xav tau kev tsiv teb tsaws chaw.

Txhua txoj haujlwm tswj hwm yuav tsum tau ua nyob rau hauv ib puag ncig ib puag ncig raws li tag nrho cov cai, ntawm qib kev tso tawm. Ntawd yog, yog tias peb xav tau hloov cov qauv ntawm cov ntaub ntawv, ces peb yuav tsis ua nws manually los ntawm kev hloov cov npe ntawm txhua kab thiab ntxiv cov tshiab los ntawm qee qhov kev tswj xyuas cov cuab yeej pom. Rau tej yam zoo li no, peb tsim cov ntawv sib cais - kev tsiv teb tsaws chaw, uas tau ua tiav txhua qhov chaw thiab txhua qhov chaw ib puag ncig zoo ib yam nrog cov txiaj ntsig zoo thiab nkag siab. Rau tag nrho lwm cov dej num, xws li sau qhov project nrog cov ntaub ntawv, yuav tsum siv cov txheej txheem zoo sib xws.

Piv txwv kev siv hauv PHP, Laravel, Laradock, Docker-Compose

PS Tag nrho cov piv txwv tau ua rau ntawm MacOS. Lawv feem ntau kuj tsim nyog rau Linux. Cov neeg siv Windows, zam txim rau kuv, tab sis kuv tsis tau ua haujlwm nrog Windows ntev.

Cia peb xav txog qhov xwm txheej uas peb tsis muaj ib qho version ntawm PHP ntsia ntawm peb lub PC thiab tsis muaj dab tsi hlo li.
Nruab qhov tseeb versions ntawm docker thiab docker-compose. (Qhov no tuaj yeem pom hauv Internet)

docker -v && 
docker-compose -v

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

1. Peb tso Laradock

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

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

Hais txog Laradock, kuv yuav hais tias nws yog ib qho txias heev, uas muaj ntau lub thawv thiab cov khoom pab. Tab sis kuv yuav tsis pom zoo siv Laradock li yam tsis muaj kev hloov kho hauv kev tsim khoom vim nws qhov rov ua dua. Nws yog qhov zoo dua los tsim koj tus kheej ntim raws li cov piv txwv hauv Laradock, qhov no yuav ua kom zoo dua qub, vim tsis muaj leej twg xav tau txhua yam uas nyob ntawd tib lub sijhawm.

2. Configure Laradock khiav peb daim ntawv thov.

cd laradock && 
cp env-example .env

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

2.1. Qhib cov phau ntawv habr (niam txiv nplaub tshev rau hauv uas laradock yog cloned) hauv qee tus editor. (Hauv kuv rooj plaub PHPStorm)

Nyob rau theem no peb tsuas muab lub npe rau qhov project.

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

2.2. Tua tawm lub chaw ua haujlwm duab. (Hauv koj rooj plaub, cov duab yuav siv sij hawm los tsim)
Workspace yog ib daim duab tshwj xeeb uas npaj rau kev ua hauj lwm nrog lub moj khaum sawv cev ntawm tus tsim tawm.

Peb mus rau hauv lub thawv siv

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

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

2.3. Txhim kho Laravel

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

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

2.4. Tom qab kev teeb tsa, peb xyuas seb cov npe nrog qhov project tau raug tsim thiab tua sau.

ls
exit
docker-compose down

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

2.5. Cia peb rov qab mus rau PHPStorm thiab teeb tsa txoj hauv kev kom raug rau peb daim ntawv thov laravel hauv cov ntaub ntawv .env.

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

3. Ntxiv tag nrho cov lej rau Git.

Txhawm rau ua qhov no, peb yuav tsim qhov chaw cia khoom ntawm Github (lossis nyob qhov twg). Cia peb mus rau ntawm cov npe habr hauv lub davhlau ya nyob twg thiab ua raws li cov cai hauv qab no.

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

Cia peb xyuas seb txhua yam yog nyob rau hauv kev txiav txim.

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

Txhawm rau kom yooj yim, kuv pom zoo kom siv qee qhov kev pom pom rau Git, hauv kuv qhov xwm txheej nws yog GitKraken. (Ntawm no yog qhov txuas xa mus)

4. Cia peb pib!

Ua ntej pib, xyuas kom meej tias tsis muaj dab tsi dai ntawm cov chaw nres nkoj 80 thiab 443.

docker-compose up -d nginx php-fpm

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

Yog li, peb qhov project muaj 3 qhov kev pabcuam cais:

  • nginx - web server
  • php-fpm - php kom tau txais kev thov los ntawm lub vev xaib server
  • chaw ua haujlwm - php rau cov neeg tsim khoom

Tam sim no, peb tau ua tiav tias peb tau tsim ib daim ntawv thov uas ua tau raws li 4 lub ntsiab lus ntawm 12, uas yog:

1. Codebase - tag nrho cov cai yog nyob rau hauv ib lub repository (me me: tej zaum yuav muaj tseeb rau ntxiv docker nyob rau hauv lub laravel project, tab sis qhov no tsis tseem ceeb).

2. Kev vam meej - Tag nrho peb qhov kev cia siab tau sau meej meej hauv daim ntawv thov / composer.json thiab hauv txhua Dockerfile ntawm txhua lub thawv.

3. Kev Pabcuam Rov Qab - Txhua qhov kev pabcuam (php-fom, nignx, chaw ua haujlwm) nyob ntawm nws lub neej thiab txuas nrog sab nraud thiab thaum ua haujlwm nrog ib qho kev pabcuam, lwm qhov yuav tsis cuam tshuam.

4. Cov txheej txheem -Txhua qhov kev pabcuam yog ib txheej txheem. Txhua qhov kev pabcuam tsis tswj hwm lub xeev sab hauv.

5. Chaw nres nkoj khi

docker ps

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

Raws li peb tuaj yeem pom, txhua qhov kev pabcuam khiav ntawm nws tus kheej qhov chaw nres nkoj thiab nkag mus rau txhua qhov kev pabcuam.

6. Parallelism

Docker tso cai rau peb nthuav ntau cov txheej txheem ntawm tib cov kev pabcuam nrog tsis siv neeg thauj khoom sib npaug ntawm lawv.

Cia peb nres lub ntim thiab khiav lawv hla tus chij --scale

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

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

Raws li peb tuaj yeem pom, cov ntawv luam tau raug tsim los ntawm lub thawv php-fpm. Peb tsis tas yuav hloov dab tsi hauv kev ua haujlwm nrog lub thawv no. Peb kuj tseem nkag mus rau nws ntawm qhov chaw nres nkoj 9000, thiab Docker tswj kev thauj khoom ntawm cov thawv rau peb.

7. Kev tsis taus -Txhua lub thawv tuaj yeem tua tsis tau ua phem rau lwm tus. Kev nres lossis rov pib lub thawv yuav tsis cuam tshuam rau kev ua haujlwm ntawm daim ntawv thov thaum lub sijhawm xa tawm tom ntej. Txhua lub thawv tuaj yeem nqa tau txhua lub sijhawm.

8. Kev txhim kho kev siv / kev ua haujlwm sib luag - tag nrho peb ib puag ncig yog tib yam. Los ntawm kev khiav lub kaw lus ntawm lub server hauv kev tsim khoom, koj yuav tsis tas yuav hloov dab tsi hauv koj cov lus txib. Txhua yam yuav ua raws li Docker ib yam nkaus.

9. Kev sau npe - tag nrho cov cav hauv cov thawv no mus rau kwj thiab pom hauv Docker console. (qhov no, qhov tseeb, nrog rau lwm cov thawv ntim hauv tsev, qhov no yuav tsis yog qhov teeb meem yog tias koj tsis saib xyuas nws)

 docker-compose logs -f

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

Tab sis muaj ib tug ntes nyob rau hauv hais tias Default qhov tseem ceeb nyob rau hauv PHP thiab Nginx kuj sau cav rau ib cov ntaub ntawv. Yuav kom ua tau raws li 12 yam, nws yog qhov tsim nyog cuam ​​tshuam sau ntawv rau ib cov ntaub ntawv nyob rau hauv configurations ntawm txhua lub thawv cais.

Docker kuj muab lub peev xwm xa cov cav tsis yog rau stdout xwb, tab sis kuj rau tej yam xws li greylog, uas kuv tau hais saum toj no. Thiab hauv greylog, peb tuaj yeem khiav cov cav raws li peb thov thiab peb daim ntawv thov yuav tsis pom qhov no nyob rau hauv ib txoj kev.

10. Cov hauj lwm tswj - Txhua txoj haujlwm tswj hwm tau daws los ntawm laravel ua tsaug rau cov cuab yeej cuab tam raws nraim li cov neeg tsim ntawm 12 yam thov xav tau.

Ua piv txwv, kuv yuav qhia tias qee cov lus txib raug ua li cas.
Peb mus rau hauv lub thawv.

 
docker-compose exec workspace bash
php artisan list

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

Tam sim no peb tuaj yeem siv cov lus txib. (thov nco ntsoov tias peb tsis tau teeb tsa lub database thiab cache, yog li ib nrab ntawm cov lus txib yuav tsis raug ua kom raug, vim tias lawv tau tsim los ua haujlwm nrog lub cache thiab database).

Kev txhim kho daim ntawv thov thiab Blue-Green xa mus, raws li Twelve-Factor App methodology nrog piv txwv hauv php thiab docker

11. Configurations thiab 12. Tsim, tso, khiav

Kuv xav muab ntu no rau Blue-Green Deployment, tab sis nws tau dhau los ua ntau dhau rau tsab xov xwm no. Kuv yuav sau ib tsab xov xwm cais txog qhov no.

Hauv kev txiav txim siab, lub tswv yim yog raws li CI / CD systems zoo li Jenkins ΠΈ Gitlab CI. Hauv ob qho tib si, koj tuaj yeem teeb tsa ib puag ncig hloov pauv cuam tshuam nrog ib puag ncig tshwj xeeb. Yog li, hauv qhov xwm txheej no, point c yuav ua tiav Configurations.

Thiab qhov point hais txog Tsim, tso, khiav yog daws los ntawm built-in functions nrog lub npe Pipeline.

Pipeline tso cai rau koj faib cov txheej txheem xa mus rau ntau theem, qhia txog theem ntawm kev sib dhos, tso tawm thiab ua tiav. Tsis tas li hauv Pipeline, koj tuaj yeem tsim cov thaub qab, thiab qhov tseeb txhua yam. Qhov no yog ib qho cuab yeej uas muaj peev xwm tsis muaj kev txwv.

Daim ntawv thov code yog ntawm github.
Tsis txhob hnov ​​qab pib lub submodule thaum cloning no repository.

PS: Txhua txoj hauv kev no tuaj yeem siv nrog lwm yam kev siv hluav taws xob thiab cov lus programming. Qhov tseem ceeb yog qhov essence tsis txawv.

Tau qhov twg los: www.hab.com

Ntxiv ib saib