Всем привет. В компании 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 нужно выполнить повторно. Также при первом запуске в фоновом режиме будут установлены все необходимые компоненты. Система загрузится быстрее, а весь набор софта будет установлен в процессе работы.

Ubuntu 20.04
Ubuntu 20.04

После добавления изменений в конфигурацию 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 — инструмент для конфигурирования виртуальной среды.