Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

Éischt, eng kleng Theorie. Wat ass geschitt D'Twelve-Factor App?

An einfache Wierder, dëst Dokument ass entwéckelt fir d'Entwécklung vu SaaS Uwendungen ze vereinfachen, andeems d'Entwéckler an DevOps Ingenieuren iwwer d'Problemer a Praktiken informéiert ginn, déi am meeschten an der Entwécklung vu modernen Uwendungen begéint sinn.

D'Dokument gouf vun den Entwéckler vun der Heroku Plattform erstallt.

D'Twelve-Factor App kann op Uwendungen applizéiert ginn, déi an all Programméierungssprooch geschriwwe sinn an all Kombinatioun vu Backing-Servicer benotzen (Datebanken, Messageschlaangen, Cache, etc.).

Kuerz iwwer d'Faktoren op deenen dës Methodologie baséiert:

  1. Codebase - Eng Codebase verfollegt a Versiounskontroll - Multiple Deployment
  2. Ofhängegkeeten - Ofhängegkeeten explizit deklaréieren an isoléieren
  3. Configuratioun - Späichert d'Konfiguratioun an der Runtime
  4. Backing Services - Betruecht Backing Servicer als Plug-in Ressourcen
  5. Bauen, befreien, lafen - Trennt d'Versammlung an d'Ausféierungsstadien streng
  6. D'Prozesser - Run d'Applikatioun als een oder méi stateless Prozesser
  7. Port verbindlech - Export Servicer iwwer port verbindlech
  8. Konklusioun - Skaléiert Är Uwendung mat Prozesser
  9. Disposéierbarkeet - Maximaliséiert Zouverlässegkeet mat schnelle Startup a propperem Shutdown
  10. Applikatioun Entwécklung / Operatioun Paritéit - Halt Är Entwécklung, Inszenéierung a Produktiounsëmfeld sou ähnlech wéi méiglech
  11. Logged - Kuckt de Log als Stream vun Eventer
  12. Administratioun Aufgaben - Maacht Administratioun / Gestioun Aufgaben mat ad hoc Prozesser

Dir kënnt méi Informatioun iwwer déi 12 Faktoren aus de folgende Ressourcen kréien:

Wat ass Blue-Green Deployment?

Blue-Green Deployment ass eng Method fir eng Applikatioun ze liwweren Produktioun esou datt den Endklient keng Ännerunge vu senger Säit gesäit. An anere Wierder, eng Applikatioun mat Null ofsetzen offline ass.

De klassesche BG Deploy Schema gesäit aus wéi deen am Bild hei ënnen gewisen.

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

  • Um Ufank ginn et 2 kierperlech Serveren mat absolut dee selwechte Code, Applikatioun, Projet, an et gëtt e Router (Balancer).
  • De Router riicht am Ufank all Ufro un ee vun de Serveren (gréng).
  • Am Moment wou Dir nach eng Kéier fräiloosse musst, gëtt de ganze Projet op engem anere Server aktualiséiert (blo), déi momentan keng Ufroe behandelt.
  • Nodeems de Code op ass blo Server komplett aktualiséiert gëtt, kritt de Router e Kommando fir ze wiesselen gréng op blo Server.
  • Elo gesinn all Clienten d'Resultat vum Code lafen mat blo Server.
  • Fir eng Zäit, gréng de Server déngt als Backupsatellit am Fall vun Mëssgléckt Détachement ze blo Server an am Fall vu Feeler a Käfere schalt de Router de Benotzerfloss zréck op gréng Server mat der aler stabiler Versioun, an den neie Code gëtt fir Revisioun an Tester geschéckt.
  • An um Enn vum Prozess gëtt et op déiselwecht Manéier aktualiséiert gréng Server. An no der Aktualiséierung wiesselt de Router den Ufroflow zréck op gréng Server.

Et gesäit alles ganz gutt aus an op den éischte Bléck soll et keng Problemer mat et ginn.
Awer well mir an der moderner Welt liewen, passt d'Optioun mam kierperleche Wiessel wéi am klassesche Schema uginn net eis. Notéiert d'Informatioun fir de Moment, mir kommen méi spéit drop zréck.

Schlecht a gutt Rotschléi

Verzichterklärung: D'Beispiller hei ënnen weisen d'Utilities / Methoden déi ech benotzen, Dir kënnt absolut all Alternativen mat ähnleche Funktiounen benotzen.

Déi meescht vun de Beispiller wäerten op eng oder aner Manéier mat Webentwécklung intersectéieren (dëst ass eng Iwwerraschung), mat PHP an Docker.

D'Paragrafen hei ënnen bidden eng einfach praktesch Beschreiwung vun der Notzung vu Faktoren mat spezifesche Beispiller; wann Dir méi Theorie iwwer dëst Thema wëllt kréien, befollegt d'Links hei uewen op d'Originalquell.

1. Codebase

Benotzt FTP an FileZilla fir Dateien op d'Serveren een gläichzäiteg eropzelueden, späichert de Code net iwwerall anescht wéi um Produktiounsserver.

De Projet soll ëmmer eng eenzeg Code Basis hunn, dat ass, all Code kënnt aus engem goen repository. Serveren (Produktioun, Inszenéierung, Test1, Test2 ...) benotzen Code aus Filialen vun engem gemeinsame Repository. Op dës Manéier erreechen mir Code Konsistenz.

2. Ofhängegkeeten

Luet all Bibliothéiken an Ordner direkt op d'Wuerzel vum Projet erof. Maacht Updates einfach andeems Dir den neie Code an den Dossier mat der aktueller Versioun vun der Bibliothéik transferéiert. Installéiert all déi néideg Utilities direkt um Hostserver wou 20 méi Servicer lafen.

E Projet soll ëmmer eng kloer verständlech Lëscht vun Ofhängegkeeten hunn (ënner Ofhängegkeeten mengen ech och d'Ëmwelt). All Ofhängegkeet muss explizit definéiert an isoléiert ginn.
Loosst eis als Beispill huelen Komponist и Docker.

Komponist - e Package Manager deen Iech erlaabt Bibliothéiken an PHP z'installéieren. Komponist erlaabt Iech Versiounen strikt oder locker ze spezifizéieren, an explizit se definéieren. Et kënnen 20 verschidde Projeten um Server sinn a jidderee wäert eng perséinlech Lëscht vu Packagen a Bibliothéiken hunn onofhängeg vun deem aneren.

Docker - en Utility dat Iech erlaabt d'Ëmfeld ze definéieren an ze isoléieren an deem d'Applikatioun leeft. Deementspriechend, grad wéi mam Komponist, awer méi grëndlech, kënne mir bestëmmen wat d'Applikatioun funktionnéiert. Wielt eng spezifesch Versioun vu PHP, installéiere nëmmen déi Packagen déi néideg sinn fir de Projet ze funktionéieren, ouni eppes extra ze addéieren. A virun allem, ouni d'Packagen an d'Ëmfeld vun der Hostmaschinn an aner Projeten ze stéieren. Dat ass, all Projeten um Server, déi duerch Docker lafen, kënnen absolut all Set vu Packagen an eng ganz aner Ëmfeld benotzen.

3. Configuratioun

Späichert Konfiguratiounen als Konstanten direkt am Code. Separat Konstanten fir den Testserver, getrennt fir d'Produktioun. Bindt d'Operatioun vun der Applikatioun ofhängeg vun der Ëmwelt direkt an der Geschäftslogik vum Projet benotzt wann soss Konstruktiounen.

Konfiguratiounen - dat ass deen eenzege Wee wéi d'Projet-Deploymente sollen ënnerschiddlech sinn. Idealerweis sollten Konfiguratiounen duerch Ëmfeldvariablen (env vars) passéiert ginn.

Dat ass, och wann Dir e puer Konfiguratiounsdateien .config.prod .config.local späichert an se beim Ofbau op .config ëmbenannt (d'Haaptkonfiguratioun, aus där d'Applikatioun Daten liest) - dëst wäert net déi richteg Approche sinn, well an dësem Fall sinn d'Informatiounen aus de Konfiguratiounen ëffentlech verfügbar fir all Applikatiounsentwéckler an d'Donnéeë vum Produktiounsserver ginn kompromittéiert. All Konfiguratioune mussen direkt am Deployment System (CI / CD) gespäichert ginn a fir verschidden Ëmfeld generéiert ginn mat verschiddene Wäerter noutwendeg fir e spezifescht Ëmfeld am Moment vum Deployment.

4. Drëtt Partei Services

Gitt strikt un d'Ëmwelt gebonnen, benotzt verschidde Verbindunge fir déiselwecht Servicer a bestëmmten Ëmfeld.

Tatsächlech iwwerlappt dëse Punkt staark mam Punkt iwwer Konfiguratiounen, well ouni dëse Punkt kënnen normale Konfiguratiounsdaten net gemaach ginn an am Allgemengen d'Konfiguratiounsfäegkeet op näischt falen.

All Verbindunge mat externe Servicer, wéi Schlaangserveren, Datenbanken, Cache-Servicer, musse souwuel fir d'lokal Ëmfeld wéi och fir d'Drëtt-Partei / Produktiounsëmfeld d'selwecht sinn. An anere Wierder, zu all Moment, andeems Dir d'Verbindungsstring ännert, kann ech Uriff op Basis #1 mat Basis #2 ersetzen ouni den Applikatiounscode z'änneren. Oder, kuckt no vir, als Beispill, wann Dir de Service skaléieren, musst Dir d'Verbindung net op eng speziell Manéier fir en zousätzleche Cache-Server spezifizéieren.

5. Bauen, Fräisetzung, ausféieren

Hutt nëmmen déi lescht Versioun vum Code um Server, ouni Chance fir d'Verëffentlechung zréckzekréien. Kee Grond fir Disk Space auszefëllen. Jiddereen deen denkt datt se Code an d'Produktioun mat engem Feeler fräiginn ass e schlechte Programméierer!

All Etappe vun Détachement muss vun all aner getrennt ginn.

Hutt eng Chance fir zréck ze rullen. Maacht Verëffentlechunge mat alen Exemplare vun der Applikatioun (scho versammelt a prett fir d'Schluecht) gespäichert a séier Zougang, sou datt Dir am Fall vu Feeler déi al Versioun restauréiere kënnt. Dat ass, bedingt gëtt et en Dossier verëffentlecht an Dossier aktuell, an no erfollegräichen Deployment an Assemblée den Dossier aktuell verbonne mat engem symbolesche Link op déi nei Verëffentlechung déi dobannen läit verëffentlecht mam konventionellen Numm vun der Verëffentlechungsnummer.

Dëst ass wou mir eis Blue-Green Deployment erënneren, wat Iech erlaabt net nëmmen tëscht Code ze wiesselen, awer och tëscht all Ressourcen a souguer Ëmfeld mat der Fäegkeet ze wiesselen alles zréck.

6. Prozesser

Späichert Applikatiounsstatdaten direkt an der Applikatioun selwer. Benotzt Sessiounen am RAM vun der Applikatioun selwer. Benotzt esou vill Deele tëscht Drëtt Partei Servicer wéi méiglech. Vertrauen op d'Tatsaach datt d'Applikatioun nëmmen ee Prozess kann hunn an d'Skaléierung net erlaabt.

Wat Sessiounen ugeet, späichert Daten nëmmen an engem Cache kontrolléiert vun Drëtt-Partei-Servicer (memcached, redis), also och wann Dir 20 Applikatiounsprozesser lafen, jidderee vun hinnen, deen Zougang zum Cache huet, fäeg weider mam Client ze schaffen an dee selwechten Zoustand an deem de Benotzer mat der Applikatioun an engem anere Prozess geschafft huet. Mat dëser Approche stellt sech eraus datt egal wéi vill Exemplare vun Drëtt-Partei Servicer Dir benotzt, alles funktionnéiert normal an ouni Probleemer mam Zougang zu Daten.

7. Port verbindlech

Nëmmen de Webserver soll wëssen, wéi een mat Drëtt-Partei Servicer schafft. Oder nach besser, installéiert Drëtt Partei Servicer direkt am Webserver. Zum Beispill, als PHP Modul an Apache.
All Är Servicer musse fir all aner zougänglech sinn duerch Zougang zu enger Adress an Hafen (localgost: 5432, localhost: 3000, nginx: 80, php-fpm: 9000), dat heescht, vun nginx kann ech Zougang zu php- fpm an op postgres, a vu php-fpm op postgres an nginx an eigentlech vun all Service kann ech en anere Service zougräifen. Op dës Manéier ass d'Viabilitéit vun engem Service net un der Viabilitéit vun engem anere Service gebonnen.

8. Parallelismus

Schafft mat engem Prozess, soss kënne verschidde Prozesser net matenee eens ginn!

Loosst Plaz fir Skaléieren. Docker Schwarm ass super fir dëst.
Docker Swarm ass en Tool fir Cluster vu Container ze kreéieren an ze managen souwuel tëscht verschiddene Maschinnen an enger Rëtsch Container op der selwechter Maschinn.

Mat Hëllef vu Schwarm kann ech bestëmmen wéivill Ressourcen ech un all Prozess allocéieren a wéivill Prozesser vum selwechte Service ech lancéieren, an den internen Balancer, deen Daten op engem bestëmmten Hafen kritt, wäert se automatesch an d'Prozesser proxy. Also, gesinn datt d'Laascht op de Server eropgaang ass, kann ech méi Prozesser derbäisetzen, an doduerch d'Laascht op bestëmmte Prozesser reduzéieren.

9. Disposéierbarkeet

Benotzt keng Schlaangen fir mat Prozesser an Daten ze schaffen. Ee Prozess ëmzebréngen soll déi ganz Applikatioun beaflossen. Wann ee Service erof geet, geet alles erof.

All Prozess a Service kann zu all Moment ausgeschalt ginn an dëst soll aner Servicer net beaflossen (natierlech heescht dat net datt de Service fir en anere Service net verfügbar ass, awer datt en anere Service no dësem net ausschalt). All Prozesser musse graziéis ofgeschloss ginn, sou datt wann se ofgeschloss ginn, keng Donnéeën beschiedegt ginn an de System funktionnéiert richteg déi nächst Kéier wann Dir et ausschalt. Dat ass, och am Fall vun enger Noutfallkënnegung, däerfen d'Donnéeën net beschiedegt ginn (den Transaktiounsmechanismus ass hei gëeegent, Ufroen an der Datebank funktionnéieren nëmmen a Gruppen, a wann op d'mannst eng Ufro aus der Grupp feelt oder mat engem Feeler, da klappt keng aner Ufro aus der Grupp schlussendlech tatsächlech).

10. Applikatioun Entwécklung / Operatioun Paritéit

Produktioun, Inszenéierung a lokal Versioun vun der Applikatioun muss anescht sinn. An der Produktioun benotze mir de Yii Lite Kader, a lokal Yii, sou datt et méi séier an der Produktioun funktionnéiert!

A Wierklechkeet sollten all Deployementer an Aarbecht mat Code a bal engem identesche Ëmfeld sinn (mir schwätzen net iwwer kierperlech Hardware). Och all Entwécklungsaarbechter soll fäeg sinn de Code op d'Produktioun z'installéieren wann néideg, an net e speziell ausgebilten Devops-Departement, deen nëmmen duerch speziell Stäerkt d'Applikatioun an d'Produktioun ophiewen kann.

Docker hëlleft eis och domat. Wann all déi viregt Punkte beobachtet ginn, bréngt d'Benotzung vum Docker de Prozess fir d'Ëmwelt z'installéieren souwuel op der Produktioun an op der lokaler Maschinn fir een oder zwee Kommandoen anzeginn.

11. Logbicher

Mir schreiwen Logbicher op Dateien an Datenbanken! Mir botzen net Dateien an Datenbanken aus Logbicher. Loosst eis just eng Festplack mat 9000 Peta Bytes kafen an dat ass gutt.

All Logbicher sollen als Stream vun Eventer ugesi ginn. D'Applikatioun selwer sollt net an der Veraarbechtung vu Logbicher involvéiert sinn. Logbicher solle entweder op stdout ausginn oder iwwer e Protokoll wéi udp geschéckt ginn, sou datt d'Aarbecht mat Logbicher keng Probleemer fir d'Applikatioun erstellt. Graylog ass gutt fir dëst. Graylog déi all Logbicher iwwer udp kritt (dëse Protokoll erfuerdert net op eng Äntwert iwwer den erfollegräichen Empfang vum Paket ze waarden) stéiert d'Applikatioun op keng Manéier a beschäftegt sech nëmme mat der Strukturéierung an der Veraarbechtung vu Logbicher. D'Applikatiounslogik ännert sech net fir mat esou Approchen ze schaffen.

12. Administratioun Aufgaben

Fir Daten, Datenbanken, asw. ze aktualiséieren, benotzt e separat erstallt Endpunkt an der API, wann Dir se 2 Mol hannereneen ausféiert, gëtt alles duplizéiert. Mä Dir sidd net domm, Dir wäert net zweemol klickt, a mir brauchen net Migratioun.

All Administratiounsaufgaben sollen am selwechte Ëmfeld wéi all Code gemaach ginn, um Verëffentlechungsniveau. Dat ass, wa mir d'Struktur vun der Datebank änneren mussen, da wäerte mir et net manuell maachen andeems d'Nimm vun de Spalten z'änneren an nei duerch e puer visuell Datebankverwaltungsinstrumenter derbäi ginn. Fir sou Saache kreéiere mir separat Scripten - Migratiounen, déi iwwerall an all Ëmfeld op déiselwecht Manéier mat engem gemeinsamen a verständleche Resultat ausgefouert ginn. Fir all aner Aufgaben, wéi zum Beispill de Projet mat Daten ze fëllen, sollten ähnlech Methodologien benotzt ginn.

Beispill Implementatioun an PHP, Laravel, Laradock, Docker-Compose

PS All Beispiller goufen op MacOS gemaach. Déi meescht vun hinnen sinn och gëeegent fir Linux. Windows Benotzer, verzeien mech, awer ech hunn net laang mat Windows geschafft.

Loosst eis eng Situatioun virstellen, wou mir keng Versioun vu PHP op eisem PC installéiert hunn a guer näischt.
Installéiert déi lescht Versioune vum Docker an Docker-compose. (dëst kann um Internet fonnt ginn)

docker -v && 
docker-compose -v

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

1. Stellt Laradock

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

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

Wat de Laradock ugeet, wäert ech soen datt et eng ganz cool Saach ass, déi vill Container an Hilfssaachen enthält. Awer ech géif net recommandéieren Laradock als solch ze benotzen ouni Ännerungen an der Produktioun wéinst senger Redundanz. Et ass besser fir Är eege Container op Basis vu Beispiller am Laradock ze kreéieren, dëst wäert vill méi optimiséiert ginn, well kee brauch alles wat gläichzäiteg do ass.

2. Laradock konfiguréieren fir eis Applikatioun ze lafen.

cd laradock && 
cp env-example .env

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

2.1. Öffnen den Habr Verzeechnes (den Elterendeel, an deem de Laradock gekloont gëtt) an engem Editor. (A mengem PHPStorm Fall)

Op dëser Etapp gi mir dem Projet nëmmen en Numm.

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

2.2. Start d'Aarbechtsberäich Bild. (An Ärem Fall wäerten d'Biller e bëssen Zäit daueren fir ze bauen)
Workspace ass e speziell virbereet Bild fir mam Kader am Numm vum Entwéckler ze schaffen.

Mir ginn an de Container mat Hëllef

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

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

2.3. Laravel installéieren

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

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

2.4. No der Installatioun kontrolléiere mir ob de Verzeechnes mam Projet erstallt gouf a kill compose.

ls
exit
docker-compose down

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

2.5. Loosst eis zréck op PHPStorm a setzen de richtege Wee fir eis Laravel Applikatioun an der .env Datei.

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

3. Füügt all de Code op Git.

Fir dëst ze maachen, erstellen mir e Repository op Github (oder soss anzwousch). Loosst eis an den habr Verzeechnes am Terminal goen an de folgende Code ausféieren.

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

Loosst eis kucken ob alles an der Rei ass.

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

Fir d'Bequemlechkeet, ech recommandéieren e puer visuell Interface fir Git ze benotzen, a mengem Fall ass et GitKraken. (hei ass e Referrallink)

4. Loosst eis starten!

Ier Dir ufänkt, gitt sécher datt näischt op Ports 80 an 443 hänkt.

docker-compose up -d nginx php-fpm

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

Also besteet eise Projet aus 3 separate Servicer:

  • nginx - Webserver
  • php-fpm - php fir Ufroe vun engem Webserver ze kréien
  • Aarbechtsberäich - php fir Entwéckler

Am Moment hu mir erreecht datt mir eng Applikatioun erstallt hunn déi 4 Punkten vun 12 entsprécht, nämlech:

1. Codebase - all Code ass an engem Repository (kleng Notiz: et kéint richteg sinn Docker am Laravel Projet ze addéieren, awer dëst ass net wichteg).

2. Ofhängegkeeten - All eis Ofhängegkeete ginn explizit an application/composer.json an an all Dockerfile vun all Container geschriwwe.

3. Backing Services — Jidderee vun de Servicer (php-fom, nignx, Aarbechtsberäich) lieft säin eegent Liewen a gëtt vu baussen ugeschloss a wann Dir mat engem Service schafft, gëtt deen aneren net beaflosst.

4. D'Prozesser - all Service ass ee Prozess. Jiddereng vun den Servicer erhalen net intern Staat.

5. Port verbindlech

docker ps

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

Wéi mir kënne gesinn, leeft all Service op sengem eegenen Hafen an ass fir all aner Servicer zougänglech.

6. Konklusioun

Docker erlaabt eis verschidde Prozesser vun deene selwechte Servicer mat automatescher Belaaschtung tëscht hinnen ze spawnen.

Loosst eis d'Container stoppen a se duerch de Fändel lafen -- Skala

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

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

Wéi mir kënne gesinn, goufen Kopie vum php-fpm Container erstallt. Mir brauchen näischt ze änneren an der Aarbecht mat dësem Container. Mir ginn och weider op den Hafen 9000 zou, an Docker reguléiert d'Laascht tëscht Container fir eis.

7. Disposéierbarkeet - all Container kann ëmbruecht ginn ouni deen aneren ze schueden. Stoppen oder nei starten vum Container beaflosst net d'Operatioun vun der Applikatioun während de spéideren Starten. All Container kann och zu all Moment opgehuewe ginn.

8. Applikatioun Entwécklung / Operatioun Paritéit - all eis Ëmfeld sinn déiselwecht. Andeems Dir de System op engem Server an der Produktioun leeft, musst Dir näischt an Äre Kommandoen änneren. Alles wäert op Docker op déiselwecht Manéier baséieren.

9. Logged - all Logbicher an dëse Container ginn op de Stream a si sichtbar an der Docker Konsole. (an dësem Fall, tatsächlech, mat anere hausgemaachte Container, kann dëst net de Fall sinn wann Dir Iech net këmmert)

 docker-compose logs -f

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

Awer et ass e Fang datt d'Standardwäerter an PHP an Nginx och Logbicher op eng Datei schreiwen. Fir déi 12 Faktoren ze treffen, ass et néideg auszeschalten schreiwen Logbicher op eng Datei an de Konfiguratiounen vun all Container separat.

Docker bitt och d'Fäegkeet fir Logbicher net nëmmen op stdout ze schécken, awer och op sou Saachen wéi Graylog, déi ech uewen ernimmt hunn. A bannent Graylog kënne mir d'Logbicher funktionnéieren wéi mir wëllen an eis Applikatioun wäert dat op kee Fall bemierken.

10. Administratioun Aufgaben - all Administratiounsaufgaben gi vu Laravel geléist dank dem Handwierksinstrument genau sou wéi d'Creatoren vun der 12 Faktor Applikatioun wëllen.

Als Beispill wäert ech weisen wéi e puer Kommandoen ausgefouert ginn.
Mir ginn an de Container.

 
docker-compose exec workspace bash
php artisan list

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

Elo kënne mir all Kommando benotzen. (Notéiert w.e.g. datt mir d'Datebank an d'Cache net konfiguréiert hunn, sou datt d'Halschent vun de Kommandoen net korrekt ausgefouert ginn, well se entwéckelt sinn fir mam Cache an der Datebank ze schaffen).

Applikatioun Entwécklung a Blue-Green Deployment, baséiert op The Twelve-Factor App Methodik mat Beispiller an php an Docker

11. Konfiguratiounen an 12. Bauen, befreien, lafen

Ech wollt dësen Deel dem Blue-Green Deployment widmen, awer et huet sech erausgestallt als ze extensiv fir dësen Artikel. Ech wäert en separaten Artikel iwwer dëst schreiwen.

An enger Nossschuel baséiert d'Konzept op CI / CD Systemer wéi Jenkins и Gitlab CI. A béide kënnt Dir Ëmfeldvariablen setzen, déi mat engem spezifeschen Ëmfeld verbonne sinn. Deementspriechend gëtt an dëser Situatioun de Punkt c erfëllt Konfiguratiounen.

An de Punkt iwwer Bauen, befreien, lafen gëtt duerch agebaute Funktiounen mam Numm geléist Pipeline.

Pipeline erlaabt Iech den Détachement Prozess a vill Etappen opzedeelen, Highlight der Etappe vun Assemblée, Verëffentlechung an Ausféierung. Och an der Pipeline kënnt Dir Backups erstellen, a wierklech alles. Dëst ass en Tool mat onbegrenzte Potenzial.

Den Uwendungscode ass um Github.
Vergiesst net den Ënnermodul ze initialiséieren wann Dir dëse Repository klonet.

PS: All dës Approche kënne mat all aner Utilities a Programméierungssprooche benotzt ginn. Den Haapt Saach ass datt d'Essenz net ënnerscheet.

Source: will.com

Setzt e Commentaire