Laravel Sail: пълен гайд за локалния стек
Laravel Sail е обвивка върху Docker Compose за типично Laravel приложение: PHP-FPM (laravel.test), СУБД, Redis, Meilisearch, Selenium и др. Целта е локална разработка (и CI с Compose), не готова продукционна платформа. По-долу са чести персонализации и границата, където Sail свършва и започва реалният деплой.
Серия: Бази данни и Docker услуги · Опашки и workers · Среди и деплой · Диагностика · Всички инструменти
Съдържание
- Какво е Sail (и какво не е)
- Изисквания и модел
- Псевдоним и ежедневни команди
- Смяна на версия PHP
- Услуги по подразбиране и
sail:install - Добавяне на Redis
- RabbitMQ и опашки
- От MySQL към PostgreSQL
- MongoDB (контейнер + Laravel)
- Опашки: драйвери, workers, 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 разширения, същият DB engine), но не копие на мрежата и мащаба.
Изисквания и модел
- 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, или добавете услугата, или сменете хоста (за паритет предпочитайте контейнер).
Добавяне на Redis
Добавете услуга redis в docker-compose.yml (redis:alpine, порт, том sail-redis, мрежа sail, по желание healthcheck), декларирайте тома в volumes:, при нужда 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
Сменете DB услугата в compose с pgsql шаблон от Sail, depends_on към pgsql, .env: DB_CONNECTION=pgsql, DB_HOST=pgsql, порт 5432. sail down -v или миграция на данни; после sail up -d, migrate:fresh за чиста dev БД. pdo_pgsql е в типичните Sail образи за PostgreSQL.
MongoDB (контейнер + Laravel)
Добавете услуга mongo, том, по желание порт за Compass. Обикновено mongodb/laravel-mongodb — често pecl install mongodb в Sail Dockerfile и rebuild. От контейнера на приложението хостът е името на услугата (mongo). Миграции и транзакции се различават от SQL — вижте документацията на пакета.
Опашки: драйвери, workers, Sail
sync— синхронно за прости тестове.database/redis:sail artisan queue:work, няколко опашки:--queue=high,default.- Horizon: локално
sail artisan horizon; на прод — supervisor или облачен worker. - След промени в код:
queue:restartили--max-jobs. - RabbitMQ: различна семантика на повторения и DLX — тествайте изрично.
Поща и Mailpit
MAIL_HOST / MAIL_PORT към mailpit от compose; уеб UI на пробросен порт — преглед на писма без реална изпращане.
Томове и производителност (WSL2 / macOS)
Пълен bind mount на repo на macOS и от Windows диск в WSL2 често е бавен; кодът — в Linux FS. Именуваните томове запазват данни след sail down; sail down -v ги изтрива.
Xdebug
Чрез променливи на Sail (виж README), напр. SAIL_XDEBUG_MODE=debug,develop. Мапване пътища IDE ↔ контейнер. За опашки — attach към контейнера с 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 DB/Redis |
Отделно проверявайте workers, cron scheduler, OPcache, S3.
Отстраняване на проблеми
Права storage/ / bootstrap/cache/; хост БД/Redis — име на услуга, не 127.0.0.1; след Dockerfile — build --no-cache; заети портове — FORWARD_*; зависимости — sail composer install.
Обобщение
Един ясен docker-compose.yml и .env.example спестяват време на целия екип. Продукцията (мониторинг, backup, supervisor, тайни) проектирайте отделно и пренасяйте в Sail само нужното за реалистична локална работа.