Laravel Sail
- Вступ
- Встановлення та налаштування
- Запуск і зупинка Sail
- Виконання команд
- Взаємодія з базами даних
- Зберігання файлів
- Запуск тестів
- Попередній перегляд електронних листів
- Контейнер CLI
- Версії PHP
- Версії Node
- Поширення Вашого Сайту
- Налагодження з Xdebug
- Налаштування
Вступ
Laravel Sail — це легкий інтерфейс командного рядка для взаємодії з типовим середовищем розробки Docker у Laravel. Sail надає чудову відправну точку для створення застосунку Laravel з використанням PHP, MySQL та Redis без необхідності попереднього досвіду роботи з Docker.
У своїй основі, Sail - це файл docker-compose.yml та скрипт sail, що зберігається в корені вашого проекту. Скрипт sail надає CLI з зручними методами для взаємодії з контейнерами Docker, визначеними у файлі docker-compose.yml.
Laravel Sail підтримується на macOS, Linux та Windows (через WSL2).
Встановлення та налаштування
Laravel Sail автоматично встановлюється з усіма новими застосунками Laravel, тому ви можете почати використовувати його негайно.
Встановлення Sail у існуючі застосунки
Якщо ви зацікавлені у використанні Sail з існуючим Laravel застосунком, ви можете просто встановити Sail за допомогою менеджера пакетів Компонувальник. Звісно, ці кроки передбачають, що ваше існуюче локальне середовище розробки дозволяє вам встановлювати залежності Компонувальника:
composer require laravel/sail --dev
Після встановлення Sail ви можете виконати Artisan команду sail:install. Ця команда опублікує файл Sail docker-compose.yml у корені вашого застосунку та змінить ваш файл .env з необхідними змінними середовища для підключення до Docker сервісів:
php artisan sail:install
Нарешті, ви можете запустити Sail. Щоб продовжити вивчення використання Sail, будь ласка, продовжуйте читати решту цієї документації:
./vendor/bin/sail up
Якщо ви використовуєте Docker Desktop для Linux, вам слід використовувати Docker контекст default, виконавши наступну команду: docker context use default.
Додавання додаткових сервісів
Якщо ви хочете додати додаткову службу до вашої існуючої інсталяції Sail, ви можете виконати команду Artisan sail:add:
php artisan sail:add
Використання Devcontainers
Якщо ви хочете розробляти в межах Devcontainer, ви можете надати опцію --devcontainer до команди sail:install. Опція --devcontainer вкаже команді sail:install опублікувати типовий файл .devcontainer/devcontainer.json у корені вашого застосунку:
php artisan sail:install --devcontainer
Перебудова зображень Sail
Іноді ви можете захотіти повністю перебудувати ваші образи Sail, щоб переконатися, що всі пакети та програмне забезпечення образу оновлені. Ви можете зробити це за допомогою команди build:
docker compose down -v
sail build --no-cache
sail up
Налаштування Псевдоніма Shell
За замовчуванням команди Sail викликаються за допомогою скрипта vendor/bin/sail, який включений у всі нові Laravel застосунки:
./vendor/bin/sail up
Однак, замість того, щоб постійно вводити vendor/bin/sail для виконання команд Sail, ви можете налаштувати shell-аліас, який дозволить вам виконувати команди Sail більш зручно:
alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'
Щоб переконатися, що це завжди доступно, ви можете додати це до вашого файлу конфігурації shell у вашій домашній директорії, наприклад, ~/.zshrc або ~/.bashrc, а потім перезапустити ваш shell.
Після того як псевдонім оболонки налаштовано, ви можете виконувати команди Sail, просто вводячи sail. Решта прикладів у цій документації припускатиме, що ви налаштували цей псевдонім:
sail up
Запуск і зупинка Sail
Файл docker-compose.yml Laravel Sail визначає різноманітні Docker-контейнери, які працюють разом, щоб допомогти вам створювати Laravel-застосунки. Кожен з цих контейнерів є записом у конфігурації services вашого файлу docker-compose.yml. Контейнер laravel.test є основним контейнером застосунку, який буде обслуговувати ваш застосунок.
Перш ніж запускати Sail, слід переконатися, що на вашому локальному комп'ютері не запущені інші веб-сервери або бази даних. Щоб запустити всі контейнери Docker, визначені у файлі docker-compose.yml вашого застосунку, слід виконати команду up:
sail up
Щоб запустити всі Docker-контейнери у фоновому режимі, ви можете запустити Sail у "від'єднаному" режимі:
sail up -d
Як тільки контейнери застосунку будуть запущені, ви можете отримати доступ до проекту у вашому веб-браузері за адресою: http://localhost.
Щоб зупинити всі контейнери, ви можете просто натиснути Control + C, щоб зупинити виконання контейнера. Або, якщо контейнери працюють у фоновому режимі, ви можете скористатися командою stop:
sail stop
Виконання команд
When using Laravel Sail, your застосунок is executing within a Docker container and is isolated from your local computer. However, Sail provides a convenient way to run various commands against your застосунок such as arbitrary PHP commands, Artisan commands, компонувальник commands, and Node / NPM commands.
Коли ви читаєте документацію Laravel, ви часто побачите посилання на команди компонувальника, Artisan та Node / NPM, які не посилаються на Sail. Ці приклади передбачають, що ці інструменти встановлені на вашому локальному комп'ютері. Якщо ви використовуєте Sail для вашого локального середовища розробки Laravel, ви повинні виконувати ці команди за допомогою Sail:
# Запуск команд Artisan локально... php artisan queue:work # Запуск команд Artisan у середовищі Laravel Sail... sail artisan queue:work
Виконання PHP команд
PHP команди можуть виконуватися за допомогою команди php. Звичайно, ці команди будуть виконуватися з використанням версії PHP, яка налаштована для вашого застосунку. Щоб дізнатися більше про версії PHP, доступні для Laravel Sail, зверніться до документації з версій PHP:
sail php --version
sail php script.php
Виконання команд компонувальника
Команди компонувальника можуть бути виконані за допомогою команди composer. Контейнер застосунку Laravel Sail включає встановлення компонувальника:
sail composer require laravel/sanctum
Виконання Artisan команд
Команди Laravel Artisan можуть виконуватися за допомогою команди artisan:
sail artisan queue:work
Виконання команд Node / NPM
Команди Node можуть виконуватися за допомогою команди node, тоді як команди NPM можуть виконуватися за допомогою команди npm:
sail node --version
sail npm run dev
Якщо бажаєте, ви можете використовувати Yarn замість NPM:
sail yarn
Взаємодія з базами даних
MySQL
Як ви могли помітити, файл docker-compose.yml вашого застосунку містить запис для контейнера MySQL. Цей контейнер використовує том Docker, щоб дані, збережені у вашій базі даних, зберігалися навіть при зупинці та перезапуску ваших контейнерів.
Крім того, при першому запуску контейнера MySQL, він створить для вас дві бази даних. Перша база даних називається, використовуючи значення вашої змінної середовища DB_DATABASE, і призначена для вашої локальної розробки. Друга - це спеціальна тестова база даних з назвою testing, яка забезпечить, що ваші тести не заважатимуть даним розробки.
Після того як ви запустили свої контейнери, ви можете підключитися до екземпляра MySQL у вашому застосунку, встановивши змінну середовища DB_HOST у файлі .env вашого застосунку на mysql.
Щоб підключитися до MySQL бази даних вашого застосунку з локальної машини, ви можете використовувати графічний застосунок для управління базами даних, такий як TablePlus. За замовчуванням, MySQL база даних доступна на localhost порт 3306, а облікові дані для доступу відповідають значенням ваших змінних середовища DB_USERNAME і DB_PASSWORD. Або ви можете підключитися як користувач root, який також використовує значення вашої змінної середовища DB_PASSWORD як свій пароль.
MongoDB
Якщо ви обрали встановити сервіс MongoDB під час встановлення Sail, файл docker-compose.yml вашого застосунку містить запис для контейнера MongoDB Atlas Local, який надає документну базу даних MongoDB з функціями Atlas, такими як Пошукові Індекси. Цей контейнер використовує том Docker, щоб дані, збережені у вашій базі даних, зберігалися навіть при зупинці та перезапуску ваших контейнерів.
Після того як ви запустили ваші контейнери, ви можете підключитися до екземпляра MongoDB у вашому застосунку, встановивши змінну середовища MONGODB_URI у файлі .env вашого застосунку на mongodb://mongodb:27017. Аутентифікація за замовчуванням вимкнена, але ви можете встановити змінні середовища MONGODB_USERNAME та MONGODB_PASSWORD для увімкнення аутентифікації перед запуском контейнера mongodb. Потім додайте облікові дані до рядка підключення:
MONGODB_USERNAME=user
MONGODB_PASSWORD=laravel
MONGODB_URI=mongodb://${MONGODB_USERNAME}:${MONGODB_PASSWORD}@mongodb:27017
Для безшовної інтеграції MongoDB з вашим застосунком, ви можете встановити офіційний пакет, підтримуваний MongoDB.
Щоб підключитися до бази даних MongoDB вашого застосунку з вашої локальної машини, ви можете використовувати графічний інтерфейс, такий як Compass. За замовчуванням, база даних MongoDB доступна за адресою localhost порт 27017.
Redis
Файл docker-compose.yml вашого застосунку також містить запис для контейнера Redis. Цей контейнер використовує том Docker, щоб дані, збережені у вашому екземплярі Redis, зберігалися навіть при зупинці та перезапуску ваших контейнерів. Після того, як ви запустили свої контейнери, ви можете підключитися до екземпляра Redis у вашому застосунку, встановивши змінну середовища REDIS_HOST у файлі .env вашого застосунку на redis.
Щоб підключитися до Redis бази даних вашого застосунку з вашої локальної машини, ви можете використовувати графічний застосунок для управління базами даних, такий як TablePlus. За замовчуванням, Redis база даних доступна на localhost порт 6379.
Valkey
Якщо ви обираєте встановити сервіс Valkey під час встановлення Sail, файл docker-compose.yml вашого застосунку міститиме запис для Valkey. Цей контейнер використовує том Docker, щоб дані, збережені у вашому екземплярі Valkey, зберігалися навіть при зупинці та перезапуску ваших контейнерів. Ви можете підключитися до цього контейнера у вашому застосунку, встановивши змінну середовища REDIS_HOST у файлі .env вашого застосунку на valkey.
Щоб підключитися до бази даних Valkey вашого застосунку з вашої локальної машини, ви можете використовувати графічний застосунок для управління базами даних, такий як TablePlus. За замовчуванням, база даних Valkey доступна на localhost порт 6379.
Meilisearch
Якщо ви обрали встановити сервіс Meilisearch під час встановлення Sail, файл docker-compose.yml вашого застосунку міститиме запис для цього потужного пошукового двигуна, який інтегровано з Laravel Scout. Після запуску контейнерів ви можете підключитися до екземпляра Meilisearch у вашому застосунку, встановивши змінну середовища MEILISEARCH_HOST на http://meilisearch:7700.
З вашої локальної машини ви можете отримати доступ до веб-адміністративної панелі Meilisearch, перейшовши за адресою http://localhost:7700 у вашому веб-браузері.
Typesense
Якщо ви обрали встановлення сервісу Typesense під час встановлення Sail, файл docker-compose.yml вашого застосунку міститиме запис для цього блискавично швидкого, з відкритим кодом пошукового двигуна, який нативно інтегрований з Laravel Scout. Після запуску ваших контейнерів, ви можете підключитися до екземпляра Typesense у вашому застосунку, встановивши наступні змінні середовища:
TYPESENSE_HOST=typesense
TYPESENSE_PORT=8108
TYPESENSE_PROTOCOL=http
TYPESENSE_API_KEY=xyz
З вашої локальної машини ви можете отримати доступ до API Typesense через http://localhost:8108.
Зберігання файлів
Якщо ви плануєте використовувати Amazon S3 для зберігання файлів під час запуску вашого застосунку в його продуктивному середовищі, можливо, ви захочете встановити сервіс MinIO під час встановлення Sail. MinIO надає сумісний з S3 API, який ви можете використовувати для локальної розробки, використовуючи Laravel's s3 драйвер зберігання файлів без створення "тестових" сховищ у вашому продуктивному середовищі S3. Якщо ви вирішите встановити MinIO під час встановлення Sail, секція конфігурації MinIO буде додана до вашого файлу docker-compose.yml застосунку.
За замовчуванням, файл конфігурації filesystems вашого застосунку вже містить конфігурацію диска для диска s3. Окрім використання цього диска для взаємодії з Amazon S3, ви можете використовувати його для взаємодії з будь-якою сумісною з S3 службою зберігання файлів, такою як MinIO, просто змінивши відповідні змінні середовища, які контролюють його конфігурацію. Наприклад, при використанні MinIO, конфігурація змінних середовища вашої файлової системи повинна бути визначена наступним чином:
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=sail
AWS_SECRET_ACCESS_KEY=password
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=local
AWS_ENDPOINT=http://minio:9000
AWS_USE_PATH_STYLE_ENDPOINT=true
Щоб інтеграція Flysystem у Laravel генерувала правильні URL-адреси при використанні MinIO, ви повинні визначити змінну середовища AWS_URL так, щоб вона відповідала локальній URL-адресі вашого застосунку і включала ім'я бакета в шлях URL:
AWS_URL=http://localhost:9000/local
Ви можете створювати бакети через консоль MinIO, яка доступна за адресою http://localhost:8900. Ім'я користувача за замовчуванням для консолі MinIO - sail, а пароль за замовчуванням - password.
Генерація тимчасових URL-адрес сховища за допомогою методу temporaryUrl не підтримується при використанні MinIO.
Запуск тестів
Laravel надає чудову підтримку тестування з коробки, і ви можете використовувати команду Sail test для запуску функціональних та юніт-тестів вашого застосунку. Будь-які параметри CLI, які приймаються Pest / PHPUnit, також можуть бути передані команді test:
sail test
sail test --group orders
Команда Sail test еквівалентна виконанню команди Artisan test:
sail artisan test
За замовчуванням Sail створить окрему базу даних testing, щоб ваші тести не заважали поточному стану вашої бази даних. У стандартній установці Laravel, Sail також налаштує ваш файл phpunit.xml для використання цієї бази даних під час виконання ваших тестів:
<env name="DB_DATABASE" value="testing"/>
Laravel Dusk
Laravel Dusk надає виразний, простий у використанні API для автоматизації браузера та тестування. Завдяки Sail, ви можете запускати ці тести, не встановлюючи Selenium або інші інструменти на вашому локальному комп'ютері. Щоб почати, розкоментуйте службу Selenium у файлі docker-compose.yml вашого застосунку:
selenium:
image: 'selenium/standalone-chrome'
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail
Далі, переконайтеся, що сервіс laravel.test у файлі docker-compose.yml вашого застосунку має запис depends_on для selenium:
depends_on:
- mysql
- redis
- selenium
Нарешті, ви можете запустити ваш набір тестів Dusk, запустивши Sail і виконавши команду dusk:
sail dusk
Selenium на Apple Silicon
Якщо ваш локальний комп'ютер містить чіп Apple Silicon, ваш сервіс selenium повинен використовувати образ selenium/standalone-chromium:
selenium:
image: 'selenium/standalone-chromium'
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail
Попередній перегляд електронних листів
Файл docker-compose.yml за замовчуванням у Laravel Sail містить запис сервісу для Mailpit. Mailpit перехоплює електронні листи, надіслані вашим застосунком під час локальної розробки, і надає зручний веб-інтерфейс, щоб ви могли переглядати ваші електронні повідомлення у браузері. При використанні Sail, хост Mailpit за замовчуванням - mailpit і доступний через порт 1025:
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_ENCRYPTION=null
Коли Sail працює, ви можете отримати доступ до веб-інтерфейсу Mailpit за адресою: http://localhost:8025
Контейнер CLI
Іноді ви можете захотіти розпочати сеанс Bash у контейнері вашого застосунку. Ви можете використовувати команду shell, щоб підключитися до контейнера вашого застосунку, що дозволить вам перевірити його файли та встановлені сервіси, а також виконувати довільні shell-команди в контейнері:
sail shell
sail root-shell
Щоб розпочати нову сесію Laravel Tinker, ви можете виконати команду tinker:
sail tinker
Версії PHP
Sail наразі підтримує обслуговування вашого застосунку за допомогою PHP 8.4, 8.3, 8.2, 8.1 або PHP 8.0. За замовчуванням версія PHP, що використовується Sail, це PHP 8.4. Щоб змінити версію PHP, яка використовується для обслуговування вашого застосунку, вам слід оновити визначення build контейнера laravel.test у файлі docker-compose.yml вашого застосунку:
# PHP 8.4
context: ./vendor/laravel/sail/runtimes/8.4
# PHP 8.3
context: ./vendor/laravel/sail/runtimes/8.3
# PHP 8.2
context: ./vendor/laravel/sail/runtimes/8.2
# PHP 8.1
context: ./vendor/laravel/sail/runtimes/8.1
# PHP 8.0
context: ./vendor/laravel/sail/runtimes/8.0
Крім того, ви можете оновити ім'я image, щоб відобразити версію PHP, яка використовується вашим застосунком. Цей параметр також визначено у файлі docker-compose.yml вашого застосунку:
image: sail-8.2/app
Після оновлення файлу docker-compose.yml вашого застосунку, вам слід перебудувати образи контейнерів:
sail build --no-cache
sail up
Версії Node
Sail за замовчуванням встановлює Node 22. Щоб змінити версію Node, яка встановлюється під час створення ваших образів, ви можете оновити визначення build.args сервісу laravel.test у файлі docker-compose.yml вашого застосунку:
build:
args:
WWWGROUP: '${WWWGROUP}'
NODE_VERSION: '18'
Після оновлення файлу docker-compose.yml вашого застосунку, вам слід перебудувати образи контейнерів:
sail build --no-cache
sail up
Поширення Вашого Сайту
Іноді вам може знадобитися поділитися вашим сайтом публічно, щоб переглянути його для колеги або протестувати інтеграції вебхуків із вашим застосунком. Щоб поділитися вашим сайтом, ви можете використовувати команду share. Після виконання цієї команди вам буде надано випадкову URL-адресу laravel-sail.site, яку ви можете використовувати для доступу до вашого застосунку:
sail share
Коли ви ділитеся своїм сайтом за допомогою команди share, ви повинні налаштувати довірені проксі вашого застосунку, використовуючи метод middleware trustProxies у файлі bootstrap/app.php вашого застосунку. В іншому випадку, хелпери генерації URL, такі як url та route, не зможуть визначити правильний HTTP хост, який слід використовувати під час генерації URL:
->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: '*');
})
Якщо ви хочете вибрати піддомен для вашого спільного сайту, ви можете вказати опцію subdomain при виконанні команди share:
sail share --subdomain=my-sail-site
Команда share працює на базі Expose, сервісу тунелювання з відкритим кодом від BeyondCode.
Налагодження з Xdebug
Конфігурація Docker у Laravel Sail включає підтримку Xdebug, популярного та потужного налагоджувача для PHP. Щоб увімкнути Xdebug, переконайтеся, що ви опублікували вашу конфігурацію Sail. Потім додайте наступні змінні до вашого .env файлу застосунку для налаштування Xdebug:
SAIL_XDEBUG_MODE=develop,debug,coverage
Далі, переконайтеся, що ваш опублікований файл php.ini містить наступну конфігурацію, щоб Xdebug був активований у вказаних режимах:
[xdebug]
xdebug.mode=${XDEBUG_MODE}
Після зміни файлу php.ini не забудьте перебудувати ваші Docker-образи, щоб ваші зміни у файлі php.ini набули чинності:
sail build --no-cache
Конфігурація IP на хості Linux
Внутрішньо змінна середовища XDEBUG_CONFIG визначена як client_host=host.docker.internal, щоб Xdebug був належним чином налаштований для Mac та Windows (WSL2). Якщо ваша локальна машина працює на Linux і ви використовуєте Docker 20.10+, host.docker.internal доступний, і ручна конфігурація не потрібна.
Для версій Docker старіших за 20.10, host.docker.internal не підтримується на Linux, і вам потрібно буде вручну визначити IP хосту. Щоб це зробити, налаштуйте статичний IP для вашого контейнера, визначивши користувацьку мережу у вашому файлі docker-compose.yml:
networks:
custom_network:
ipam:
config:
- subnet: 172.20.0.0/16
services:
laravel.test:
networks:
custom_network:
ipv4_address: 172.20.0.2
Після того як ви встановили статичну IP-адресу, визначте змінну SAIL_XDEBUG_CONFIG у файлі .env вашого застосунку:
SAIL_XDEBUG_CONFIG="client_host=172.20.0.2"
Використання Xdebug CLI
Команда sail debug може бути використана для початку сеансу налагодження під час виконання команди Artisan:
# Запустити Artisan-команду без Xdebug... sail artisan migrate # Запустити Artisan-команду з Xdebug... sail debug migrate
Використання Xdebug у браузері
Щоб налагодити ваш застосунок під час взаємодії з ним через веб-браузер, дотримуйтесь інструкцій, наданих Xdebug для ініціації сесії Xdebug з веб-браузера.
Якщо ви використовуєте PhpStorm, будь ласка, перегляньте документацію JetBrains щодо налагодження без конфігурації.
Laravel Sail покладається на artisan serve для обслуговування вашого застосунку. Команда artisan serve приймає лише змінні XDEBUG_CONFIG та XDEBUG_MODE, починаючи з версії Laravel 8.53.0. Старіші версії Laravel (8.52.0 і нижче) не підтримують ці змінні і не прийматимуть з'єднання для налагодження.
Налаштування
Оскільки Sail - це просто Docker, ви можете налаштувати майже все в ньому. Щоб опублікувати власні Dockerfiles Sail, ви можете виконати команду sail:publish:
sail artisan sail:publish
Після виконання цієї команди, Dockerfiles та інші конфігураційні файли, які використовуються Laravel Sail, будуть розміщені в директорії docker у кореневій директорії вашого застосунку. Після налаштування вашої інсталяції Sail, можливо, ви захочете змінити ім'я образу для контейнера застосунку у файлі docker-compose.yml вашого застосунку. Після цього, перебудуйте контейнери вашого застосунку за допомогою команди build. Присвоєння унікального імені образу застосунку є особливо важливим, якщо ви використовуєте Sail для розробки декількох Laravel застосунків на одній машині:
sail build --no-cache
