Настройка окружения для разработки под Windows в 2022 (Laravel, WSL, Docker, Sail, VS Code)
В прошлой статье мы рассмотрели изменение инфраструктуры разработки под Windows за последние 20 лет. Теперь составим подробный гайд как создавать новые Laravel проекты или подключать существующие по современным концепциям для 2022 года.
Содержание:
- Установка WSL2
- Установка Docker Desktop
- О работе с Laravel под Windows
- Создание нового проекта Laravel под Windows
- Клонирование существующего Laravel проекта с Sail
- Добавление Sail в существующий проект
- Лайфхак: копирование SSH ключей из windows в wsl
- Лайфхак: локальный домен, красивое имя в браузере для проекта
- Лайфхак: сокращение вызова sail через alias
- Лайфхак: несколько Laravel проектов одновременно
Установка WSL2
Ссылка: https://docs.microsoft.com/en-us/windows/wsl/install
Windows Subsystem for Linux (WSL) - подсистема Linux в Windows. Нам она в первую очередь нужна для запуска контейнеров Docker. На данный момент актуальна вторая версия подсистемы (WSL2), она и будет установлена по умолчанию.
Запускаем PowerShell под Администратором:
wsl --install
После установки нужно перезагрузить компьютер и начнется установка Ubuntu как хостовой операционной системы Linux.
Дальше вас спросят имя пользователя которое будете использовать. Может не совпадать с вашим Windows пользователем:
И после того как зададите новый пароль, вы успешно попадете в систему:
Установка Docker Desktop
Ссылка: https://www.docker.com/products/docker-desktop/
Тут сложностей не должно возникнуть. Скачиваем, устанавливаем.
После установки будет предложено выйти из системы и снова зайти. Покоряемся.
Не забываем проверить, что в настройках Docker Desktop установлена интеграция именно с вашим Linux дистрибутивом:
О работе с 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 с последующим тестированием и исполнением кода непосредственно в контейнере. Схема работы следующая:
В дальнейшем я исхожу из того, что 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
Итога завершения команды как таковой не будет. Вы увидите служебные сообщения о запуске и работе контейнеров:
Проверить работу можно зайдя в Windows браузере на localhost. Вы должны увидеть стартовый экран Laravel:
В Docker Desktop также будут видны запущенные контейнеры:
Теперь запустим новое окно терминала Windows и выполним в нем:
wsl cd /mnt/c/Projects/test_it (путь до вашего проекта) code .
Если вы все сделали правильно, то будет запущен новый экземпляр 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'
Команда сохранится на время текущей сессии. Если хотите сохранить ее надолго, то наберите:
Это откроет редактор настроек баша. Добавьте в конец этого файла ту же строчку.
Лайфхак: несколько 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