Nainštalovať Magento so všetkými potrebnými servismi a serverovými nastaveniami, ktoré sú vzájomne kompatibilné, je niekedy celkom výzva. Keď som ho inštaloval na náš dev server, vždy som k tomu potreboval kolegu, linuxáka, pretože s tými serverovými vecami som si sám nevedel rady. Tento problém rieši Docker.

V tomto článku sa nebudem venovať vysvetľovaniu toho, čo Docker vlastne je. Pre mňa samého je to pomerne nová vec a s Dockerom viem robiť iba základné veci. Zameriam sa na postup, ako si v priebehu pár minút rozbehať Magento na svojom localhoste tak, aby si sa čo najskôr mohol začať učiť alebo pracovať na reálnom shope.

Prosím ťa, neber to ako podrobný návod. Celá táto problematika je pomerne rozsiahla a keby som chcel napísať kompletný postup, bol by to obrovský článok. Navyše na odkaze nižšie je všetko napísané oveľa podrobnejšie (v angličtine). Môj návod je omnoho stručnejší, predpokladá tvoje základné znalosti a má za cieľ popísať riešenia vecí, s ktorými som mal ja problémy.

Vychádzam z tohto projektu (https://github.com/markshust/docker-magento), kde je celý Docker image so všetkým, čo potrebuješ. Ja popíšem svoju minimálnu inštaláciu, aj s niektorými základnými vychytávkami, ktoré som musel prácne vyhľadať buď vo videonávodoch alebo na iných stránkach.

Pred samotnou inštaláciou treba mať nainštalovaný Docker Desktop a zastavené akékoľvek iné inštancie Apache, Nginx, MySQL a podobne, pretože táto Docker inštalácia používa defaultné porty.

Inštalácia

Vo svojom home adresári si vytvor podadresár. Napr. ~/Sites/magento. Musí to byť podadresár v home adresári kvôli právam.

Vôjdi do adresára magento a spusti tento príkaz

curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/onelinesetup | bash -s — magento.test 2.4.6-p3 community

magento.test je doména, na ktorej bude dostupné tvoje Magento. Odporúča sa doména .test, pretože tam nenastane konflikt s inou možnou doménou

2-4-6-p3 je verzia Magenta, ktorú ideme inštalovať

community je open source verzia

Po dokončení tohoto príkazu je Magento nainštalované, Docker containery spustené a po navigácii na https://magento.test/ uvidíš čisté Magento.

Sample data

Keď si v hlavnom adresári, máš k dispozícii niekoľko helper scriptov v priečinku bin. Medzi inými napr. aj bin/magento. Keď chceš teda nainštalovať sample data, môžeš priamo z terminálu z adresára magento spustit

bin/magento sampledata:deploy

bin/magento setup:upgrade

Zároveň môžeš vypnúť 2FA, aby si nemusel pri prihlasovaní do adminu zadávať kód z autentifikátora

bin/magento module:disable Magento_TwoFactorAuth Magento_AdminAdobeImsTwoFactorAuth

Admin

Do adminu sa dostaneš po navigácii na https://magento.test/admin. Prihlasovacie údaje nájdeš v env/magento.env. S najväčšou pravdepodobnosťou to budú tieto

User: John.smith

Password: password123

Email

Veľmi príjemne som bol prekvapený, že táto inštalácia má v sebe aj jednoduchého SMTP klienta a máš tak k dispozícii všetky maily, ktoré odosiela Magento. Napr. pri dokončení objednávky. Stačí, keď v browseri prejdeš na http://magento.test:1080/.

Pokiaľ by si chcel, aby ti maily prišli priamo na tvoj email, môžeš si nainštalovať tento extension https://github.com/mageplaza/magento-2-smtp. Jedinou nevýhodou je, že sa ti nebudú zobrazovať obrázky v mailoch.

Modul nainštaluješ cez helper script pomocou

bin/composer require mageplaza/module-smtp

Potom môžeš využiť napr. svoj Gmail účet na odosielanie emailov.

Composer authentication

S composerom súvisí aj autentifikácia. Niektoré extensions stiahnuté priamo z Magento marketplace si totiž vyžadujú autentifikačné kľúče. Tie si môžeš vytvoriť na https://commercemarketplace.adobe.com/. Takto získaš public a private key, ktoré potom zadáš do auth.json súboru.

V adresári src je auth.json.sample. Ten premenuj na auth.json a vyplň práve vytvorené kľúče. Potom ti už ostáva iba spustiť príkaz

bin/copytocointaner auth.json, ktorý skopíruje tento súbor do Docker containera.

Databáza

Ak sa potrebuješ prihlásiť do grafického rozhrania databázy, máš k dispozícii PhpMyAdmin na adrese http://localhost:1080. 

Ak chceš použiť nejaký externý software, ja odporúčam Sequel Ace. Spočiatku som mal problém s prihlásením sa, pretože ako host name som použil názov Docker containera (db). Napokon som na to došiel. Ako host bolo treba uviesť doménu, pod ktorou som nainštaloval Magento. Čiže v mojom prípade

Host: magento.text

Usera, heslo, názov databázy a port nájdeš v env/db.env.

Xdebug

Xdebug je veľký pomocník pri debuggovaní PHP kódu. Umožňuje ti zastaviť si tok kódu na konkrétnom riadku v PHP súbore a postupne krokovať. Máš k dispozícii všetky premenné, ktoré dokonca môžeš meniť za behu. Vidíš tak presne, čo sa deje s tvojim kódom a ľahšie nájdeš prípadnú chybu.

Xdebug je priamo súčasťou tohto Docker imagu, avšak nie je defaultne zapnutý. Na manipuláciu s Xdebug existujé helper script bin/xdebug.

Príkazom bin/xdebug status 

Zistíš aktuálny stav Xdebug (enabled / disabled)

a príkazom bin/xdebug enable ho zapneš.

Ja som celý tento proces musel absolvovať 2-krát, pretože pri prvom spustení bin/xdebug enable a následnom bin/xdebug status mi stále hlásilo, že je vypnutý.

Ako ďalšiu vec, treba nainštalovať do tvojho vývojového prostredia Xdebug extension. Ja používam Visual Code Studio a extension je dostupná na tejto adrese https://marketplace.visualstudio.com/items?itemName=xdebug.php-debug.

Ďalej treba nainštalovať extension do Chromu – https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc – a v nastavení tejto extension nastaviť PHP IDE Key. Mala by tam byť defaultne hodnota PHPSTORM, ktorá je správna aj v prípade, ak používaš VS Code. Pokiaľ by ti to nesedelo, treba si pozrieť toto nastavenie, potom nastavenie v php.ini a taktiež vo VS Code.

Pri samotnom debuggovaní treba mať v Chrome zapnutú túto extension, nastaviť vo VS Code breakpoint a tiež sa uistiť, že nemáš zapnutú full page cache. V takom prípade sa totiž beh skriptu zastaví na breakpointe iba prvýkrát. 

Podrobnejší návod v angličtine nájdeš v dokumentácii tohoto Docker imagu.

RabbitMq

RabbitMq je ďalší zo servisov, ktoré Magento využíva, je to message broker. Pristavím sa najprv pri tom, prečo ho tu spomínam. Vytvoril som si Paypal Sandbox účet a chcel som dokončiť objednávku cez Paypal. Bohužiaľ v poslednom kroku som dostal chybu a v konzole som našiel hlášku 

Uncaught PhpAmqpLib\Exception\AMQPProtocolChannelException: NOT_FOUND – no exchange ‚magento‘ in vhost magento paypal

Z tejto hlášky mi bolo jasné, že ide o nejaký problém práve s RabbitMq.

Zistil som teda, že cez http://localhost:15672, s prihlasovacími údajmi z env/rabbitmq.env sa viem prihlásiť priamo do administrácie RabbitMq. Tam som klikol na exchanges a zistil som, že naozaj tam neexistuje exchange s názvom magento.

Riešenie bolo veľmi jednoduché. V konzole som spustil bin/magento setup:upgrade, čo daný exchange vytvorilo a potom mi išla dokončiť aj objednávka cez Paypal.

Záverom

Ak si prešiel celým postupom, mal by si mať rozbehané funkčné Magento so sample datami a základnými komponentami, tak aby si mohol čo najrýchlejšie programovať rozšírenia a nové moduly. Odporúčam, prejsť si celý postup ešte párkrát, aby si si celý proces zaizoval a bol si v budúcnosti schopný rozbehať nový projekt za pár minút.

Ak si mal s niečim problém, odporúčam hľadať najprv v dokumentácii v repozitári tohto Docker imagu. Ak nenájdeš tam, skús trochu pogoogliť a ak stále nenájdeš riešenie, spoj sa so mnou. Možno ti budem schopný pomôcť.