Laravel Sail: повний гайд з локального стеку
Laravel Sail — обгортка над Docker Compose для типового застосунку Laravel: PHP-FPM (laravel.test), СУБД, Redis, Meilisearch, Selenium тощо. Призначення — локальна розробка (і CI з Compose), а не готова продакшен-платформа. Нижче — типові налаштування та межа, де Sail закінчується, а починається реальний деплой.
Серія: Бази даних і Docker-сервіси · Черги та воркери · Оточення та деплой · Діагностика · Усі інструменти
Зміст
- Що таке Sail (і чим не є)
- Вимоги та модель
- Аліас і щоденні команди
- Змінити версію PHP
- Сервіси за замовчуванням і
sail:install - Додати Redis, якщо немає
- RabbitMQ і черги
- З MySQL на PostgreSQL
- MongoDB (контейнер + Laravel)
- Черги: драйвери, воркери, Sail
- Пошта та Mailpit
- Томи та продуктивність (WSL2 / macOS)
- Xdebug
- Кастомізація
docker-compose.yml - Файли оточення
- Локально проти dev/staging/production
- Чеклист проблем
Що таке Sail (і чим не є)
- Це: опублікований
docker-compose.yml, Dockerfile’и зvendor/laravel/sail/runtimes/…і скрипт./vendor/bin/sailу репозиторії післяphp artisan sail:install. - Не це: хостинг. На сервері часто Docker/K8s, але Sail у production зазвичай не запускають — там образи, оркестрація, health checks, секрети та supervisor для черг.
Sail — відтворюване dev-оточення, частково схоже на прод (розширення PHP, той самий рушій БД), але не копія мережі та масштабу.
Вимоги та модель
- Docker і Compose v2.
- WSL2: тримайте проєкт у файловій системі Linux (
~/projects/...), не наC:\, інакше bind mount гальмує. - Команди — всередині контейнерів:
sail artisan …,sail composer ….
Аліас і щоденні команди
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'
Далі: sail up -d, sail artisan migrate, sail npm run dev, sail shell, sail down.
Змінити версію PHP
- За потреби:
sail artisan sail:publish. - У
docker-compose.ymlдляlaravel.testуbuild.argsвстановітьPHP_VERSION(наприклад8.4) згідно з підтримкою вашої версії Sail. sail build --no-cache, потімsail up -d.- Перевірка:
sail php -v.
У власному Dockerfile оновіть FROM на актуальний образ laravel/sail-php/... з GitHub Sail.
Сервіси за замовчуванням і sail:install
php artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium
Якщо Redis не встановлювали, а в .env лишився REDIS_HOST=redis, або додайте сервіс, або змініть хост (краще для паритету — контейнер Redis).
Додати Redis, якщо немає
Додайте сервіс redis у docker-compose.yml (образ redis:alpine, порт, том sail-redis, мережа sail, за бажанням healthcheck), оголосіть том унизу файлу, за потреби depends_on у laravel.test. У .env: REDIS_HOST=redis, REDIS_PORT=6379. Потім sail up -d і sail exec redis redis-cli ping.
RabbitMQ і черги
У ядрі Laravel немає вбудованого драйвера RabbitMQ — потрібен пакет AMQP і контейнер RabbitMQ (наприклад rabbitmq:3-management-alpine, порти 5672 та 15672 для UI). У .env хост rabbitmq, облікові дані, QUEUE_CONNECTION за документацією пакета. Після встановлення пакета: sail artisan queue:work rabbitmq. UI на 15672 допомагає дивитися черги та dead letter.
З MySQL на PostgreSQL
Замініть сервіс БД у compose на pgsql за шаблоном Sail, оновіть depends_on, .env: DB_CONNECTION=pgsql, DB_HOST=pgsql, порт 5432. sail down -v або міграція даних; далі sail up -d, migrate:fresh для чистої dev-БД. pdo_pgsql у типових образах Sail уже є.
MongoDB (контейнер + Laravel)
Додайте сервіс mongo, том, за потреби проброс порту. Зазвичай використовують mongodb/laravel-mongodb — часто потрібен pecl install mongodb у Dockerfile Sail і пересборка. З контейнера додатку хост — ім’я сервису (mongo). Міграції та транзакції відрізняються від SQL — дивіться документацію пакета.
Черги: драйвери, воркери, Sail
sync— синхронно, для простої відладки.database/redis:sail artisan queue:work, кілька черг:--queue=high,default.- Horizon: локально
sail artisan horizon; на проді — supervisor або хмарний воркер. - Після змін коду:
queue:restartабо обмеження--max-jobs. - RabbitMQ: інша семантика повторів і DLX — перевіряйте тестами.
Пошта та Mailpit
MAIL_HOST / MAIL_PORT на сервіс mailpit з compose; веб-UI на проброшеному порту — перегляд листів без реальної відправки.
Томи та продуктивність (WSL2 / macOS)
Повний bind mount репозиторію на macOS і з диска Windows у WSL2 часто повільний; код — у Linux FS. Іменовані томи зберігають дані БД/Redis після sail down; sail down -v їх видаляє.
Xdebug
Увімкнення через змінні Sail (див. README), наприклад SAIL_XDEBUG_MODE=debug,develop. Мапінг шляхів IDE ↔ контейнер. Для черг — підключення до контейнера з queue:work.
Кастомізація docker-compose.yml
Імена сервісів = хости в .env. Секрети через ${VAR}. Додаткові сервіси — у мережі sail. Після змін: sail build && sail up -d.
Файли оточення
.env локально не в git; .env.example — шаблон. Опційно env_file у compose. У CI — змінні в pipeline; тести з .env.testing. FORWARD_* порти, щоб проєкти не конфліктували.
Локально проти dev/staging/production
| Тема | Sail | Типовий сервер |
|------|------|----------------|
| Процеси | sail up | php-fpm + nginx / Octane |
| Черги | Термінал | Supervisor / хмара |
| TLS | localhost | Реальні сертифікати |
| Секрети | Файл | Vault / параметри |
| Масштаб | 1 контейнер на сервіс | Репліки, LB, managed сервіси |
Окремо перевіряйте воркери, cron schedule:run, OPcache, S3.
Чеклист проблем
Права на storage/ / bootstrap/cache/; хост БД/Redis — ім’я сервису, не 127.0.0.1; після Dockerfile — build --no-cache; зайняті порти — FORWARD_*; залежності — sail composer install.
Підсумок
Інвестиція в чистий docker-compose.yml і .env.example окупається синхроном команди. Продакшен (моніторинг, бекапи, supervisor, секрети) проектуйте окремо й переносьте в Sail лише те, що потрібно для реалістичної локальної роботи.