Всем привет. В компании Convergent, где я работаю, в проектные команды часто входят несколько разработчиков: это могут быть специалисты по бэкенду, фронтенду и/или вёрстке. Проекты чаще всего разрабатываются на PHP, что обуславливает зависимости от различных внешних тулов вроде баз данных, систем полнотекстового поиска и прочего. И здесь кроется большая проблема: коллеги, работающие в Linux, который лежит в основе web-разработки, проблем не испытывают. А вот пользователи Windows получают головную боль.
Как решить эту проблему? У себя в компании мы используем несколько вариантов. В этой статье я решил поделиться нашими наработками.
Вариант первый. Готовый набор инструментов вроде OSPanel или XAMPP. В большинстве проектов на Yii, где в основном используется только MySQL, — это очень хорошие решения.
Второй вариант — Docker. Он отлично подходит для автоматизации развертывания, в том числе legacy проектов. Но об этом нужно позаботиться. Сейчас, с выходом WSL 2, работать с Docker в Windows 10 (в т. ч. Домашнем издании) стало значительно удобнее, чем раньше. Об этом на Хабре есть множество статей.
Третий вариант — поставить Linux второй системой. Это достаточно муторный процесс, так что я автоматизировал его с помощью инструментов виртуализации и автоматизации VirtualBox, Vagrant и Ansible.
На GitHub я выложил готовый проект. Вот что он умеет и из чего состоит:
Ubuntu 20.04 с графическим интерфейсом. Смысл в том, что разработчики используют систему ровно так, если бы они работали просто на Ubuntu, которая установлена второй.
С помощью Ansible при первом запуске устанавливается заданный набор софта (Git, Ansible, NVM, PHP, MC, Docker, Docker Compose, PhpStorm, Visual Code, DBeaver Community Edition). Набор при необходимости можно расширять с помощью создания новых ролей Ansible.
Для работы потребуется установить VirtualBox и Vagrant. Перед установкой есть один важный момент — необходимо включить поддержку виртуализации. Обычно это настраивается через BIOS/UEFI, и в каждой реализации настройка может называться по-своему (например, VT).
После установки всего необходимого открываем PowerShell правами администратора и с помощью Git клонируем проект:
git clone https://github.com/s-mokrushin/ubuntu-development-box
cd ubuntu-development-box
cp .env.example .env
Теперь интересный момент — нужно отредактировать файл .env под ваш компьютер. В целом, для работы Ubuntu в виртуальной машине даже 16 Гб оперативной памяти будет не лишним.
BOX_CPU_COUNT — количество используемых вычислительных ядер процессора. Рекомендуемое значение = Общее количество / 2. Оптимальное значение — 4. Минимальное — 1.
BOX_MEMORY_SIZE — объём выделяемой оперативной памяти в мегабайтах. Рекомендуемое значение = Общее количество / 2. Оптимальное значение — 8096. Минимальное — 2048.
BOX_DISK_SIZE — объём выделяемого дискового пространства. Рекомендуемое значение — 75GB. Данное значение определяет максимальное дисковое пространство, которое может быть использовано виртуальной машиной (для установки же потребуется около 12 Гб).
BOX_IP_ADDRESS — устанавливаемый локальный IP-адрес для виртуальной машины. Можно оставить по умолчанию.
BOX_HOSTNAME — локальный хостнейм для доступа к виртуальной машине. Также можно оставить значение по умолчанию.
Т. к. чаще всего работа программистов в компании сводится к работе с Git, то нужно добавить свой приватный ключ SSH, скопировав его в корневую папку и переименовать файл в id_rsa. При запуске Ansible добавит его в директорию /home/vagrant/.ssh.
Запускаем виртуальную машину:
vagrant up
При первом запуске Vagrant предложит установить необходимые плагины, после чего команду vagrant up нужно выполнить повторно. Также при первом запуске в фоновом режиме будут установлены все необходимые компоненты. Система загрузится быстрее, а весь набор софта будет установлен в процессе работы.
После добавления изменений в конфигурацию Ansible, надо запускать команду vagrant provision (или vagrant up — provision, если виртуальная машина ещё не запущена).
Процесс установки всего необходимого ПО происходит с помощью инструмента Ansible. Если интересно узнать про него подробнее, то на русском языке есть как минимум две книги “Полное руководство Ansible, 3 изд.” и “Запускаем Ansible”. Я постарался написать конфигурацию максимально простой и понятной.
Заключение
Есть множество способов использовать Linux окружение, оставив в качестве основной ОС Windows 10. Вариант с установкой ОС в виртуальную машину выглядит достаточно громоздким и ресурсоемким, но, с другой стороны, процесс автоматизации с помощью Ansible и Vagrant позволяет не устанавливать каждый раз весь необходимый софт для работы, а также с лёгкостью переносить все настроенные внутри виртуальной машины проекты с компьютера на компьютер.
Я бы хотел ещё больше автоматизировать процесс установки моего проекта, например создав установочный дистрибутив. Если у кого-то есть желание помочь с этим, буду очень признателен.
Полезные ссылки
OSPanel — локальный веб-сервер для Windows с большим количеством модулей (вроде MongoDB, Redis и т. д.).
XAMPP — Apache + MariaDB + PHP + Perl для Windows.
Ansible — система управлениям конфигурациями.
VirtualBox — наиболее популярная система виртуализации операционных систем для рабочих станций.
Vagrant — инструмент для конфигурирования виртуальной среды.
maxzabl
Чем плох WSL?