Vývojář Vývojové prostředí v Dockeru

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árka docker-compose)
  • Nainstalované dev závislosti. Generované kontejnery se buildí z vendor/laravel/sail/runtimes/8.4, který přichází s laravel/sail — dev závislostí skeletonu. Pokud jste instalovali přes composer 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:

  1. Zeptá se, jakou databázi a jaké další služby chcete a na jakém portu hostitele.
  2. Vyžádá si název webu, doménu a údaje super admina dopředu — ještě než kontejnery existují.
  3. Zapíše compose.yaml, docker/php.ini, .env a konfiguraci databáze.
  4. Vygeneruje aplikační klíč, pokud žádný nemáte.
  5. Nastartuje kontejnery a počká, až nahlásí, že jsou zdravé.
  6. 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

Laravix Documentation · 25.08.2026
Star on GitHub