Vývojové prostředí v Dockeru
Laravix si umí vygenerovat vlastní Docker prostředí: compose.yaml, potřebné konfigurační soubory a odpovídající .env. Jedním příkazem máte databázi, vyhledávání, odchytávač e-mailů, queue worker i scheduler, aniž byste cokoli z toho instalovali na svůj stroj.
Je to nástroj pro lokální vývoj. Není to způsob nasazení do produkce — na to se podívejte do Nasazení do produkce.
Požadavky
- Docker s dostupným
docker compose(funguje i starší binárkadocker-compose) - Nainstalované dev závislosti. Generované kontejnery se buildí z
vendor/laravel/sail/runtimes/8.4, který přichází slaravel/sail— dev závislostí skeletonu. Pokud jste instalovali přescomposer install --no-dev, tahle cesta neexistuje.
Instalace rovnou do kontejnerů
Nejrychlejší cesta je nechat všechno na instalátoru:
composer create-project laravix/laravix my-site
cd my-site
php artisan laravix:install
První otázka instalátoru je, jak chcete Laravix provozovat. Zvolte Docker a instalátor:
- Zeptá se, jakou databázi a jaké další služby chcete a na jakém portu hostitele.
- Vyžádá si název webu, doménu a údaje super admina dopředu — ještě než kontejnery existují.
- Zapíše
compose.yaml,docker/php.ini,.enva konfiguraci databáze. - Vygeneruje aplikační klíč, pokud žádný nemáte.
- Nastartuje kontejnery a počká, až nahlásí, že jsou zdravé.
- Zbytek instalace provede uvnitř kontejneru a vypíše obvyklý přehledový box.
Díky tomu, že se na všechno zeptá před startem kontejnerů, doběhne pak celý proces bez dohledu.
Otázku přeskočíte a rovnou půjdete touhle cestou přes php artisan laravix:install --docker.
Vygenerování prostředí bez instalace
Když chcete jen soubory — prohlédnout si je, upravit, nebo instalovat později:
php artisan laravix:docker
Zeptá se na stejné věci ohledně prostředí, zapíše soubory a skončí. Nic se nespouští, žádné kontejnery se nebuildí.
Na co se vás zeptá
Databáze — jedna z:
| Volba | Kontejner | Poznámka |
|---|---|---|
mysql |
mysql:8.4 |
Výchozí. Zapíše navíc docker/mysql/custom.cnf |
pgsql |
postgres:17 |
|
sqlite |
žádný | Soubor v database/database.sqlite, databázový kontejner vůbec nevznikne |
Další služby — multi-select, takže libovolná kombinace:
| Služba | Kontejner | Co získáte |
|---|---|---|
| Meilisearch | getmeili/meilisearch:latest |
Fulltextové vyhledávání. Nastaví SCOUT_DRIVER=meilisearch |
| Mailpit | axllent/mailpit:latest |
Odchytává odchozí poštu, dashboard na portu 8025 |
| Redis | redis:alpine |
Nastaví CACHE_STORE=redis a SESSION_DRIVER=redis |
| Queue worker | image aplikace | Spouští queue:work --tries=3 --max-time=3600. Generuje varianty obrázků |
| Scheduler | image aplikace | Spouští schedule:work. Publikuje naplánovaný obsah každou minutu |
Worker a scheduler jsou vybrané ve výchozím stavu — právě díky nim fungují varianty obrázků a plánované publikování, aniž byste si museli pamatovat, že máte něco spustit. Vynecháte je přes --no-worker a --no-scheduler.
Port hostitele — port, na kterém web běží, výchozí 80.
Obsazené porty se uhnou
Než cokoli zapíše, příkaz ověří, jestli je každý port, který chce, opravdu volný, a jde po jedničce nahoru, dokud nenajde volný. Týká se to portu webu, portu Vite i všech přesměrovaných portů služeb (databáze, Meilisearch, Mailpit, Redis).
Když něco přesune, řekne to:
Ports already in use, moved: site 80 → 81, db 3306 → 3307.
Laravix tak běží vedle vašich ostatních projektů, aniž byste kolize portů řešili ručně. Výsledné hodnoty se zapíšou do .env jako APP_PORT, VITE_PORT a proměnné FORWARD_*_PORT.
Porty se zkoumají jen tehdy, když ještě žádný compose.yaml neexistuje. Přegenerování stávajícího prostředí ponechá porty, které už máte.
Přepínače
Každá otázka má svůj přepínač, takže se dá celé skriptovat:
php artisan laravix:docker --db=pgsql --search --mail --redis --port=8080
| Přepínač | Efekt |
|---|---|
--db= |
mysql, pgsql nebo sqlite |
--search |
Přidá Meilisearch |
--mail |
Přidá Mailpit |
--redis |
Přidá Redis |
--no-worker |
Vynechá queue worker |
--no-scheduler |
Vynechá scheduler |
--port= |
Port hostitele pro web |
--force |
Přepíše existující compose.yaml |
Stejné přepínače fungují u laravix:install společně s --docker.
Co skončí na disku
| Soubor | Obsah |
|---|---|
compose.yaml |
Služba aplikace plus každá vybraná služba, bridge síť sail, pojmenované volumy a podmínky depends_on |
docker/php.ini |
Přepisy PHP, připojené do konfiguračních adresářů CLI i FPM |
docker/mysql/custom.cnf |
Jen u MySQL |
database/database.sqlite |
Jen u SQLite — vytvoří se prázdný, pokud chybí |
.env |
Připojovací údaje, porty a nastavení driverů podle toho, co jste zvolili |
Služby, které potřebují perzistenci, dostanou pojmenovaný volume (laravix-mysql, laravix-redis, …). Mailpit, worker a scheduler žádný nedostanou — nic z jejich obsahu nestojí za uchování.
Služba aplikace čeká na své závislosti přes depends_on, u čehokoli s healthcheckem podmínkou service_healthy, u zbytku service_started.
Váš stávající .env se zálohuje
Zápis .env nejdřív zkopíruje ten současný do .env.backup a přepíše jen klíče, které Laravix spravuje — zbytek souboru zůstane nedotčený. Když zálohu vytvoří, pojmenuje ji ve výpisu.
Přegenerování
laravix:docker odmítne běžet, když compose.yaml už existuje, takže nikdy tiše nepřepíše prostředí, které jste si doladili:
compose.yaml already exists. Rerun with --force to regenerate it.
S --force si nejdřív přečte váš stávající compose.yaml a použije to, co v něm najde, jako výchozí odpovědi na otázky — databáze a služby, které už máte, se vrátí předvybrané a vaše stávající APP_PORT a VITE_PORT zůstanou. Přidání služby do prostředí je tedy jen:
php artisan laravix:docker --force --redis
Ruční úpravy uvnitř souboru se nezachovají. Přežije jen sada služeb a porty.
Spouštění příkazů v kontejnerech
Když máte vendor/bin/sail, použijte ho:
./vendor/bin/sail artisan migrate
./vendor/bin/sail artisan laravix:user --super
Jinak jděte přes compose přímo:
docker compose exec laravel.test php artisan migrate
Obojí míří na stejný kontejner laravel.test, což je služba aplikace definovaná v compose.yaml.
Řešení problémů
„Missing stubs: services/x." Vyžádali jste si službu, pro kterou Laravix nemá šablonu. Podporovaná sada je MySQL, PostgreSQL, Meilisearch, Mailpit, Redis, worker a scheduler.
„Containers did not become healthy within 180s." Instalátor přestal čekat. Kontejnery možná pořád najíždějí — zkontrolujte docker compose ps a jakmile budou zdravé, dokončete instalaci ručně přes ./vendor/bin/sail artisan laravix:install (nebo formou docker compose exec).
Web běží na jiném portu, než jste zadali. Port byl obsazený a Laravix ho uhnul. Podívejte se na varování ve výpisu, nebo na APP_PORT v .env.
Build padá na vendor/laravel/sail/runtimes/8.4. Nejsou nainstalované dev závislosti. Spusťte composer install bez --no-dev.
Související články
- Instalace
- Příkazy CLI — reference přepínačů
laravix:docker - Nasazení do produkce — produkce, což tohle není
- Fulltextové vyhledávání — konfigurace kontejneru Meilisearch