Vagrant или окружение для разработки за 5 минут

Окружение для разработки — одна из самых обсуждаемых тем в последнее время. И это неспроста. Технологии развиваются, процессы автоматизируются, все более ускоряя процесс разработки, и тратить время на рутинные операции — это уже непозволительная роскошь.

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

Vagrant — это инструмент для быстрого развертывания окружения для разработки на основе систем виртуализации. Vagrant — универсальное, удобное и хорошо зарекомендовавшее себя решение, которое пригодится любому разработчику. Vagrant разработан в соответствии с принципами unix-way и управляется из командной строки.

Vagrant доступен для всех популярных операционных систем (ОС), и работает со всеми популярными виртуальными машинами (ВМ). В моем случае это были macOS и Parallels, но процесс не будет сильно отличаться для других платформ.

Установка Vagrant

Нам понадобятся:

  • виртуальная машина: VirtualBox, VMware или Parallels
  • сам Vagrant
  • опционально: плагины для Vagrant (в моем случае понадобился плагин vagrant-parallels)

Процесс установки предельно прост, подробно на нем останавливаться не будем.

В качестве основы Vagrant использует специально собранные образы операционных систем — боксы. Найти их можно, например, тут. Для Drupal-разработчиков подойдет практически любой дистрибутив Linux. Если вы уже увидели свой любимый дистрибутив, то вы всего в двух командах от того, чтобы развернуть виртуальную ОС. Но есть более интересная возможность — это использовать скрипты для автоматической конфигурации окружения.

Конфигурация Vagrant

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

Конфигурация виртуальной ОС определяется файлом vagrantfile, для генерации которого тоже есть несколько инструментов. Я использовал PuPHPet — очень классный и понятный конфигуратор.

В качестве ОС я использовал Ubuntu 14.04 LTS, а в качестве web-стека — классический LAMP. PuPHPet позволяет настроить множество параметров: веб сервер, сервер БД, версия PHP и т.д. Приятный бонус для работы с Drupal — это возможность установки Drush.

В конце вы получите возможность скачать архив с файлом конфигурации и всеми необходимыми скриптами. Его нужно распаковать в папку, в которой вы собираетесь вдальнейшем вести разработку. Vagrant сделает ее доступной внутри виртуальной ос.

В моем случае понадобилось одно движение надфилем, связанное со спецификой Parallels, в vagrantfile, в секцию:

config.vm.provider 'parallels' do |v|

надо добавить флаг:

v.update_guest_tools = true

чтобы выполнить обновление Parallels Tools.

Запуск Vagrant

Вот мы и подошли к самому интересному моменту. Запуск ВМ производится командой:

vagrant up

Eе нужно запускать из папки, в которой у вас находится vagrantfile. Первый запуск может занять некоторое время, в моем случае понадобилось около 5 минут. Vagrant сам скачивает нужный бокс, проверяет обновления, запускает скрипты и делает всю необходимую работу.

Работа с Vagrant

Теперь можно скопировать файлы вашего проекта в подпапку, которую вы указали в PuPHPet, как директорию для виртуального хоста веб сервера. В качестве примера я взял свежеиспеченную на момент написания статьи, Drupal 8 beta 1.

Подключение к ОС осуществляется через SSH, командой:

vagrant ssh

Так же нужно в основной ОС направить выбранный домен на IP адрес виртуальной машины, чтобы иметь доступ к нему из браузера. Для этого надо добавить директиву в файл /etc/hosts:

192.168.58.101 drupal-8.dev

Остановка и перезапуск ВМ производятся соответственно командами:

vagrant halt
vagrant reload

Вот и все, окружение настроено и готово к работе.

Итог

У Vagrant есть множество преимуществ, что порождает множество различных сценариев его использования. К ним относятся:

  • Стандартизация окружения;
  • Переносимость;
  • Быстрое развертывание;
  • Автоматическое конфигурирование;
  • Обновление и удобное удаление ВМ;
  • Низкое потребление ресурсов.

Если вы работаете локально, и ваша ОС — это не Linux Server, то Vagrant — это для вас. Каких-либо причин использовать локальное окружение вместо виртуального я не вижу.