WSL

Начиная с Windows 10 версии 2004 и выше для установки WSL нужно открыть консоль с правами администратора и ввести команду:

wsl --install

Эта команда позволяет включить необходимые компоненты, скачать последнюю версию ядра Linux, установить WSL 2 в качестве компонента по-умолчанию и установить дистрибутив Linux.

Приведённая выше команда работает только если WSL не установлена вообще.

Если Вы выполнили команду wsl --install и видите текст справки WSL, попробуйте выполнить wsl --list --online, чтобы просмотреть список доступных дистрибутивов. Затем выполните wsl --install -d <DistroName> для установки дистрибутива.

Команда wsl --list выводит список доступных дистрибутивов. Проверьте если нужный дистрибутив не установлен по-умолчанию, сделать это будет можно командой wsl --set-default <DistroName>.

Более подробно о других способах установки WSL можно прочитать здесь.

Так как скрипты Laravel Sail написаны на языке PHP, то нужно установить его внутрь дистрибутива WSL.

Например, установка PHP 8.1 в Ubuntu 20 будет производиться путём последовательного выполнения следующих команд:

sudo apt update
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install -y php8.1 php8.1-curl php8.1-mysql php8.1-mbstring php8.1-xml php8.1-zip php8.1-bcmath php8.1-intl php8.1-readline php8.1-redis php8.1-sqlite3 php8.1-opcache php8.1-pdo
sudo apt install -y mysql-client
sudo apt -y autoremove
sudo apt clean

Docker Desktop

Если в системе не установлен Docker Desktop, ставим его.

У него всё просто: "далее - далее - далее - готово".

Если во время установки не включили компоненты WSL 2 - не страшно, это можно сделать впоследствии.

После запуска Docker заходим в его настройки и на вкладке General активируем Use the WSL 2 based engine:

Затем переходим в раздел Resources > WSL Integration и активируем добавленный раннее дистрибутив:

Laravel Sail

Laravel Sail возможно использовать как в новом проекте, так и подключать в существующий. Laravel Sail работает с PHP версии 7.4 и выше.

Обратите внимание, что в системе должен быть установлен PHP версии не ниже поддерживаемой Вашим приложением, а также Composer.

Удобнее всего первоначальные шаги выполнять именно из-под Windows, так как устанавливать и настраивать окружение значительно проще чем внутри wsl контейнера.

Мы будем использовать свежий проект используя инсталлятор, который установит Laravel 9 с зависимостью Sail:

laravel new blog

Так как все команды нужно начинать с vendor/bin/sail, укажем алиас для упрощения. Для этого в файл %USERPROFILE%\.bash_profile добавим строку:

alias sail='vendor/bin/sail'

Перезапускаем консоль, переходим в папку с созданным проектом и инициализируем конфигурацию Sail:

php artisan sail:install

Через запятую указываем сервисы, необходимые для приложения. Например, 0,3 установит mysql и redis:

И жмём enter.

Эта команда создаст файл docker-compose.yml в корне проекта и пропишет конфиги redis и mysql в файле .env.

При необходимости одновременного запуска нескольких проектов, в файле .env можно задать ключ APP_PORT с номером порта.

Например, со значением APP_PORT=1234 приложение будет доступно по адресу http://127.0.0.1:1234.

Теперь можно переходить к запуску и здесь у нас есть два варианта:

sail up
sail up -d

Первый вариант, sail up запустит контейнеры в "живом" режиме, то есть при закрытии консоли закроется и соединение, а sail up -d запустит их в фоновом режиме и контейнеры будут работать до тех пор, пока не будет передана команда sail down либо не будет выгружен сам докер.

Просто так в Windows нельзя запустить Sail, так как он использует компоненты Linux. Именно поэтому на этапе установки WSL устанавливался дистрибутив, например, Ubuntu.

Сперва необходимо войти в подсистему WSL выполнив команду:

wsl

Также стоит заметить, что алиас sail мы устанавливали в Windows и он не распространяется на подсистему, поэтому зададим его и подсистеме.

Для этого выполните команду nano ~/.bashrc и добавьте в конец файла строки:

alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
alias sart='[ -f sail ] && bash sail artisan || bash vendor/bin/sail artisan'

Для применения изменений выйдем из подсистемы командой exit и заново в неё войдем:

Запускаем контейнеры командой sail up и ждём завершения компиляции:

Переходим на страницу http://127.0.0.1 и видим наше приложение.

В консоли также будет видно логирование запросов. Конечно, если запуск производился командой sail up.

Для вызова различных artisan-команд в контейнере можете пользоваться алиасом sart. Например:

sart queue:work

Всё. Удачи в разработке ?