Введение
Laravel Sail – это инструмент командной строки для взаимодействия со средой разработки Docker. Sail обеспечивает отличную отправную точку для создания приложения Laravel с использованием PHP, MySQL и Redis. Опыт работы с Docker не требуется.
По сути, Sail – это файл docker-compose.yml
, который хранится в корне вашего проекта и набор скриптов sail
, при помощи которых можно управлять docker-контейнерами, определёнными в docker-compose.yml
.
Laravel Sail поддерживается в macOS, Linux и Windows (через WSL2).
Установка и настройка
Laravel Sail автоматически устанавливается со всеми новыми приложениями Laravel, поэтому вы можете сразу же начать его использовать. Чтобы узнать, как создать новое приложение Laravel, обратитесь к документации по установке Laravel для вашей операционной системы. Во время установки вам будет предложено выбрать, с какими службами, поддерживаемыми Sail, ваше приложение будет взаимодействовать.
Установка в новое приложение:
curl -s "https://laravel.build/example-app?with=mysql,redis" | bash
Без with
будет создан набор по умолчанию – mysql, redis, meilisearch, mailhog и selenium.
Установка Sail в существующее приложение
с помощью Composer:
composer require laravel/sail --dev
После установки Sail вы можете запустить Artisan-команду sail: install
. Эта команда опубликует файл Sail docker-compose.yml
в корень вашего приложения:
php artisan sail:install
Запуск контейнеров:
./vendor/bin/sail up
Настройка Bash-псевдонимов
По умолчанию команды Sail вызываются с помощью скрипта vendor/bin/sail
:
./vendor/bin/sail up
Однако вместо того, чтобы многократно вводить vendor/bin/sail
, вы можете создать псевдоним (alias) Bash:
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
После настройки псевдонима Bash вы можете выполнять команды Sail, просто набрав sail
. В остальных примерах из этой документации предполагается, что вы настроили этот псевдоним:
sail up
Список команд
Usage:
sail COMMAND [options] [arguments]
Unknown commands are passed to the docker-compose binary.
docker-compose Commands:
sail up
Start the application
sail up -d
Start the application in the background
sail stop
Stop the application
sail restart
Restart the application
sail ps
Display the status of all containers
Artisan Commands:
sail artisan
… Run an Artisan command
sail artisan queue:work
PHP Commands:
sail php
… Run a snippet of PHP code
sail php -v
Composer Commands:
sail composer
… Run a Composer command
sail composer require laravel/sanctum
Node Commands:
sail node
… Run a Node command
sail node –version
NPM Commands:
sail npm
… Run a npm command
sail npx Run a npx command
sail npm run prod
PNPM Commands:
sail pnpm
… Run a pnpm command
sail pnpx Run a pnpx command
sail pnpm run prod
Yarn Commands:
sail yarn
… Run a Yarn command
sail yarn run prod
Bun Commands:
sail bun
… Run a bun command
sail bunx Run a bunx command
sail bun run prod
Database Commands:
sail mysql
Start a MySQL CLI session within the ‘mysql’ container
sail mariadb
Start a MySQL CLI session within the ‘mariadb’ container
sail psql
Start a PostgreSQL CLI session within the ‘pgsql’ container
sail redis
Start a Redis CLI session within the ‘redis’ container
Debugging:
sail debug
… Run an Artisan command in debug mode
sail debug queue:work
Running Tests:
sail test
Run the PHPUnit tests via the Artisan test command
sail phpunit … Run PHPUnit
sail pest … Run Pest
sail pint … Run Pint
sail dusk Run the Dusk tests (Requires the laravel/dusk package)
sail dusk:fails Re-run previously failed Dusk tests (Requires the laravel/dusk package)
Container CLI:
sail shell
Start a shell session within the application container
sail bash Alias for ‘sail shell’
sail root-shell Start a root shell session within the application container
sail root-bash Alias for ‘sail root-shell’
sail tinker Start a new Laravel Tinker session
Sharing:
sail share
Share the application publicly via a temporary URL
sail open Open the site in your browser
Binaries:
sail bin
… Run Composer binary scripts from the vendor/bin directory
Customization:
sail artisan sail:publish
Publish the Sail configuration files
sail build --no-cache
Rebuild all of the Sail containers
Дополнительно
В ряде случаев, из-за специфики проекта, понадобится редактировать настройки контейнеров, которые недоступны в docker-compose.yml. Для таких целей есть команда переноса файлов Dockerfile в проект из пакета sail:
sail artisan sail:publish
Эта команда скопирует файлы Dockerfile из пакета sail в ваш проект. И вы сможете произвести необходимые модификации (не забывая указать верный контекст в docker-compose.yml там, где следует).
Также интересной особенностью sail является возможность показать сайт с вашей машины кому-либо удаленно. Это можно осуществить командой sail share, которая сделает доступным ваш сайт на поддомене laravel-sail.site.