Späť na blog

Nasadenie Laravel, Nginx a MySQL pomocou Docker Compose

Nasadenie Laravel, Nginx a MySQL pomocou Docker Compose

Úvod

Kontinuálna integrácia (CI) a kontinuálne nasadzovanie (CD) patria v súčasnosti medzi najpopulárnejšie témy vo vývoji softvéru. Na dosiahnutie CI/CD aspektu softvérovej architektúry vývojári využívajú kontajnery. Kontajnery sú ľahké, virtualizované, prenosné, softvérovo definované prostredia. V kontajneroch môže softvér bežať izolovane od iného softvéru bežiaceho na fyzickom hostiteľskom stroji. Tento návod sa zameriava na používanie kontajnerovej platformy Docker na nasadenie a spustenie webových aplikácií. Docker pomáha zjednodušiť proces nastavenia balíka webového servera. V tomto návode použijeme balík LEMP na obsluhu Laravel aplikácie.

Balík LEMP kombinuje Linux ako operačný systém, Nginx ako webový server, MySQL ako databázu a PHP jazyk pre skriptovanie a dynamické spracovanie. Môžete postupovať podľa nášho návodu, ako nainštalovať a nakonfigurovať balík LEMP na Ubuntu. Laravel je jedným z najlepších PHP frameworkov na vývoj webových aplikácií.

Docker poskytuje nástroj s názvom Docker Compose na definovanie procesu nastavenia docker kontajnera. Docker Compose umožňuje vývojárom definovať infraštruktúru ich aplikácie, služby, zväzky (volumes), siete a akékoľvek závislosti v jednom súbore nazvanom docker-compose. Dokáže spravovať viacero Docker kontajnerov prostredníctvom svojich príkazov, ako napríklad docker container create, docker container run atď.

V tomto návode sa dozviete, ako nasadiť webovú aplikáciu Laravel s Nginx a MySQL vnútri Docker kontajnera. Konfigurácie pre celý balík budú definované v súbore docker-compose, rovnako ako ďalšie konfiguračné súbory pre PHP, MySQL a Nginx. Začnime!

Najprv to najdôležitejšie

Krok 1: Stiahnutie Laravelu a inštalácia závislostí

Prvým krokom je získanie kódu Laravel z repozitára. V reálnych scenároch môžete mať svoj kód Laravel v nejakom repozitári, napr. na GitHub, Bitbucket, Gitlab atď. Pre účely tohto návodu však budeme klonovať najnovšiu verziu z oficiálneho repozitára Laravel na GitHub. Repozitár obsahuje súbor composer, čo je správca závislostí na úrovni aplikácie pre PHP. Keďže chceme, aby všetko bežalo vnútri Docker kontajnera, nainštalujeme závislosti pomocou Docker obrazu composer. To nám tiež pomôže vyhnúť sa potrebe inštalovať composer globálne na samotnom hostiteľskom stroji. Ďalej spustite svoj terminál.

Prejdite do svojho domovského adresára:

Zadaním nasledujúceho príkazu naklonujte repozitár do adresára s názvom laravel-web. Môžete ho pomenovať akokoľvek chcete. V čase písania tohto návodu tento príkaz stiahne Laravel verzie 8. Keď príkaz spustíte vy, pravdepodobne nájdete novšiu verziu:

Potom prejdite do adresára, do ktorého ste práve naklonovali repozitár:

Zadaním nasledujúceho príkazu pripojte adresáre potrebné pre vašu aplikáciu Laravel pomocou Docker obrazu composer:

Príznaky -v a –rm v príkaze docker run vytvoria dočasný kontajner, ktorý sa pred odstránením prepojí (bind-mount) s aktuálnym adresárom. Príkaz skopíruje obsah ~/laravel-web do kontajnera a zabezpečí, že priečinok vendor vytvorený nástrojom composer sa skopíruje späť do aktuálneho adresára.

Teraz musíte zmeniť vlastníctvo adresára laravel-web na používateľa, ktorý nie je root. To vám umožní pracovať s kódom vašej aplikácie ako používateľ bez oprávnení root a spúšťať procesy vo vnútri kontajnera v nasledujúcich krokoch. Pre zmenu vlastníctva zadajte nasledujúci príkaz:

Kód vašej aplikácie je teraz na svojom mieste. Adresár vlastní používateľ bez oprávnení root, takže môžete pokračovať v definovaní služieb aplikácie v súbore docker-composer.

Krok 2: Vytvorenie súboru Docker Compose

Docker Compose zjednodušuje proces zostavenia a nasadenia aplikácie. Po definovaní konfigurácií a služieb môžete svoju aplikáciu jednoducho nasadiť na akomkoľvek hostiteľskom stroji, ktorý má nainštalovaný Docker a Docker Compose, bez toho, aby ste sa museli starať o závislosti aplikácie. Čo je najdôležitejšie, môžete to urobiť pomocou jediného príkazu Docker Compose, ako uvidíme v Kroku 9.

V tomto kroku zadefinujete súbor Docker Compose s konfiguráciami pre webový server, databázu a aplikačné služby potrebné na nasadenie aplikácie Laravel.

Súbory Docker Compose sú YAML súbory uložené s príponou .yml. Upozorňujeme, že pre platný súbor Docker Compose je potrebné správne odsadenie. Zadajte nasledujúci príkaz na vytvorenie a otvorenie súboru pomocou editora nano na úpravu:

Ďalej v tomto súbore definujete tri služby: app, webserver a db. Sekcia db definuje prihlasovacie údaje k databáze pre vašu aplikáciu, takže sa uistite, že ste vybrali silné mysql_root_password a nahradili ho v tejto sekcii. Skopírujte a vložte nasledujúci kód:

Nižšie nasleduje vysvetlenie definícií služieb z vyššie uvedeného kódu:

  • app: Definuje aplikáciu Laravel a spúšťa vlastný Docker obraz, cloudsigma.com/php, ktorý zadefinujeme v Kroku 4. Taktiež nastavuje working_dir v kontajneri na /var/www/html.
  • webserver: Stiahne obraz nginx:alpine z Dockeru a sprístupní porty 80 a 443.
  • db: Stiahne obraz mysql:5.7.32 z Dockeru a definuje niekoľko premenných prostredia. Tie zahŕňajú databázu s názvom laravel_web pre aplikáciu a root heslo pre databázu. Databázu môžete premenovať na názov podľa vlastného výberu. Nezabudnite nahradiť vlastnosť MYSQL_ROOT_PASSWORD silným heslom. Táto služba tiež mapuje port 3306 na hostiteľovi na port 3306 v kontajneri.

Vlastnosť container_name v každej službe definuje názov pre kontajner zodpovedajúci danej službe. Ak túto vlastnosť nedefinujete, Docker zvolí pre každý kontajner náhodný názov.

Vlastnosť networks definuje premostenú sieť s názvom app-network, ktorá uľahčuje komunikáciu medzi kontajnermi. Premostená sieť (bridge network) je riadená softvérovým mostom, ktorý umožňuje komunikáciu iba medzi kontajnermi na rovnakom sieťovom moste. Softvérový radič mosta inštaluje ovládače, ktoré zabraňujú kontajnerom v rôznych premostených sieťach priamo komunikovať medzi sebou. To zaisťuje vysokú úroveň bezpečnosti, keďže priamo môžu komunikovať iba súvisiace služby. Môžete sa rozhodnúť definovať viacero služieb a sietí pripájajúcich sa k súvisiacim funkciám.

Krok 3: Ako uchovávať dáta

Vaša webová aplikácia bude spracovávať a poskytovať dáta vašim používateľom. V tomto kroku vás prevedieme definovaním zväzkov (volumes) a pripojení typu bind (bind mounts) pre definície vašich služieb na uchovanie dát aplikácie. Docker ponúka neuveriteľné funkcie, ako sú pripojenia typu bind a zväzky na uchovávanie dát a ukladanie konfiguračných súborov aplikácie. Použijeme ich pri nastavení našej aplikácie Laravel pomocou Dockeru.

Zväzky (volumes) sú preferované z rôznych dôvodov, vrátane ponuky záloh a uchovávania dát aj po skončení životného cyklu kontajnera. Pripojenia typu bind (bind mounts) zvyčajne odkazujú na skutočný adresár na hostiteľskom počítači. Keď vytvoríte zväzok, v úložnom adresári Dockeru, ktorý spravuje Docker, sa vytvorí nový adresár. Keď vytvoríte pripojenie typu bind, súbor alebo adresár v hostiteľskom počítači sa pripojí do kontajnera (odkazuje sa naň jeho absolútnou cestou). To je pre našu webovú aplikáciu kľúčové, pretože keď vykonáte zmeny v kóde na hostiteľskom počítači, okamžite sa prejavia aj v kontajneri.

Pri používaní pripojení typu bind buďte opatrní. Procesy bežiace vo vnútri Docker kontajnera môžu vykonávať zmeny v súborovom systéme hostiteľa a ovplyvniť procesy mimo Dockeru bežiace na hostiteľskom systéme. Hoci sú pripojenia Dockeru výkonnou funkciou, uvedomte si tieto bezpečnostné dôsledky.

Po tomto úvode sa pozrime na to, ako môžeme tieto dve funkcie použiť v našom nastavení. Najprv definujeme zväzok na uchovávanie databázy MySQL. V súbore Docker Compose, ktorý sme vytvorili, pridajte pod službu db vlastnosť volumes, ako je zvýraznené nižšie:

Ako je definované, zväzok dbdata uchová obsah adresára /var/lib/mysql. Uľahčuje zálohovanie a umožňuje reštartovanie služieb bez straty dát. Ďalej by ste mali pridať definíciu zväzkov (volumes) na koniec súboru Docker Compose, aby bola dostupná pre všetky služby. Na koniec súboru vložte nasledujúci úryvok kódu:

Na pripojenie k databáze MySQL musíte poskytnúť prihlasovacie údaje. Ak to chcete urobiť, definujte pripojenie typu bind pridaním nasledujúceho zvýrazneného úryvku kódu do služby db pod vlastnosť volumes:

Kód prepojí ~/laravel-web/mysql/my.cnf s /etc/mysql/my.cnf v kontajneri. Prepojený súbor predstavuje konfiguračné súbory MySQL, ktoré vytvoríme v Kroku 7.

Kontajner musí na poskytovanie kódu vašej aplikácie používať server Nginx. Preto na tento účel definujeme dve pripojenia typu bind (jedno pre konfiguračný súbor Nginx a jedno pre kód aplikácie) pod službou webserver. Pridajte nasledujúci úryvok kódu pre definíciu volumes pod službu webserver:

Tento riadok – ./:/var/www/html prepája kód aplikácie v adresári ~/laravel-web s adresárom /var/www/html vo vnútri kontajnera. Pre druhé prepojenie (bind mount) sa vytvorí konfiguračný súbor pre Nginx v ~/laravel-web/nginx/conf.d/. Bude pripojený do /etc/nginx/conf.d/ vo vnútri kontajnera. Vďaka tomu môžete konfiguračný súbor na hostiteľskom stroji aktualizovať podľa potreby. Konfiguračný súbor pre Nginx vytvoríme v Kroku 6.

Aby sa zmeny v kóde automaticky prejavili v kontajneri, prepojíme kód aplikácie s kontajnerom pomocou bind mount. To urýchľuje proces nasadenia. Pridajte preto do služby app nasledujúci zvýraznený úryvok kódu:

Druhý riadok prepojí konfiguračný súbor php, ktorý vytvoríme v Kroku 5 v rámci súboru ~/laravel-web/php/laravel.ini s /usr/local/etc/php/conf.d/laravel.ini vo vnútri kontajnera.

Váš kompletný súbor Docker Compose by mal teraz vyzerať takto:

Ak všetko vyzerá v poriadku, stlačením Ctrl + O súbor uložte. Potom stlačením Ctrl + X ukončite editor. V tomto momente by ste mali byť schopní zostaviť vlastný Docker obraz pre vašu aplikáciu pomocou súboru Docker Compose.

Krok 4: Vytvorenie súboru Dockerfile

Dockerfile obsahuje inštrukcie, ktoré Docker môže použiť na zostavenie vlastných Docker obrazov. Môže tiež nainštalovať požadovaný softvér a nakonfigurovať potrebné nastavenia pre vašu aplikáciu. Tieto inštrukcie definujú prostredie vo vnútri kontajnera, v ktorom bude umiestnený kód vašej aplikácie. Vytvorené obrazy môžete nahrať na Docker Hub na zdieľanie alebo ich umiestniť do iných súkromných registrov.

Vytvoríme Dockerfile, ktorý bude špecifikovať inštrukcie na zostavenie obrazu aplikácie Laravel. Na vytvorenie súboru Dockerfile v adresári ~/laravel-web použite nano:

V otvorenom editore pridajte nasledujúci kód:

Dockerfile najprv vytvorí obraz na základe php:7.4-fpm Docker obrazu. Ide o obraz založený na Debiane s nainštalovanou implementáciou PHP FastCGI (PHP-FPM). Aby Laravel fungoval správne, vyžaduje ďalšie php rozšírenia ako mcrypt, pdo_mysql, mbstring a imagick, ktoré skript nainštaluje. Potom nainštaluje composer správcu php balíkov. Kontajner ho použije na inštaláciu php závislostí Laravelu.

Na definovanie príkazov, ako sú inštalácia, aktualizácia a konfigurácia nastavení vo vnútri kontajnera, môžete použiť direktívu RUN. Taktiež priraďuje používateľské oprávnenia. Direktíva WORKDIR špecifikuje pracovný adresár, v tomto prípade /var/www/html. Skript spustí príkaz CHOWN na priradenie oprávnení k adresáru /var/www/html používateľovi www-data.

Pred samotným zostavením obrazu je potrebné sprístupniť port, aby bol povolený prístup k aplikácii bežiacej vo vnútri kontajnera. Príkaz EXPOSE sprístupní port 9000 pre php-fpm server. Posledným spusteným príkazom je direktíva CMD. Spustí php-fpm na naštartovanie servera.

Teraz môžete stlačiť Ctrl + O na uloženie súboru. Potom stlačte Ctrl + X na ukončenie editora.

Krok 5: Konfigurácia PHP

V tomto kroku nakonfigurujeme službu php na spracovanie prichádzajúcich požiadaviek z Nginx. Vytvoríte súbor laravel.ini v adresári php. Tento súbor bude obsahovať konfigurácie PHP. Toto je súbor, ktorý ste pripojili (bind-mount) k /usr/local/etc/php/conf.d/laravel.ini v kontajneri v Kroku 3. Konfigurácie v tomto súbore prepíšu predvolený súbor php.ini, ktorý PHP zvyčajne číta pri svojom spustení. Zadajte nasledujúci príkaz na vytvorenie adresára php:

Vytvorte a otvorte súbor laravel.ini v adresári php zadaním nasledujúceho príkazu:

Predvolený php.ini súbor má limit pre nahrávanie nastavený na 2M. Ako príklad si ukážeme, ako upraviť a nastaviť konfigurácie php zmenou hodnoty povoleného limitu pre nahrávanie, pre prípad, že by ste chceli nahrávať väčšie súbory. Zadajte nasledujúce riadky kódu do súboru:

Týmto sa nastaví limit pre nahrávanie a môžete nahrávať súbory s celkovou veľkosťou maximálne 80 MB. Do súboru laravel.ini môžete pridať ďalšie konfigurácie php, ktoré prepíšu predvolené konfigurácie php. Teraz súbor uložte a zatvorte.

Krok 6: Konfigurácia Nginx

In tomto kroku nakonfigurujeme Nginx tak, aby používal službu php, ktorú sme definovali predtým. Bude používať PHP-FPM ako FastCGI server na poskytovanie dynamického obsahu. FastCGI server je softvér, ktorý umožňuje interaktívnym programom komunikovať s webovým serverom.

Ako sme definovali v súbore docker-compose v Kroku 3, vytvoríme konfiguračný súbor Nginx app.conf v adresári ~/laravel-web/nginx/conf.d/. Najprv zadajte nasledujúci príkaz na vytvorenie adresára:

Ďalej vytvorte a otvorte súbor app.conf pomocou nano zadaním nasledujúceho príkazu:

Pridajte do súboru nasledujúci konfiguračný kód Nginx:

Nginx číta konfiguračné súbory nazývané serverové bloky (server blocks), aby vedel, ktorý adresár sa má zobraziť návštevníkovi webovej stránky na základe URL adresy. Ak sa chcete dozvedieť viac, prečítajte si o nastavení serverových blokov v našom návode na inštaláciu Nginx na Ubuntu 18.04. Definované direktívy slúžia na nasledujúce účely:

  • listen – Definuje port, na ktorom bude server počúvať prichádzajúce požiadavky, čo je zvyčajne port 80.
  • error_log & access_log – Definuje súbory na zápis aplikačných logov.
  • root – Definuje cestu k webrootu, adresár, ktorý bude obsluhovať akúkoľvek požiadavku odoslanú na server z internetu.

V bloku location pre php direktíva fastcgi_pass špecifikuje, že služba app počúva na TCP sokete na porte 9000 (ktorý bol definovaný v Dockerfile). To nasmeruje server PHP-FPM, aby počúval cez sieť a nie na Unix sokete. Hoci Unix soket môže mať miernu výhodu v rýchlosti oproti TCP soketu, chýba mu sieťový protokol, čím obchádza sieťový zásobník.

Unix socket by bol vhodnejší pre scenáre, kde sa hostitelia nachádzajú na jednom stroji. Ak však máte služby spustené na rôznych hostiteľoch, TCP socket má výhodu v prepojení služieb, ktoré sú distribuované. V našom prípade beží kontajner aplikácie na inom hostiteľovi ako kontajner nášho webového servera. Preto je pre našu konfiguráciu najvhodnejší TCP socket.

Teraz môžete stlačiť Ctrl + O na uloženie súboru a potom stlačiť Ctrl + X na ukončenie editora. Zmeny vykonané v adresári nginx/conf.d/ sa automaticky prejavia v kontajneri webového servera vďaka pripojeniu typu bind mount, ktoré ste pridali do súboru Docker Compose v Krok 3.

Krok 7: Konfigurácia MySQL

Po nakonfigurovaní Nginx na prácu s PHP môžeme teraz nakonfigurovať MySQL na ukladanie a poskytovanie dynamických dát pre PHP. Súbor Docker Compose sme už nastavili tak, aby nainštaloval potrebné rozšírenia pre komunikáciu medzi PHP a MySQL. Konfiguračný súbor MySQL my.cnf vytvoríme v priečinku mysql, ktorý bude pripojený cez bind mount do /etc/mysql/my.cnf, ako sme definovali v sekcii služby db v Docker Compose v Krok 3.

Nastavenia a zmeny konfigurácie MySQL môžete v súbore my.cnf vykonať kedykoľvek. Mali by sa okamžite prejaviť vo vnútri kontajnera. Najprv vytvorte adresár zadaním nasledujúceho príkazu:

Ďalej vytvorte a otvorte nano zadaním nasledujúceho príkazu:

Zadajte nasledujúci úryvok kódu na povolenie denníka dopytov (query log) a špecifikovanie umiestnenia súboru denníka dopytov:

Definovaním vlastnosti general_log na hodnotu 1 povolíte všeobecné denníky (general logs). Vlastnosť general_log_file špecifikuje umiestnenie súboru denníkov. Stlačením Ctrl + O súbor uložte a stlačením Ctrl + X ukončite editor.

Krok 8: Nastavenie premenných prostredia Laravel

Do tohto bodu sú všetky služby a nastavenia konfigurácie dokončené. Mohli by sme teda nasadiť naše kontajnery. Predtým, ako bude naša webová aplikácia skutočne použiteľná, je však potrebné vykonať dôležitý krok – premenné prostredia. Rámec Laravel očakáva súbor s názvom .env, ktorý používa na definovanie svojho prostredia. V predvolenom nastavení sa Laravel dodáva so súborom .env.example, ktorý môžete skopírovať do .env a potom upraviť premenné s vašimi skutočnými údajmi. Na skopírovanie súboru zadajte nasledujúci príkaz:

Po skopírovaní otvorte súbor pomocou nano na úpravu:

Tu je snímka obrazovky, ako môže súbor vyzerať:

screenshot of what the file

V súbore je ďalším krokom úprava premenných v bloku DB_CONNECTION, ako ste ich nastavili v predchádzajúcich konfiguráciách, ktoré sme doteraz vykonali. Aktualizujte nasledovne:

  • DB_HOST je db databázový kontajner.
  • DB_DATABASE je laravel_web.
  • DB_USERNAME je používateľské meno pre databázu. Vyberte si meno podľa vlastného výberu, ale pre účely tohto návodu použijeme laraveldocker.
  • DB_PASSWORD je silné heslo, ktoré váš vyššie uvedený používateľ použije na prihlásenie do databázy, preto si vyberte silné heslo. V Kroku 10 vytvoríme tohto používateľa s heslom, ktoré ste si tu vybrali.

Po aktualizácii hodnôt by vaše DB_CONNECTION malo teraz vyzerať takto:

DB_CONNECTION

Uložte a zatvorte súbor.

Krok 9: Spustenie Docker kontajnerov

V tejto fáze sú všetky vaše služby a konfigurácie definované v súbore Docker Compose. Na spustenie všetkých kontajnerov, vytvorenie zväzkov, pripojenie sietí a nastavenie a zostavenie vašej aplikácie je potrebný iba jeden príkaz. Do terminálu zadajte nasledujúci príkaz:

Keď prvýkrát spustíte príkaz docker-compose up, stiahnu sa všetky potrebné obrazy Docker. Ak nastavujete infraštruktúru na svojom lokálnom počítači, môže to chvíľu trvať. Po stiahnutí obrazov Compose vytvorí kontajnery. Príznak -d inštruuje Docker, aby spustil kontajnery na pozadí. Ak proces prebehne úspešne, vo vašom termináli by ste mali vidieť niečo takéto:

terminal

Zadajte do terminálu nasledujúci príkaz na zobrazenie zoznamu všetkých spustených kontajnerov:

Malo by sa zobraziť niečo podobné ako na snímke obrazovky nižšie, s podrobnosťami o kontajneroch app, webserver a db:

screenshot details

  • CONTAINER ID – Jedinečný identifikátor pre každý kontajner.
  • NAMES – Názov služby priradený ku každému kontajneru, ako je definovaný v súbore Docker Compose. (Na prístup ku kontajneru môžete použiť buď ID kontajnera, alebo jeho názov).
  • IMAGE – Názov obrazu pre každý kontajner.
  • STATUS – Zobrazuje informácie o stave kontajnera (môže byť zastavený, spustený alebo sa reštartuje).
  • PORTS – Ukazuje porty, ktoré kontajner sprístupňuje.

Docker Compose poskytuje príkaz s názvom exec, ktorý môžete použiť na spúšťanie príkazov terminálu alebo prístup k príkazovému riadku vo vnútri kontajnera. Najprv chceme spustiť niekoľko príkazov vo vnútri kontajnera app, čo je kontajner, v ktorom beží aplikácia Laravel.

Docker poskytuje príkaz na prístup k príkazovému riadku kontajnera. Jeho syntax je nasledovná: docker-compose exec container_name bash. Pre prístup k príkazovému riadku kontajnera app zadajte nasledujúci príkaz:

Keď sa ocitnete v príkazovom riadku kontajnera, môžete spustiť niekoľko konfiguračných príkazov Laravel Artisan. Zadajte nasledujúci príkaz na vygenerovanie kľúča Laravel a jeho uloženie do súboru .env:

S nastaveným kľúčom prostredia môžete spustiť nasledujúci príkaz na uloženie konfiguračných nastavení do vyrovnávacej pamäte (cache):

Konfigurácie sú uložené v súbore /var/www/html/bootstrap/cache/config.php vo vnútri kontajnera. Pre ukončenie terminálu kontajnera môžete stlačiť Ctrl + D.

Ak chcete potvrdiť, že aplikácia Laravel bola nasadená a beží, navštívte vo svojom prehliadači verejnú IP adresu vášho servera (http://your_server_public_ip). Mali by ste vidieť uvítaciu stránku novej inštalácie Laravel:

laravel screenshot

Krok 10: Konfigurácia používateľa MySQL

V tomto kroku vytvoríme databázového používateľa pre databázu MySQL laravel_web, ktorú sme špecifikovali v súbore docker-compose. Keď ste spustili príkaz na zostavenie kontajnera v Step 9, MySQL sa nainštaloval, ale vytvoril iba predvolený administrátorský účet root, ktorý má neobmedzené privilégiá k databáze. Aby sme sa vyhli používaniu používateľa root, vytvoríme vyhradeného používateľa laraveldocker, ktorého budeme používať pre aplikáciu. Toto je používateľ, ktorého ste špecifikovali v premenných prostredia v Step 8. Prístup k príkazovému riadku vo vnútri terminálu získate zadaním nasledujúceho príkazu:

Po vstupe do kontajnera sa prihláste do MySQL zadaním nasledujúceho príkazu:

V výzve na zadanie hesla zadajte heslo, ktoré ste nastavili v službe db v súbore docker-compose v Step 2.

Po prihlásení do príkazového riadku MySQL skontrolujte, či vidíte databázu, ktorú ste špecifikovali v súbore docker-compose, zadaním nasledujúceho príkazu SQL:

Mali by ste vidieť databázu laravel_web alebo akýkoľvek iný názov, ktorý ste špecifikovali pre svoje nastavenie:

Laravel

Ďalej vytvoríme používateľa a heslo pre databázu laravel_web. Musia to byť rovnaké údaje, aké ste uviedli v súbore .env v Step 8. Zadajte nasledujúci príkaz na vytvorenie používateľa a hesla a udelenie všetkých privilégií tomuto používateľovi:

Aby sa zmeny prejavili okamžite, zadajte nasledujúci príkaz na znovunačítanie oprávnení:

Tým je konfigurácia používateľa MySQL dokončená. Ukončite príkazový riadok MySQL zadaním exit a stlačením klávesu Enter. Nakoniec ukončite db kontajner stlačením Ctrl + D.

Krok 11: Otestovanie komunikácie medzi kódom aplikácie Laravel a databázou MySQL

Až do tohto kroku všetko fungovalo dobre. Chceme sa však uistiť, že kód Laravel v kontajneri app dokáže komunikovať s databázou MySQL v kontajneri db. Najprv prejdite do terminálu kontajnera app zadaním nasledujúceho príkazu:

Ďalej je potrebné spustiť príkaz migráciu Laravel, ktorý vytvorí tabuľky:

V termináli by ste mali vidieť priebeh migrácie, počas ktorej Laravel vytvára predvolené tabuľky:

migration process

Ďalej otestujeme, či máme prístup k databáze z Laravelu. Laravel predvolene obsahuje nástroj Tinker, ktorý vám umožňuje komunikovať s celou aplikáciou z príkazového riadku, vrátane prístupu k databáze, spúšťania úloh, eloquent ORM a ďalších možností. Pomocou nástroja Tinker môžeme zobraziť údaje v tabuľke migrácií. Pre prístup k nástroju Tinker zadajte nasledujúci príkaz:

Po vstupe do príkazového riadku Tinker môžete zobraziť zoznam tabuliek vytvorených príkazom migrate zadaním nasledujúceho:

Nasledujúci snímok obrazovky ukazuje výstup, čo sú tabuľky, ktoré sa momentálne nachádzajú v databáze laravel_web:

laravel_web database

Údaje v tabuľke môžete získať zadaním názvu tabuľky. Napríklad údaje v tabuľke migrations môžete získať zadaním nasledujúceho príkazu:

Príkaz vypíše nasledujúce:

comman output

Z vyššie uvedeného výstupu vyplýva, že vaša aplikácia Laravel je správne nakonfigurovaná a dokáže komunikovať s databázou. Môžete experimentovať s ďalšími príkazmi, ako je vytváranie modelov, spúšťanie úloh a ďalšie. Príkazový riadok Tinker môžete ukončiť stlačením Ctrl + D.

Záver

V tomto návode ste nasadili aplikáciu Laravel s LEMP stackom vnútri Docker kontajnera. Aplikáciu ste otestovali prístupom k webovému rozhraniu a tiež pripojením k databáze prostredníctvom nástroja Laravel Tinker. Mali ste možnosť vyskúšať si silu nástroja Docker Compose. Umožňuje vám vytvoriť skupinu Docker kontajnerov definovaných v jednom súbore, ktoré potom možno spustiť jediným príkazom.

Ak sa chcete s kontajnermi oboznámiť podrobnejšie, pozrite si náš návod, ktorý vám ukáže, ako vyčistiť prostriedky Docker – obrazy, kontajnery a zväzky a náš podrobný prehľad nástroja Kubernetes.

Môžete tiež navštíviť náš blog, kde nájdete viac informácií o Dockeri a kontinuálnej integrácii a kontinuálnom nasadzovaní.

Príjemnú prácu!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev je kreatívny dizajnér v spoločnosti CloudSigma, ktorý sa zameriava na konzistentnú firemnú identitu prostredníctvom tradičných a inovatívnych marketingových kanálov. Dokáže brilantne spájať umeleckú víziu so strategickým marketingom, čím vytvára pôsobivé príbehy značky.

Komentáre

Zatiaľ žiadne komentáre. Buďte prvý.