Sail: діагностика та продуктивність
Тут зібрано часті тертя Sail, які не є «багами Laravel»: ФС, мережа Compose, кеш образів і розширення PHP в контейнерах. Читайте разом із БД і сервісами, Чергами та Оточенням і деплоєм.
Навігація: Усі інструменти · Sail · БД · Черги · Env
Зміст
- WSL2, Docker Desktop і синхронізація файлів
- Права,
storageіvendor - Порт зайнятий /
FORWARD_* - «На хості працює, у Sail — ні»
- Застарілий код: перезбірка й шари
- OPcache й автозавантаження в dev
- Xdebug гальмує
- Vite, npm, Node зовні й усередині Sail
- Логи й швидка діагностика
- Коли скидати томи (втрата даних)
WSL2, Docker Desktop і синхронізація файлів
На Windows + WSL2 монтування з /mnt/c/... у Linux-контейнери часто повільне і ламає вотчери (Vite). Тримайте проєкт у ФС WSL (наприклад ~/projects/...).
Якщо редактор у Windows чіпає файли через межу WSL, можливі права чи час модифікації — домовтеся про одне місце правок.
Права, storage і vendor
Laravel потребує запису в storage/ і bootstrap/cache/ для користувача PHP в laravel.test. На Linux-хості маппінг UID/GID через WWWUSER / WWWGROUP у .env зменшує файли «від root» після sail artisan.
sail exec laravel.test ls -la storage bootstrap/cache
Якщо логи не пишуться, виправляйте власника всередині контейнера.
Порт зайнятий / FORWARD_*
Sail пробросить MySQL, Redis, HTTP на localhost. Другий MySQL або другий проєкт — address already in use.
FORWARD_DB_PORT=3307
APP_PORT=8081
FORWARD_REDIS_PORT=6380
Потім sail down && sail up -d. Усередині контейнерів порти 3306/6379 не змінюються. Детальніше: Оточення та деплой.
«На хості працює, у Sail — ні»
php / composer на хості — одна версія та розширення; sail artisan — інша (контейнер). Відсутність pdo_pgsql, redis, mongodb у образі — типова причина. Рішення: Dockerfile + sail build --no-cache.
Хости БД в .env — імена сервісів (pgsql, redis), не 127.0.0.1. Див. БД.
Застарілий код: перезбірка й шари
Після змін у Dockerfile:
sail build --no-cache
sail up -d
Після composer.lock: sail composer install. Воркери черг: sail artisan queue:restart (Черги).
OPcache й автозавантаження в dev
Якщо зміни коду «не видно», перевірте validate_timestamps / opcache.revalidate_freq у php.ini контейнера. Після PSR-4-переїздів: sail composer dump-autoload.
Xdebug гальмує
Xdebug завжди додає накладні витрати. Вимикайте без потреби в breakpoints.
Vite, npm, Node зовні й усередині Sail
npm run dev на хості або sail npm у Compose — головне, щоб APP_URL, HMR і порти збігалися. Див. Env.
Логи й швидка діагностика
sail logs -f laravel.test
docker compose ps
sail exec laravel.test php -v
sail exec laravel.test php -m
Redis: sail exec redis redis-cli ping.
Коли скидати томи (втрата даних)
sail down -v знімає іменовані томи — дані БД/Redis проєкту зникнуть. Один том: docker volume rm. Див. Томи.