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 можно прочитать здесь.

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

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

Комментарии (11)


  1. shushu
    03.04.2022 03:09
    +4

    TL;DR: Что бы запустить Laravel под Windows, надо установить Linux для Windows :)


    1. pbatanov
      03.04.2022 05:43

      Что интересно - не очень понятно, зачем там требуется WSL2. докер в винде вполне прекрасно работает и без него (и местами даже лучше, чем с ним)


      1. Helldar Автор
        03.04.2022 16:07

        Докер - да, а именно Laravel Sail - нет, ему нужен линукс. Он не умеет в нормальную виртуалку, в этом и проблема.


  1. lifestar
    03.04.2022 07:03

    А вот у меня получилось, что Laravel на Docker без WSL2 работает гораздо быстрее, чем с ним.

    Проект на файловой системе Windows.


    1. Helldar Автор
      03.04.2022 16:07

      Laravel Sail?


      1. lifestar
        04.04.2022 07:13

        Почти. Я взял конфиг Laravel Sail, немного изменил и запустил его напрямую, без wsl


        1. Helldar Автор
          04.04.2022 13:43

          Согласен, оптимизировать можно, но тогда пропадёт суть подгружаемого пакета, когда сообщество следит за его актуальностью в то время как разработчик использует готовое вместо придумывания своего велосипеда.


  1. MadridianFox
    03.04.2022 11:10

    Стоит отметить, что многие вещи в экосистеме laravel делаются в точном соответствии с их слоганом - framework for web artisans.
    Это не плохо, но иногда приходится объяснять молодым разработчикам, что если что-то заложено во фреймворк, это ещё не значит что это оптимальное решение во всех ситуациях.
    Некоторые вещи, бесспорно удобные, могут успешно применяться, когда вы делаете бложик или магазин рассчитанный на 100 заказов в год, но при этом они же могут ставить палки в колёса, когда ваш магазин должен обрабатывать тысячи заказов в день.

    Подобный подход прослеживается и в Laravel sail. Это решение, которое позволяет организовать разработку одного веб-сервиса, при этом вам всё ещё нужен php определённой версии на хосте.

    Есть аналогичный инструмент, который используя тот же принцип действия, решает более существенные проблемы. Например, позволяет не иметь на хосте php вообще. Это важно, когда вы работаете над разными проектами, и у них разные требования к версиям и модулям php. Генерирует git хуки чтобы они выполнялись в контейнере. Позволяет запускать несколько разрабатываемых веб-сервисов и определять зависимости между ними.


    1. Helldar Автор
      03.04.2022 16:09

      Тогда уж Laradock. Но, в целом, да. Что-то удобно, а что-то нет. В случае с Sail неудобно то что необходимо целый линух ставить чтобы он работал при том, что докер и без него спокойно контейнеры собирает. Но статья не про удобство, а про сам факт запуска. Удобство каждый для себя сам выбирает


      1. MadridianFox
        04.04.2022 09:03

        Laradock, мне кажется, наследует идеи таких решений как OpenServer, однако "фича" ларадока относительно опенсервера одновременно и мешает ему быть логичным.

        Ценность OpenServer, Xampp, Wamp, Mamp в том, что вам не надо знать как оно работает и не надо ничего настраивать. Вы просто устанавливаете одну программу, и в ней мышкой накликиваете какие компоненты вам нужны. В этом есть ценность, т.к. это сильно проще чем скачивать компоненты по отдельности и править их конфиги. Ценность есть ещё и в том, что эти решения позволяют менять версии ПО. Это было очень важно десять лет назад, когда установка каждого компонента системы была квестом - скачай архив или установщик, он тебе гвоздями к системе прибьётся, потом иди ищи где его конфиги и т.д.

        С распространением докера эти проблемы, для тех кто освоил докер и хоть немного научился работать с используемыми компонентами, отошли на второй план.
        Сейчас очень просто получить работающий nginx, fpm, mysql, etc просто набрав команду в терминале. Добавляем сюда docker-compose и ещё упрощаем себе жизнь - количество вводимых команд стремится к минимуму, а запустив новый проект можно просто скопировав в него пару файлов.

        Ларадок по сути является таким хитрым большим docker-compose файлом. Ну да, там есть пара скриптов чтобы настроить какие компоненты использовать, ведь самих компонентов там едва ли не сотня. Но ничего нового по сравнению с самописным файлом ларадок не даёт. Только экономит время на старт, но раз-другой написав свой конфиг, вы в дальнейшем можете его копировать едва ли не быстрее чем стартует ларадок.

        Sail в этом отношении делает шаг вперёд. Он не просто является docker-compose файлом. Он даёт разработчику новую возможность - позволяет выполнить команду в контейнере в контексте текущего проекта. Это почти как docker exec, только короче, и не требует указывать имя контейнера. Это важно, ведь разработчику часто приходится вызывать composer и artisan, и выполняться они строго в том же окружении, в котором работает разрабатываемое приложение.


        1. Helldar Автор
          04.04.2022 13:49

          У ларадока да, нужно знать как работает докер чтобы его использовать.

          Что касается его конфигурирования, всё настраивается через файл .env. В сами образы не надо лазить.

          Также многие считают ларадок тяжёлым лишь потому, что не умеют работать с докер-контейнерами - разработчики просто выполняют команду docker-compose up -d и жалуются что ларадок много жрёт, и совсем не догадываются что нужно явно передавать какие контейнеры собирать, например, docker-compose up -d mysql php-fpm mailhog redis.

          Что касается выполнения кода в контейнере то Sail работает как все контейнеры за тем исключением, что Тейлор трепетно относится к документации и, в том числе, поэтому его продукты притягивают такое внимание. Ну и его любовь к хелперам и упрощению также играет немаловажную роль.