Корпоративный блог DataArt | Vagrant? Кто такой? Чем знаменит?
DataArt

Vagrant? Кто такой? Чем знаменит?

Доброго времени суток дорогие читатели.

Хочу вас познакомить с интересными тулзами Vagrant и Puppet.

Пару строчек из старой доброй вики.

<wiki>

  • Vagrant is free and open-source software for creating and configuring virtual development environments. It can be considered a wrapper around Virtual Box and configuration management software such as Chef, Salt and Puppet.
  • Puppet is an open source configuration management tool from Puppet Labs, founded by Luke Kanies in 2005. It is written in Ruby and released as free software under the GPL until version 2.7.0 and the Apache 2.0 license after that.

</wiki>

Большой плюс этого инструментария — он open source.

В чем профит?

Для лучшего понимания, почему эта тулза набирает такую популярность в PHP community, давайте рассмотрим ежедневные проблемы и неудобства жизни PHP-девелопера, которые этот инструментал помогает решать:

  • Cитуация с несколькими проектами на одной машине, и для каждого бывает потребность в своём конфиге для PHP/MySql/Apache или nginx. Например, max_execution_time.
  • Разный набор extensions для AMP сборки.
  • Отсутсвие связанных Linux/Windows environments для тестирования приложения (часто при переносе проекта с Windows на Linux бывают проблемы с path, permissions, к тому же Linux-based системы регистрочуствительны, в отличие от Windows).

Исходя из вышеперечисленных проблем, видим, что данный инструментарий поможет решить их, поскольку предназначен для быстрого развёртывания девелоперского окружения на виртуальной машине. Да и PHP разработка под Linux, так уж исторически сложилось, более user friendly. Управление происходит на уровне скриптов, которые мы создаём для Vagrant/Puppet.

Я вас еще не убедил? Вот ситуация из жизни более детально.

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

(Debian 7 x64, Apache/Nginx, PHP 5.5, MySql, Redis + готовый виртуал хост + VCS checkout проекта и включение его DB миграции).

Подготовили скрипт, дали команде девелоперов, каждый сделал
«vagrant up»
и в результате мы получаем прекрасно отстроенный development environment с возможностью подьёма в одну команду.

Далее в этом же проекте через пару спринтов решили использовать sphinx — ok добавили в puppet скрипт установку sphinx, выполняем vagrant up в результате мы гарантированно получаем у всех девелоперов одно рабочее и актуальное окружение.

Стоит упомянуть, что во всеми любимом PHPStorm 7 появилась поддержка Vagrant из коробки.

Также обратите внимание: комьюнити подготовило некоторые уже готовые боксы под Vagrant.

Скрипт можно легко подвергнуть версионному контролю (как и код), и это дает большее удобство, нежели поддержка у всех девелоперов нужного кастомного окружения методом рассылок изменений или создания новых образов виртуалки.

Использование этого инструментария помогает неплохо экономить время и предостеречь от многих багов, которые могут образовываться в различных окружениях (deprecated методы, смена API, забыли дать permission на папку с кешем, etc.). Плюс — возможность быстро делать на каждый проект уникальный box.

Box-овый подход дает нам возможность заниматься разработкой из родной OS, а запускать код на box-e посредством синхронизируемой web-папки между нативной и гостевой системой.

Например: ( c:/dev/vagrant/webroot %WIN% => /var/www %BOX% ).

Для HTTP — пробрасывем туннель между нативной OS и BOX OS. Для остальных коннектов используем SSH.

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

Думаю, я уже убедил вас попробовать ;). В бой!

1. Базовые инсталляции

Для старта эксперимента потребуются:

Скачиваем и инсталлируем на нашу нативную ОС.

2. Puphpet go!

В дальнейшем для приготовления конфигурации нам поможет отличный сайт для генерации скриптов Vagrant/Puppet, ориентированый на PHP.

Выбираем, что хотим видеть в нашем Box-e.

Тут я хотел бы обратить внимание на варианты связи между нативной ОС и нашим BOX-ом.

По сути, нам нужно синхронизировать файлы проекта, иметь доступ к DB из нативной OS и SSH-доступ. Начнем по порядку. Важная настройка — IP нашего BOX.

Также создаем Virtual Host проекта на сервере, пробрасываем порты и редактируем hosts file, что позволит стандартным образом через бразуер работать с проектом. Не будем заострять внимание на этом подпункте — более подробный мануал вы можете найти тут.

Синхронизацию файлов мы настроили вот таким образом:

( c:/dev/vagrant/webroot %WIN% => /var/www %BOX% ).

После окончания выбора и настроек, которые нам нужны, нажимаем Go. Скачивается архивчик, распаковываем, приходим в распакованную папку через консоль, вводим “vagrant up” и ждем результата.

Дефолтные креды root — vagrant / vagrant.

В базовой поставке с puPHPet нам предлагают phpmyadmin, но зачастую его функционала не хватает, и приятней использовать MySql Workbench / SQLYog, Это тоже не проблема: подключаемся на нашей БД через SSH, и все также работает на ура.

Кому интересно под капот — давайте немного разберем два базовых скрипта (Vagrantfile, puphet/config.yaml).

Для тех, кто не работал с YAML-форматом, — небольшое предупреждение: править очень аккуратно, все отступы в пробелах, один лишний или недостающий пробел — и ваш YAML-файл уже не парсится. Т. ч. тут шаг вправо, шаг влево — fatal error.

3. Вскрыть черный ящик.

Переходим к паре важных моментов в VagrantFile:

require ‘yaml’

# Вот начало конфига и подключение к Vagrant puppet.

configValues = YAML.load_file(‘./puphpet/config.yaml’)

# Range видимых портов для BOX-a

config.vm.usable_port_range = (10200..10500)

Все доступные настройки Vagrant file можно посмотреть в документации на его родном сайте.

В свою очередь в puphpet/config.yaml дело обстоит уже интересней тут мы можем увидеть уже текстом описаную всю начинку нашего бокса:

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

4. Командуем парадом

В этом пункте хочу осветить основные команды работы с Vagrant:

vagrant init — используем, если нам не понравился puphpet. Просто качает и готовит для нас бокс пример (vagrant init precise32)

vagrant up — включаем наш сервер кроме включения прописывает порты ip и в целом готовит бокс.

vagrant ssh — переключает нас на SSH сессию работы с сервером, если в нашей консоли есть ssh-client для Windows (Cygwin, gitbash)

или отдельно putty.

vagrant ssh-config — показывает настройки ssh и какподключиться к заветному.

vagrant halt — остановить бокс.

vagrant reload — ребут бокса.

Полный список команд рекомендую посмотреть тут.

Парочка подводных камней и счастливое окончание нашего приключения

У меня не вышло так гладко, как в мануалах, я столкнулся с проблемой в Vitrual Box — аппаратное ускорение (VT-x/AMD-V) недоступно.

Надо было включить в BIOS эту фичу.

Для определения, поддерживает ли ваш процессор VT-x/AMD-V, идем бодрым шагом на сайт его производителя и смотрим в технической характеристике процессора, хотя современные поколения процессоров все это умеют. Но, видел, бывают проблемы на Intel Atom, поэтому, владельцы нетбуков, прочекайте сразу.

Относительно поддержки PHPStorm Vagrant — всё хорошо. В любой момент мы можем запустить в Vagrant наш код. Более детальное описание этого процесса можем найти тут.

NB: Если включать Box не через Vagrant, а прямо из VirtualBox, порты/ip/alias не устанавливает, потому что эти конфигурации оживают только при запуске через Vagrant.

Вот так вот мы и подняли себе development environment в одну команду, enjoy ;).

Всем спасибо за внимание Good luck, have fun.

Поделиться:

Оставить комментарий: