Laravel Sail
Rozběhnout Laravel v Dockeru bylo často nad síly mnoha vývojářů a určitě nejeden toho zanechal z důvodu velké komplexnosti a ne zrovna nejjednodušší učící se křivky. Tak tomu bylo alespoň dosud. 8. prosince 2020 Taylor Otwell oznámil spuštění Laravel Sail, vývojového prostředí běžícího v Dockeru.
Sail se tak přiřadil k řadě oficiálních řešení jako jsou Homestead či Valet a nahradil komunitní projekty jako jsou Laragon, Laradock, Takeout či Vessel. Laravel Sail využívá soubor docker-compose.yml
a sail skript, který je uložen ve vendor adresáři projektu v vendor/bin/sail
. Sail skript nabízí CLI s jednoduchými metodami pro práci s Docker kontejnery definovány v souboru docker-compose.yml
. V tomto článku si představíme jak rozběhnout úplně nový Laravel projekt.
Prerekvizity
Aby jste mohli rozjet Laravel Sail, tak jediné co budete potřebovat je mít nainstalovaný Docker a Docker Compose (v desktopové verzi je již rovnou nainstalován i Compose). Pokud nevíte co je Docker nebo jak funguje, doporučuji se podívat na oficiální dokumentaci Dockeru nebo si přečíst skvělou sérii článků od Yannicka.
Instalace
Pro vytvoření nového Laravel projektu nám stačí jednoduchý konzolový příkaz. Například chceme vytvořit novou Laravel aplikaci v adresáři "docker-app", do konzole stačí napsat toto:
curl -s "https://laravel.build/docker-app" | bash
Samozřejmě si můžete namísto "docker-app" zvolit cokoliv jiného. Laravel aplikace se pak automaticky nahraje do tohoto adresáře.
Když vytváříte novou Laravel aplikaci přes Sail, můžete přidat slovo "with" pro výběr služeb, které mají být nakonfigurovány v docker-compose.yml
. Možné služby jsou mysql
, pgsql
, redis
, memcached
, meilisearch
, selenium
či mailhog
:
curl -s "https://laravel.build/example-app?with=mysql,redis" | bash
Pokud nespecifikujete jakou službu chcete nakonfigurovat, pak se automaticky nastaví stack mysql
, redis
, meilisearch
, mailhog
a selenium
.
Skvělou věcí je jednoduchost spuštění. Defaultně jsou Sail příkazy spuštěny přes vendor/bin/sail
skript, který je zahrnutý ve všech nových Laravel aplikacích, nicméně pro ulehčení si můžeme přidat Bash alias pro rychlejší psaní Sail příkazů:
alias sail='bash vendor/bin/sail'
Příkaz prakticky dělá pouze to, že sail
míří do skriptu vendor/bin/sail
, takže můžete volat Sail příkazy bez nutnosti psát stále dokola vendor/bin
.
Laravel Sail příkazy
Před samotným spuštěním je potřeba zmínit a zdůraznit, že je nutné se ujistit, že vám neběží žádné jiné web servery nebo databáze. Pro spuštění Docker kontejnerů definovaných v docker-compose.yml
stačí v nově vytvořeném adresáři zadat příkaz up
:
sail up
To spustí stahování a extrahování všech potřebných Docker images a nastaví kompletní vývojové prostředí:
První inicializace může trvat i několik minut, nicméně další spuštění budou již probíhat mnohokrát rychleji. Docker kontejnery můžete také spustit na pozadí pomocí flagu -d
, které znamená detached
:
sail up -d
Jakmile spustíte sail up
, můžete navštívit IP adresu 127.0.0.1
nebo localhost
a uvidíte uvítací stránku Laravelu. A to je vše, nic dalšího není potřeba nastavovat.
Také můžete spustit příkaz docker ps -a
pro zobrazení všech Docker kontejnerů, které se díky Laravel Sail spustily:
Pro případ ukončení běžících kontejnerů stačí stisknout Control + C
nebo pokud pokud vám běží kontejnery na pozadí, stačí napsat příkaz:
sail down
Můžete také spuštět PHP, Composer, Artisan či NPM příkazy. Například PHP příkaz může vypadat takto:
sail php --version
Nebo pokud chcete spustit nějaký Laravel Artisan příkaz, který byste normálně spustili třeba takto php artisan migrate
, pak v Sailu to provedete úplně stejně, jen začnete prefixem sail
:
sail artisan migrate
Závěr
Laravel Sail je určitě něco, co dosud v oficiálním ekosystému chybělo a také mnohokrát ulehčuje se serverovým nastavením nebo instalací dalších balíčků jako jsou PHP, MySQL, Nginx, Composer atd.
Pro více informací doporučuji shlédnout následující video nebo si přečíst oficiální Laravel Sail dokumentaci. Také na stránkách hackernoon.com najdete vyčerpávající článek o Laravel Sail, kde se rozebírají snad všechny detaily tohoto balíčku.