Vissza a bloghoz

Laravel, Nginx és MySQL üzembe helyezése Docker Compose segítségével

Laravel, Nginx és MySQL üzembe helyezése Docker Compose segítségével

Bevezetés

A folyamatos integráció (CI) és a folyamatos szállítás (CD) jelenleg a szoftverfejlesztés legfelkapottabb témái közé tartoznak. A CI/CD aspektusának megvalósításához a szoftverarchitektúrában a fejlesztők konténereket használnak. A konténerek könnyűsúlyú, virtualizált, hordozható, szoftveresen definiált környezetek. A konténerekben a szoftver a fizikai gazdagépen futó többi szoftvertől elkülönítve futhat. Ennek az útmutatónak a fókuszában a Docker konténerplatform használata áll webalkalmazások telepítésére és futtatására. A Docker segít egyszerűsíteni a webszerver-stack beállítási folyamatát. Ebben az útmutatóban a LEMP stacket fogjuk használni egy Laravel alkalmazás kiszolgálására.

A LEMP stack a Linuxot mint operációs rendszert, az Nginx-et mint webszervert, a MySQL-t mint adatbázist, és a PHP nyelvet használja a szkripteléshez és a dinamikus feldolgozáshoz. Követheti a LEMP stack Ubuntu-ra történő telepítéséről és konfigurálásáról szóló útmutatónkat. A Laravel az egyik legnépszerűbb PHP keretrendszer webalkalmazások fejlesztéséhez.

A Docker biztosít egy Docker Compose nevű eszközt a docker konténerek beállítási folyamatának meghatározásához. Docker Compose lehetővé teszi a fejlesztők számára, hogy egyetlen, docker-compose nevű fájlban határozzák meg alkalmazásuk infrastruktúráját, szolgáltatásait, köteteit, hálózatait és az esetleges függőségeket. Képes több Docker konténert is kezelni olyan parancsain keresztül, mint a docker container create, docker container run stb.

Ebben az útmutatóban megtanulhatja, hogyan telepíthet egy Laravel webalkalmazást Nginx-szel és MySQL-lel egy Docker konténerben belül. A teljes stack konfigurációi egy docker-compose fájlban lesznek meghatározva, a PHP, MySQL és Nginx egyéb konfigurációs fájljaival együtt. Kezdjük el!

Első dolgok először

1. lépés: A Laravel letöltése és a függőségek telepítése

Az első lépés a Laravel kód letöltése egy tárolóból (repo). Valós forgatókönyvekben a Laravel kódja valószínűleg egy tárolóban van valahol, például a GitHubon, Bitbucketen, Gitlabon stb. Ebben az útmutatóban azonban a legfrissebb verziót fogjuk klónozni a hivatalos Laravel tárolóból a GitHub platformon. A tároló tartalmaz egy composer fájlt, amely a PHP alkalmazásszintű függőségkezelője. Mivel azt szeretnénk, hogy minden a Docker konténeren belül fusson, a függőségeket a Docker composer képfájljának (image) segítségével fogjuk telepíteni. Ez segít elkerülni azt is, hogy a composert globálisan kelljen telepítenünk a tényleges gazdagépre. Ezután indítsa el a terminált.

Lépjen be a saját (home) könyvtárába:

Írja be a következő parancsot a tároló klónozásához egy laravel-web nevű könyvtárba. Nyugodtan elnevezheti tetszés szerint. Ezen útmutató írásakor ez a parancs a Laravel 8-as verzióját tölti le. Amikor futtatja a parancsot, valószínűleg egy újabb verziót fog találni:

Ezután lépjen be abba a könyvtárba, amelybe éppen klónozta a tárolót:

Írja be a következő parancsot a laravel alkalmazásához szükséges könyvtárak csatolásához a Docker composer képfájljának (image):

A -v és –rm jelzők a docker run parancsban egy ideiglenes konténert hoznak létre, amely a törlése előtt hozzá lesz kötve (bind-mount) az aktuális könyvtárhoz. A parancs átmásolja a ~/laravel-web tartalmát a konténerbe, és biztosítja, hogy a composer által létrehozott vendor mappa visszamásolásra kerüljön az aktuális könyvtárba.

Most meg kell változtatnia a laravel-web könyvtár tulajdonosát a nem-root felhasználóra. Ez lehetővé teszi, hogy a következő lépésekben nem-root felhasználóként dolgozzon az alkalmazás kódjával, és folyamatokat futtasson a konténeren belül. A tulajdonos megváltoztatásához írja be a következő parancsot:

Az alkalmazás kódja most már a helyén van. A könyvtár tulajdonosa egy nem-root felhasználó, így továbbléphet az alkalmazásszolgáltatások meghatározására a docker-compose fájlban.

2. lépés: A Docker Compose fájl létrehozása

A Docker Compose leegyszerűsíti az alkalmazások felépítésének és telepítésének folyamatát. Miután meghatározta a konfigurációkat és a szolgáltatásokat, könnyen telepítheti alkalmazását bármely olyan gazdagépen, amelyre telepítve van a Docker és a Docker Compose, anélkül, hogy aggódnia kellene az alkalmazás függőségei miatt. Ami a legfontosabb, ezt egyetlen Docker Compose paranccsal megteheti, amint azt látni fogjuk a 9. lépésben..

Ebben a lépésben egy Docker Compose fájlt fog meghatározni a webszerver, az adatbázis és az alkalmazásszolgáltatások konfigurációival, amelyek egy Laravel alkalmazás telepítéséhez szükségesek.

A Docker Compose fájlok YAML formátumú, .yml kiterjesztéssel mentett fájlok. Kérjük, vegye figyelembe, hogy a megfelelő behúzás szükséges az érvényes Docker Compose fájlhoz. Írja be a következő parancsot a fájl létrehozásához és a nano szerkesztővel való megnyitásához:

Ezután három szolgáltatást fog meghatározni ebben a fájlban: app, webserver és db. A db szakasz határozza meg az alkalmazás adatbázis-hitelesítő adatait, ezért mindenképpen válasszon egy erős mysql_root_password-öt, és cserélje ki abban a szakaszban. Másolja ki és illessze be a következő kódot:

Az alábbiakban a fenti kódban szereplő szolgáltatásdefiníciók magyarázata következik:

  • app: Meghatározza a Laravel alkalmazást, és egy egyedi Docker-képet futtat (cloudsigma.com/php), amelyet a 4. lépésben fogunk meghatározni. Beállítja továbbá a working_dir értékét a konténerben a /var/www/html könyvtárra.
  • webserver: Letölti az nginx:alpine képet a Dockerből, és megnyitja a következő portokat: 80 és 443.
  • db: Letölti a mysql:5.7.32 képet a Dockerből, és meghatároz néhány környezeti változót. Ezek közé tartozik egy laravel_web nevű adatbázis az alkalmazás számára, valamint az adatbázis root jelszava. Az adatbázist átnevezheti egy tetszőleges névre. Ne felejtse el kicserélni a MYSQL_ROOT_PASSWORD tulajdonságot egy erős jelszóra. Ez a szolgáltatás a gazdagép 3306-os portját is a konténer 3306-os portjához rendeli.

Az egyes szolgáltatásokban található container_name tulajdonság határozza meg a szolgáltatásnak megfelelő konténer nevét. Ha nem határozza meg ezt a tulajdonságot, a Docker egy véletlenszerű nevet választ minden egyes konténernek.

A networks tulajdonság egy bridge hálózatot határoz meg app-network néven, amely megkönnyíti a konténerek közötti kommunikációt. A bridge hálózatot egy szoftveres híd vezérli, amely csak az ugyanazon a hálózati hídon lévő konténerek közötti kommunikációt teszi lehetővé. A szoftveres hídvezérlő olyan illesztőprogramokat telepít, amelyek megakadályozzák, hogy a különböző bridge hálózatokon lévő konténerek közvetlenül kommunikáljanak egymással. Ez magas szintű biztonságot garantál, mivel csak a kapcsolódó szolgáltatások tudnak közvetlenül kommunikálni. Dönthet úgy is, hogy több szolgáltatást és hálózatot határoz meg a kapcsolódó funkciók összekapcsolására.

3. lépés: Hogyan perzisztáljuk az adatokat

A webalkalmazása adatokat fog kezelni és kiszolgálni a felhasználóknak. Ebben a lépésben végigvezetjük Önt a kötetek és bind mountok meghatározásán a szolgáltatásdefiníciókban az alkalmazás adatainak perzisztálásához. A Docker olyan hihetetlen funkciókat kínál, mint a bind mountok és a kötetek az adatok perzisztálására és az alkalmazás konfigurációs fájljainak mentésére. Ezeket fogjuk használni a Laravel alkalmazásunk Dockerrel történő beállításához.

A kötetek (volumes) használata több okból is előnyösebb, többek között biztonsági mentéseket kínálnak, és a konténer életciklusán túl is megőrzik az adatokat. A bind mountok általában a gazdagép egy tényleges könyvtárára hivatkoznak. Amikor létrehoz egy kötetet, egy új könyvtár jön létre a Docker tárolókönyvtárában, amelyet a Docker kezel. Amikor bind mountot hoz létre, a gazdagépen lévő fájl vagy könyvtár be lesz csatolva egy konténerbe (az abszolút útvonalára hivatkozva). Ez kulcsfontosságú a webalkalmazásunk szempontjából, mert amikor módosítja a kódot a gazdagépen, az azonnal elérhetővé válik a konténer számára.

Legyen óvatos a bind mountok használatakor. A Docker-konténerben futó folyamatok módosíthatják a gazdagép fájlrendszerét, és hatással lehetnek a gazdagépen futó nem Docker-folyamatokra. Bár a Docker-csatolások hatékony funkciót jelentenek, legyen tisztában ezekkel a biztonsági következményekkel.

Ezek után lássuk, hogyan használhatjuk ezt a két funkciót a beállításunkban. Először meghatározunk egy kötetet a MySQL adatbázis perzisztálásához. Az általunk létrehozott Docker Compose fájlban, a db szolgáltatás alatt, adjon hozzá egy volumes tulajdonságot az alábbiak szerint kiemelve:

A meghatározás szerint a dbdata kötet fogja perzisztálni a /var/lib/mysql tartalmát. Ez megkönnyíti a biztonsági mentéseket, és lehetővé teszi a szolgáltatások újraindítását az adatok elvesztése nélkül. Ezután adja hozzá a kötetek (volumes) definícióját a Docker Compose fájl végéhez, hogy az elérhető legyen a szolgáltatások között. Írja be a következő kódrészletet a fájl aljára:

A MySQL adatbázishoz való csatlakozáshoz meg kell adnia a hitelesítési adatokat. Ehhez határozzon meg egy bind mountot úgy, hogy hozzáadja a következő kiemelt kódrészletet a db szolgáltatáshoz a volumes tulajdonság alatt:

A kód a ~/laravel-web/mysql/my.cnf fájlt a konténerben lévő /etc/mysql/my.cnf fájlhoz köti. A csatolt fájl az a MySQL konfigurációs fájl, amelyet a 7. lépésben fogunk létrehozni.

A konténernek az Nginx szervert kell használnia az alkalmazáskód kiszolgálásához. Ezért erre a célra két bind mountot határozunk meg (egyet az Nginx konfigurációs fájljához, egyet pedig az alkalmazáskódhoz) a webserver szolgáltatás alatt. Adja hozzá a következő kódrészletet a kötetek (volumes) meghatározásához a webserver szolgáltatás alatt:

Ez a sor – ./:/var/www/html összekapcsolja az alkalmazás kódját a ~/laravel-web könyvtárban a konténeren belüli /var/www/html könyvtárral. A második csatoláshoz (bind mount) egy Nginx konfigurációs fájl jön létre a ~/laravel-web/nginx/conf.d/ helyen. Ez a konténeren belüli /etc/nginx/conf.d/ könyvtárba lesz csatolva. Így szükség szerint frissítheti a konfigurációs fájlt a gazdagépen. Az Nginx conf fájlt itt fogjuk létrehozni: 6. lépés.

Ahhoz, hogy a kódban végrehajtott változtatások automatikusan megjelenjenek a konténerben, az alkalmazás kódját a konténerhez csatoljuk (bind mount). Ez felgyorsítja a telepítési folyamatot. Ezért adja hozzá a következő kiemelt kódrészletet az app szolgáltatáshoz:

A második sor egy php konfigurációs fájlt csatol, amelyet itt fogunk létrehozni: 5. lépés a ~/laravel-web/php/laravel.ini fájlon belül a konténerben lévő /usr/local/etc/php/conf.d/laravel.ini fájlhoz.

A teljes Docker Compose fájlnak most így kell kinéznie:

Ha minden rendben van, nyomja meg a Ctrl + O billentyűkombinációt a fájl mentéséhez. Ezután nyomja meg a Ctrl + X billentyűkombinációt a szerkesztőből való kilépéshez. Ezen a ponton már képesnek kell lennie egy egyedi Docker-képfájl felépítésére az alkalmazásához a Docker Compose fájl segítségével.

4. lépés: A Dockerfile létrehozása

A Dockerfile olyan utasításokat tartalmaz, amelyeket a Docker használhat egyedi Docker-képfájlok felépítéséhez. Telepítheti a szükséges szoftvereket is, és konfigurálhatja az alkalmazásához szükséges beállításokat. Meghatározzák a konténeren belüli környezetet, amely az alkalmazás kódját fogja tárolni. A létrehozott képfájlokat feltöltheti a docker hub helyre megosztás céljából, vagy elhelyezheti őket más privát regiszterekben.

Létrehozunk egy Dockerfile-t, amely megadja a Laravel alkalmazáskép felépítéséhez szükséges utasításokat. Használja a nano-t a Dockerfile létrehozásához a ~/laravel-web könyvtárban:

A megnyitott szerkesztőben adja hozzá a következő kódot:

A Dockerfile először egy olyan képet hoz létre, amely a php:7.4-fpm Docker-képen alapul. Ez egy Debian-alapú kép, amelyre telepítve van a PHP FastCGI implementáció (PHP-FPM). Ahhoz, hogy a Laravel megfelelően fusson, más PHP-kiterjesztésekre is szükség van, mint például az mcrypt, pdo_mysql, mbstring és imagick, amelyeket a szkript telepít. Ezután telepíti a composer PHP-csomagkezelőt. A konténer ezt fogja használni a Laravel PHP-függőségeinek telepítéséhez.

A RUN direktívával olyan parancsokat határozhat meg, mint a telepítés, frissítés és a beállítások konfigurálása a konténeren belül. Ez a felhasználói jogosultságokat is hozzárendeli. A WORKDIR direktíva határozza meg a munkakönyvtárat, amely ebben az esetben a /var/www/html. A szkript futtatja a CHOWN parancsot, hogy a /var/www/html könyvtár jogosultságait hozzárendelje a www-data felhasználóhoz.

A kép végleges felépítése előtt meg kell nyitni egy portot, hogy hozzáférést biztosítsunk a konténerben futó alkalmazáshoz. Az EXPOSE parancs megnyit egy portot (9000) a php-fpm szerver számára. Az utolsó futtatandó parancs a CMD direktíva. Ez futtatja a php-fpm-et a szerver elindításához.

Most megnyomhatja a Ctrl + O billentyűkombinációt a fájl mentéséhez. Ezután nyomja meg a Ctrl + X billentyűkombinációt a szerkesztőből való kilépéshez.

5. lépés: A PHP konfigurálása

Ebben a lépésben konfiguráljuk a php szolgáltatást az Nginx-től érkező kérések feldolgozására. Létre fog hozni egy laravel.ini fájlt a php könyvtárban. Ez a fájl fogja tartalmazni a PHP konfigurációkat. Ez az a fájl, amelyet a /usr/local/etc/php/conf.d/laravel.ini útvonalra csatolt (bind-mount) a konténerben a 3. lépésben. Az ebben a fájlban található konfigurációk felülírják az alapértelmezett php.ini fájlt, amelyet a PHP általában indításkor beolvas. Írja be a következő parancsot a php könyvtár létrehozásához:

Hozza létre és nyissa meg a laravel.ini fájlt a php könyvtárban a következő parancs beírásával:

Az alapértelmezett php.ini fájl feltöltési korlátja 2M-ra van beállítva. Példaként megmutatjuk, hogyan módosíthatja és állíthatja be a php konfigurációkat az engedélyezett feltöltési korlát értékének megváltoztatásával, arra az esetre, ha nagyobb fájlokat szeretne feltölteni. Írja be a következő kódsorokat a fájlba:

Ez beállítja a feltöltési korlátot, így legfeljebb 80 MB összeméretű fájlokat tölthet fel. A laravel.ini fájlban további php konfigurációkat is megadhat az alapértelmezett php konfigurációk felülírásához. Most mentse el és zárja be a fájlt.

6. lépés: Az Nginx konfigurálása

Ebben a lépésben konfiguráljuk az Nginx-et a korábban meghatározott php szolgáltatás használatára. A PHP-FPM szolgáltatást fogja használni mint FastCGI szervert a dinamikus tartalom kiszolgálására. A FastCGI szerver egy olyan szoftver, amely lehetővé teszi az interaktív programok számára a webszerverrel való kommunikációt.

Ahogy azt a docker-compose fájlban meghatároztuk a 3. lépésben, létrehozzuk az app.conf Nginx konfigurációs fájlt a ~/laravel-web/nginx/conf.d/ könyvtárban. Először írja be a következő parancsot a könyvtár létrehozásához:

Ezután hozza létre és nyissa meg az app.conf fájlt a nano segítségével a következő parancs beírásával:

Adja hozzá a következő Nginx konfigurációs kódot a fájlhoz:

Az Nginx úgynevezett szerverblokk (server block) konfigurációs fájlokat olvas be, hogy tudja, melyik könyvtárat kell kiszolgálnia a webhely látogatójának az URL alapján. Ha többet szeretne megtudni, olvassa el a szerverblokkok beállításáról szóló részt a következő útmutatónkban: Nginx telepítése Ubuntu-ra18.04. A meghatározott direktívák a következő célokat szolgálják:

  • listen – Meghatározza azt a portot, amelyen a szerver a bejövő kéréseket fogadja, ez általában a 80-as port.
  • error_log & access_log – Meghatározza az alkalmazásnaplók (logs) írására szolgáló fájlokat.
  • root – Meghatározza a webroot útvonalat, vagyis azt a könyvtárat, amely kiszolgálja az internetről a szerverre érkező kéréseket.

A php location blokkjában a fastcgi_pass direktíva meghatározza, hogy az app szolgáltatás egy TCP socketen figyel a 9000-es porton (amely a Dockerfile-ban lett meghatározva). Ez arra utasítja a PHP-FPM szervert, hogy a hálózaton keresztül figyeljen, és ne egy Unix socketen. Bár a Unix socketnek lehet egy kis sebességbeli előnye a TCP sockettel szemben, nem rendelkezik hálózati protokollal, így kihagyja a hálózati vermet (network stack).

A Unix socket megfelelőbb lenne olyan forgatókönyvek esetén, ahol a gazdagépek egyetlen gépen találhatók. Ha azonban a szolgáltatások különböző gazdagépeken futnak, a TCP socket előnye, hogy képes összekapcsolni az elosztott szolgáltatásokat. A mi esetünkben az alkalmazáskonténer egy másik gazdagépen fut, mint a webszerver-konténerünk. Így a konfigurációnkhoz a TCP socket a legmegfelelőbb.

Most megnyomhatja a Ctrl + O billentyűkombinációt a fájl mentéséhez, majd a Ctrl + X billentyűkombinációt a szerkesztőből való kilépéshez. Az nginx/conf.d/ könyvtárban végrehajtott változtatások automatikusan megjelennek a webszerver-konténerben a Docker Compose fájlban hozzáadott bind mountnak köszönhetően a(z) 3. lépésben.

7. lépés: A MySQL konfigurálása

Miután beállítottuk az Nginx-et a PHP-vel való együttműködésre, most konfigurálhatjuk a MySQL-t a dinamikus adatok tárolására és a PHP felé történő kiszolgálására. A Docker Compose fájlt már beállítottuk a PHP és MySQL közötti kommunikációhoz szükséges kiterjesztések telepítésére. A MySQL konfigurációs fájlját, a my.cnf-et a mysql mappán belül fogjuk létrehozni, amely a /etc/mysql/my.cnf útvonalra lesz bind-mountolva, ahogyan azt a Docker Compose db szolgáltatás szakaszában meghatároztuk a(z) 3. lépésben.

A MySQL konfigurációs beállításai és módosításai bármikor elvégezhetők a my.cnf fájlban. Ezeknek azonnal meg kell jelenniük a konténerben. Először hozza létre a könyvtárat a következő parancs beírásával:

Ezután hozza létre és nyissa meg a nano-t a következő parancs beírásával:

Írja be a következő kódrészletet a lekérdezési napló engedélyezéséhez és a lekérdezési naplófájl helyének megadásához:

A general_log tulajdonság 1-re állításával engedélyezi az általános naplókat. A general_log_file tulajdonság határozza meg a naplófájl helyét. Nyomja meg a Ctrl + O billentyűkombinációt a fájl mentéséhez, majd a Ctrl + X billentyűkombinációt a szerkesztőből való kilépéshez.

8. lépés: A Laravel környezeti változóinak beállítása

Eddig a pontig minden szolgáltatás és konfigurációs beállítás elkészült. Így már képesek lennénk telepíteni a konténereinket. Van azonban egy fontos lépés, amelyet el kell végezni, mielőtt a webalkalmazásunk ténylegesen használhatóvá válna – a környezeti változók beállítása. A Laravel keretrendszer egy .env nevű fájlt vár, amelyet a környezetének meghatározásához használ. Alapértelmezés szerint a Laravel tartalmazza a .env.example fájlt, amelyet átmásolhat a .env fájlba, majd módosíthatja a változókat a tényleges adataival. Írja be a következő parancsot a fájl másolásához:

Miután átmásolta, nyissa meg a fájlt a nano segítségével a módosításhoz:

Íme egy képernyőkép arról, hogyan nézhet ki a fájl:

screenshot of what the file

A fájlban a következő lépés a DB_CONNECTION blokk alatti változók módosítása az eddig elvégzett konfigurációknak megfelelően. Frissítse az alábbiak szerint:

  • DB_HOST a db adatbázis-konténer.
  • DB_DATABASE a laravel_web.
  • DB_USERNAME az adatbázis felhasználóneve. Válasszon egy tetszőleges nevet, de a jelen útmutató kedvéért használjuk a következőt: laraveldocker.
  • DB_PASSWORD egy erős jelszó, amelyet a fenti felhasználó fog használni az adatbázisba való bejelentkezéshez, ezért válasszon egy erős jelszót. A(z) 10. lépésben fogjuk létrehozni ezt a felhasználót az itt kiválasztott jelszóval.

A frissített értékekkel a DB_CONNECTION-nek most így kell kinéznie:

DB_CONNECTION

Mentse és zárja be a fájlt.

9. lépés: A Docker konténerek futtatása

Ebben a szakaszban az összes szolgáltatás és konfiguráció meg van határozva a Docker Compose fájlban. Mindössze egyetlen parancs szükséges az összes konténer elindításához, a kötetek létrehozásához, a hálózatok csatlakoztatásához, valamint az alkalmazás beállításához és felépítéséhez. Írja be a következő parancsot a terminálba:

Amikor először futtatja a docker-compose up parancsot, az letölti az összes szükséges Docker-képet. Ha a helyi számítógépén állítja be az infrastruktúrát, ez eltarthat egy ideig. Miután a képek letöltődtek, a Compose létrehozza a konténereket. A -d jelző arra utasítja a Dockert, hogy a konténereket a háttérben futtassa. Ha a folyamat sikeresen befejeződik, valami hasonlót kell látnia a termináljában:

terminal

Írja be a következő parancsot a terminálba az összes futó konténer listázásához:

A következő képernyőképhez hasonlót kell mutatnia, az app, webserver és db konténerek részleteivel:

screenshot details

  • CONTAINER ID – Egy egyedi azonosító minden egyes konténerhez.
  • NAMES – Az egyes konténerekhez társított szolgáltatásnév, a Docker Compose fájlban meghatározottak szerint. (A konténer eléréséhez használhatja a konténer azonosítóját vagy nevét is).
  • IMAGE – Az egyes konténerek képének (image) neve.
  • STATUS – Információkat jelenít meg a konténer állapotáról (ez lehet leállított, futó vagy újrainduló).
  • PORTS – Megmutatja a konténer által közzétett portokat.

A Docker Compose biztosít egy exec nevű parancsot, amellyel terminálparancsokat futtathat, vagy elérheti a parancssort egy konténeren belül. Először néhány parancsot szeretnénk futtatni az app konténerben, amely a Laravel alkalmazást futtató konténer.

A Docker biztosít egy parancsot egy konténer parancssorának eléréséhez. Ennek szintaxisa a következő: docker-compose exec container_name bash. Az app konténer parancssorának eléréséhez írja be a következő parancsot:

Miután a konténer parancssorába lépett, futtathat néhány Laravel Artisan konfigurációs parancsot. Írja be a következő parancsot a laravel kulcs generálásához és a .env fájlba történő mentéséhez:

A környezeti kulcs beállítása után a következő parancs futtatásával gyorsítótárazhatja a konfigurációs beállításokat:

A konfigurációk a konténeren belüli /var/www/html/bootstrap/cache/config.php fájlban tárolódnak. A konténer termináljából való kilépéshez nyomja meg a Ctrl + D billentyűkombinációt.

Annak ellenőrzéséhez, hogy a Laravel alkalmazás telepítve van-e és fut-e, látogasson el a szerverének nyilvános IP-címére a böngészőjében (http://your_server_public_ip). Egy új Laravel telepítés üdvözlőoldalát kell látnia:

laravel screenshot

10. lépés: MySQL felhasználó konfigurálása

Ebben a lépésben létrehozunk egy adatbázis-felhasználót a docker-compose fájlban megadott laravel_web MySQL adatbázishoz. Amikor a konténerépítő parancsot futtatta a 9. lépésben, a MySQL telepítve lett, de csak egy alapértelmezett root adminisztrátori fiókot hozott létre, amely korlátlan jogosultságokkal rendelkezik az adatbázisban. A root felhasználó használatának elkerülése érdekében létrehozunk egy dedikált felhasználót, a laraveldockert, amelyet az alkalmazáshoz használhatunk. Ez az a felhasználó, amelyet a környezeti változókban adott meg a 8. lépésben. Lépjen be a parancssorba a terminálon belül a következő parancs beírásával:

Miután belépett a konténerbe, jelentkezzen be a MySQL-be a következő parancs beírásával:

A jelszóbekérőnél adja meg azt a jelszót, amelyet a docker-compose fájl db szolgáltatásában állított be a 2. lépésben.

Miután bejelentkezett a MySQL parancssorba, ellenőrizze, hogy látja-e a docker-compose fájlban megadott adatbázist a következő SQL parancs beírásával:

Látnia kell a laravel_web adatbázist, vagy bármilyen más nevet, amelyet a beállítás során megadott:

Laravel

Ezután létrehozunk egy felhasználót és jelszót a laravel_web adatbázishoz. Ennek meg kell egyeznie a .env fájlban megadott adatokkal a 8. lépésben. Írja be a következő parancsot a felhasználó és a jelszó létrehozásához, valamint az összes jogosultság megadásához ennek a felhasználónak:

A változtatások azonnali érvénybe lépéséhez adja meg a következő parancsot a jogosultságok ürítéséhez (flush):

Ezzel befejeződött a MySQL felhasználó konfigurálása. Lépjen ki a MySQL parancssorból az exit beírásával és az Enter megnyomásával. Végül lépjen ki a db konténerből a Ctrl + D billentyűkombináció megnyomásával.

11. lépés: A Laravel alkalmazáskód és a MySQL adatbázis közötti kommunikáció tesztelése

Eddig a lépésig minden jól működött. Szeretnénk azonban megbizonyosodni arról, hogy az app konténerben lévő Laravel kód képes kommunikálni a db konténerben lévő MySQL adatbázissal. Először lépjen be az app konténer termináljába a következő parancs beírásával:

Ezután futtassa a laravel migration parancsot, amely létrehozza a táblákat:

A terminálban látnia kell a migrációs folyamatot, ahogy a Laravel létrehozza az alapértelmezett táblákat:

migration process

Ezután teszteljük, hogy elérjük-e az adatbázist a Laravelből. A Laravel alapértelmezés szerint tartalmazza a Tinker eszközt, amely lehetővé teszi, hogy a parancssorból interakcióba lépjen a teljes alkalmazással, beleértve az adatbázis elérését, a feladatok futtatását, az eloquent ORM használatát és még sok mást. A Tinker segítségével megtekinthetjük a migrations táblában lévő adatokat. Írja be a következő parancsot a Tinker eléréséhez:

A Tinker parancssorba lépve a következő parancs beírásával listázhatja a migrate parancs által létrehozott táblákat:

Az alábbi képernyőkép mutatja a kimenetet, amelyek a laravel_web adatbázisban jelenleg megtalálható táblák:

laravel_web database

A táblában lévő adatokat a tábla nevének megadásával kérdezheti le. Például a migrations tábla adatait a következő parancs beírásával kérheti le:

A parancs a következőt adja vissza:

comman output

A fenti kimenetből látható, hogy a Laravel alkalmazás megfelelően van konfigurálva, és képes kommunikálni az adatbázissal. Kísérletezhet további parancsokkal is, mint például modellek létrehozása, feladatok futtatása és még sok más. A Tinker parancssorból a Ctrl + D billentyűkombináció megnyomásával léphet ki.

Összegzés

Ebben az útmutatóban egy LEMP stack Laravel alkalmazást telepített egy Docker konténerbe. Tesztelte az alkalmazást a webes felület elérésével, valamint az adatbázishoz való csatlakozással a Laravel Tinker segítségével. Tapasztalhatta a Docker Compose erejét. Lehetővé teszi egyetlen fájlban meghatározott Docker konténerek csoportjának létrehozását, amelyeket aztán egyetlen paranccsal futtathat.

Ha szeretne jobban megismerkedni a konténerekkel, tekintse meg a Docker-erőforrások – képek, konténerek és kötetek – törlését bemutató útmutatónkat és a Kubernetes eszközről szóló részletes áttekintésünket.

Látogasson el blogunkra is, ha többet szeretne megtudni a Docker és a folyamatos integráció és folyamatos szállítás (CI/CD) témaköréről.

Kellemes kódolást!

author

Pranay Kapgate

Szerző · CloudSigma

Preslav Dobrev a CloudSigma kreatív tervezője, aki hagyományos és innovatív marketingcsatornák segítségével következetes vállalati identitás kialakítására összpontosít. Kiemelkedően képes ötvözni a művészi látásmódot a stratégiai marketinggel, hogy hatásos márkatörténeteket hozzon létre.

Hozzászólások

Még nincsenek hozzászólások. Legyen Ön az első.