Lokális gép, openSUSE, fejlesztői környezetet szeretnénk Laravelhez. Telepítsük a dockert és a docker-compose-t, ha még nem voltak.
Klónoztuk a Laravel-projektünket, de giten kívül nincs más telepítve, se db, se php. Először is szükségünk lesz egy minimál image-re composer és php parancsok futtatásához. Ennek php verziója egyezzen az app által használttal. Itt összevontuk a 3 szükséges init parancsot:
$ cd myproject
$ docker run --rm \
-u (id -u):(id -g) \
-v (pwd):/opt \
-w /opt \
laravelsail/php74-composer:latest \
bash -c "composer require --dev laravel/sail && composer install && php artisan sail:install --with=mariadb"
Létrejött a docker-compose.yml konfig, szerkesszük, ha kell. Részletek erről a konfigról, ha kézzel állítjuk össze, ajánlott olvasmányok:
Például PHP 7.4 és MariaDB 10.5 környezet, mint a Debian 11-ben (webszervernek itt a php beépített szerverét használjuk, annak nincs jelentősége):
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/7.4
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-7.4/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mariadb
mariadb:
image: 'mariadb:10.5'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sail-mariadb:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sail-mariadb:
driver: local
Fontos: a Laravel-projekt .env
konfigjában a DB_HOST
paraméter legyen a docker-compose-beli db-szolgáltatás neve, ami itt mariadb
, az APP_URL
pedig legyen http://localhost
.
APP_NAME=Myapp
APP_ENV=local
APP_KEY=base64:xkvn6VLT8Sw7Dq1m+tkngJz/iODw+m+a+pu9RW3ynQI=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=mydb
DB_USERNAME=myuser
A shellben csináljunk egy sail
aliast erre: ./vendor/bin/sail
. A projektmappában kiadott sail up
parancs után az app máris működik a http://localhost címen.
$ cd myproject
$ sail up -d
$ sail php -v
$ sail node -v
$ sail npm i
$ sail artisan key:gen
$ sail tinker
$ sail shell
Így húzhatunk be sql dumpot (a db jelszó üres, lokál környezetben vagyunk):
$ docker-compose exec -T mariadb mysql -umyuser mydb < database/dump.sql
Ha végeztünk a melóval, akár le is állíthatunk mindent.
$ sail down
# systemctl stop docker
PHPStorm
Állítsuk be az interpretert: a File > Settings > Languages & Frameworks > PHP
panelen a CLI interpreter
-nél ...
, majd +
, majd From Docker, Vagrant...
. Itt válasszuk a Docker Compose
opciót, majd állítsuk be a Server
és a Service
mezőket. A Lifecycle
-nél válasszuk a Connect to existing container
opciót. Ez kész.
Laravel 8-nál downgrade-eljük a PHPUnitot 9-ről 8-ra, mert még 19.2 PHPStormot használunk (hja, drága a licenc), amely nem támogatja a 9-est, el sem indul a teszt. A File > Settings > Languages & Frameworks > PHP > Test Frameworks
panelen +
, majd PHPUnit by remote interpreter
, majd válasszuk ki az előbb hozzáadott interpretert. Kész, működik a shift + F10
.