DEV
June 20, 2022

Настройка окружения для разработки под Windows в 2022 (Laravel, WSL, Docker, Sail, VS Code)

Laravel под Windows. Настройка окружения.

В прошлой статье мы рассмотрели изменение инфраструктуры разработки под Windows за последние 20 лет. Теперь составим подробный гайд как создавать новые Laravel проекты или подключать существующие по современным концепциям для 2022 года.

Содержание:

Установка WSL2

Ссылка: https://docs.microsoft.com/en-us/windows/wsl/install

Windows Subsystem for Linux (WSL) - подсистема Linux в Windows. Нам она в первую очередь нужна для запуска контейнеров Docker. На данный момент актуальна вторая версия подсистемы (WSL2), она и будет установлена по умолчанию.

Запускаем PowerShell под Администратором:

wsl --install
Процесс установки WSL под Windows

После установки нужно перезагрузить компьютер и начнется установка Ubuntu как хостовой операционной системы Linux.

Установка Ubuntu под Windows

Дальше вас спросят имя пользователя которое будете использовать. Может не совпадать с вашим Windows пользователем:

Настройка пользователя при устанвоке Ubuntu под Windows

И после того как зададите новый пароль, вы успешно попадете в систему:

Первый успешный вход в Ubuntu под Windows

Установка Docker Desktop

Ссылка: https://www.docker.com/products/docker-desktop/

Тут сложностей не должно возникнуть. Скачиваем, устанавливаем.

Процесс установки Docker Desktop под Windows

После установки будет предложено выйти из системы и снова зайти. Покоряемся.

Не забываем проверить, что в настройках Docker Desktop установлена интеграция именно с вашим Linux дистрибутивом:

Настройки Docker Desktop

Настройка завершена.

О работе с Laravel под Windows

Ссылка на Laravel: https://laravel.com/docs/9.x#getting-started-on-windows

Ссылка на Sail: https://laravel.com/docs/9.x/sail

Ссылка на Dev Container: https://code.visualstudio.com/docs/remote/containers

Ссылка на VS Code: https://code.visualstudio.com/

Из всех PHP фреймворков мне ближе именно Laravel. Разрабатывая под Windows важно понимать концепции: DevContainer и Sail.

Dev Container - это механизм, обеспечивающий разработку на локальной машине в VS Code с последующим тестированием и исполнением кода непосредственно в контейнере. Схема работы следующая:

Работа через dev container

В дальнейшем я исхожу из того, что VS Code у вас уже установлен.

Sail - это инструмент для взаимодействия Docker. После его установки проект можно запускать командой sail up. Также sail нужно добавлять к командам composer, npm , artisan - они будут выполняться в нужном контейнере.

Механика создания нового проекта и подключение sail к существующему различаются. В следующим главах мы по отдельности рассмотрим обе ситуации.

Создание нового проекта Laravel под Windows

Сперва зайдем в нашу Linux подсистему:

wsl

Файловая система Windows доступна из Linux окружения через примонтированный раздел. Вместо c:\Projects у вас будет путь /mnt/c/Projects. По этой логике создайте и перейдите в категорию где будут размещаться проекты. Создавать новую папку под проект не нужно.

Следующая команда скачает и выполнит скрипт создания нового laravel проекта с указанными модулями:

curl -s https://laravel.build/test_it?with=mysql,mailhog&devcontainer | bash

Поменяйте название проекта с test_it на нужно для вас. В блоке with можно указать другой набор стартовых компонентов (см. документацию).

Когда вы выполните эту команду, будет создана папка test_it и в ней будет развернута вся необходима инфраструктура для разработки с установленной последней версией Laravel. Останется только набрать:

cd test_it
./vendor/bin/sail up

Итога завершения команды как таковой не будет. Вы увидите служебные сообщения о запуске и работе контейнеров:

Отображение запущенного проекта Laravel в WSL

Проверить работу можно зайдя в Windows браузере на localhost. Вы должны увидеть стартовый экран Laravel:

Стартовый экран Laravel

В Docker Desktop также будут видны запущенные контейнеры:

Отображение запущенных контейнеров в Docker Desktop

Теперь запустим новое окно терминала Windows и выполним в нем:

wsl
cd /mnt/c/Projects/test_it (путь до вашего проекта)
code .

Если вы все сделали правильно, то будет запущен новый экземпляр VS Code в который сразу будет загружен код нашего проекта. Все изменения в коде будут сразу применяться.

Код нового Laravel проекта в VS Code

В следующих статьях обязательно рассмотрим работу с Git, а пока можно считать задачу создания нового проекта на Laravel под Windows успешно выполненной.

Клонирование существующего Laravel проекта с Sail

Если проект на Laravel хранится в репозитории и вам нужно его установить к себе на машину, то заходим в WSL:

wsl

Далее вы клонируете репозиторий в нужную директорию:

git clone git@github.com:***ACCOUNT***/***REPO***.git

В хостовой операционке WSL у вас может быть не установлен composer и после копирования репозитория не получится подтянуть зависимости и запустить тот же sail. Скорее всего вы увидите следующую ошибку:

bash: vendor/bin/sail: No such file or directory

Для исправления :

docker run --rm \
    -u "$(id -u):$(id -g)" \
    -v $(pwd):/var/www/html \
    -w /var/www/html \
    laravelsail/php81-composer:latest \
    composer install --ignore-platform-reqs

После этого уже можно выполнить:

sail composer update
sail npm update
sail up

Добавление Sail в существующий проект

Есть в проекте Laravel еще не установлен Sail, то нужно выполнить следующие действия:

1). Добавляем sail в dev зависимости:

composer require laravel/sail --dev

Возможно тут могут возникнуть проблемы, тогда скорее всего нужны будут следующие зависимости:

sudo apt update
sudo apt install -y php-xml php-mbstring

2). Устанавливаем Sail. Будет создан файл docker-compose.yml в корне вашего проекта:

php artisan sail:install --devcontainer

Тут вас спросят какие модули нужны. Поставьте цифры в зависимости от потребностей вашего проекта:

Укажите какие модули для вашего проекта нужно установить.

Лайфхак: копирование ssh ключей из windows в wsl

Код вашего проекта может быть расположен в инфраструктуре windows, тогда для работы с репозиторием используются ключи SSH из windows директории Users\<Имя пользователя>\.ssh или в инфраструктуре WSL, тогда SSH ключи расположены в директории ~/.ssh

cd /mnt/c/Users/<username>/.ssh
cp * ~/.ssh
chmod 600 ~/.ssh/id_rsa

Лайфхак: локальный домен, красивое имя в браузере для проекта

Вы можете вызывать проекты в браузере не только по имени localhost:port но и задать для них доменные сокращения. Для этого в Windows открываем файл hosts в режиме редактирования (в режиме Администратора):

c:\Windows\System32\drivers\etc\hosts

Дальше в конец файла вы можете добавить следующий текст:

127.0.0.1    test.loc

Это значит что при вызове test.loc система сперва будет идти на локальный адрес 127.0.0.1.

Лайфхак: сокращение вызова sail через alias

Если вы не хотите каждый раз при вызове sail набирать ./vendor/bin/sail, то вы можете сохранить в системе alias вызова этой команды. Наберите в среде WSL:

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

Команда сохранится на время текущей сессии. Если хотите сохранить ее надолго, то наберите:

nano ~/.bashrc

Это откроет редактор настроек баша. Добавьте в конец этого файла ту же строчку.

Лайфхак: несколько Laravel проектов одновременно

Если вы используете несколько Sail проектов на одной машине, то они могут начать конфликтовать по портам. Первое что нужно сделать - это добавить в .env файл в корне проектов переменную APP_PORT, например:

APP_PORT=1234

Дальше вы можете обращаться к проекту по адресу 127.0.0.1:1234

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

Для этого смотрим ошибку в консоли, видим какой порт вызывал ошибку, находим его в docker-compose.yml, смотрим какая переменная за него отвечает и добавляем эту переменную в .env файл с увеличением порт на +1. Например:

FORWARD_MAILHOG_DASHBOARD_PORT=8026
FORWARD_DB_PORT=3307
FORWARD_MAILHOG_PORT=1026
FORWARD_MINIO_PORT=9001
FORWARD_MINIO_CONSOLE_PORT=8901
HMR_PORT=8083

Дерзайте, и все получится.