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. enter image description here 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í: enter image description here 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

enter image description here 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: enter image description here 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.