Мир веб-разработки сейчас меняется, и это, в том числе, происходит благодаря Vagrant, средству управления виртуальными машинами, которое позволяет разработчикам неплохо сэкономить время и силы на поддержке рабочего окружения и синхронизации с коллегами.
Сегодня поговорим об одной из функций нового Parallels Desktop 10, по поводу которой мы получили больше всего вопросов и откликов у пользователей-разработчиков: интеграции с Vagrant. Честно говоря, это и для самих разработчиков Parallels Desktop – одна из самых любимых функций.
Если вы еще не знаете, зачем в веб-разработке нужен Vagrant, или используете в качестве основы для Vagrant виртуальную машину VirtualBox на Mac, то вам сюда :) Расскажем про первый полнофункциональный плагин для Vagrant, разработанный нашей командой.
Если вы когда-нибудь пробовали развернуть на своей рабочей машине среду для веб-разработки: базу данных, любимый фреймворк, nginx, redis и т.п., то наверняка сталкивались с тем, что ваш сетап сильно отличается от того, как ваш сайт работает в продакшене. Используемые версии пакетов не совпадают, а некоторые вообще под вашу ОС поставить невозможно, и приходится искать замену.
Один из выходов — поднимать среду в виртуальных машинах, но это работает не так хорошо, как хотелось бы: все придется делать вручную, практически так же, как если бы вам выделили виртуальный сервер.
Мы в Parallels столкнулись с похожей проблемой около года назад, когда команда внутренней разработки начала расширяться, и стало понятно, что нужно налаживать активную совместную работу внутри команды и больше экспериментировать. А тут все очень просто: если у вас есть необходимость “пощупать” какую-нибудь технологию, и вы не можете себе позволить сделать это максимально быстро, то под натиском ежедневных задач вы этого никогда не сделаете. И есть еще специфика, связанная с тем, что у нас поддерживается инфраструктура как на Linux, так и на Windows и Mac. Не буду подробно на этом останавливаться. Все, кому интересен наш use case, могут посмотреть видео с доклада про это.
Поиски решения привели нас к Vagrant. Это утилита с command-line интерфейсом, сделанная в духе unix-way. Принцип работы очень прост: у вас есть текстовый файл, описывающий какую виртуальную машину вы хотите иметь: количество ядер процессора, объем памяти, размер диска, дистрибутив ОС, и т.п. На основе этого файла при наборе команды vagrant up будет создана новая виртуальная машина, готовая к использованию. Вы можете пойти дальше, и приложить к этому файлу скрипт, настраивающий “виртуалку” под ваши нужды: установить MySQL, Django, nginx и т.п. И все это тоже будет выполнено автоматически, в момент настройки. После того, как вы поняли, что удовлетворены результатом, можно положить эти файлы в git и отправить коллеге. Таким незамысловатым образом у вас получается стандартизированная рабочая среда.
Еще одно удобное свойство Vagrant, которое мы открыли для себя, заключается в возможности “прокидывать” свою рабочую директорию с кодом внутрь “виртуалки”. Это убирает необходимость ручной синхронизации, и как только вы сохраняете файл, он моментально оказывается в виртуальной машине, и изменения можно сразу посмотреть в браузере.
Тут стоит упомянуть, что на тот момент Vagrant работал только с VirtualBox, или, при помощи премиум-плагина от оригинального автора, мог соединяться с VMware. Поскольку не только мы для себя, но и рынок уже решил, какое решение виртуализации на Mac считать лучшим, было решено сделать собственную интеграцию с Parallels Desktop. И вот, после года разработки, мы выпустили открытый плагин к Vagrant, по качеству не уступающий официальным интеграциям. Автор Vagrant, понятное дело, хочет зарабатывать деньги на продаже интеграции с VMware, поэтому пока на главной странице Vagrant нет ссылки на наше бесплатное решение. А поскольку для некоторых пользователей наличие у Vagrant каких-то интеграций или плагинов тоже может быть новостью, и для работы с ним они закрывают Parallels Desktop и запускают Virtualbox, то ниже мы опишем очень простой порядок действий на этот случай :)
Пример использования
Теперь немного практики. Я расскажу о том, как получить себе рабочую среду с Linux и Django на Mac.
Для начала вам понадобится Vagrant, который можно скачать с официального сайта, Parallels Desktop 10 и плагин vagrant-parallels, который можно установить так:
vagrant plugin install vagrant-parallels
Теперь скачаем предварительно подготовленный репозиторий:
git clone https://github.com/Parallels/vagrant-django-example.git
cd vagrant-django-example
И запустим подготовку виртуальной машины:
vagrant up --provider=parallels
Через несколько минут, когда процесс завершится, у вас будет полностью готовая к использованию виртуальная машина. Теперь все, что нужно сделать, это “прыгнуть” внутрь через ssh и создать проект Django:
vagrant ssh
# (В виртуальной машине)
django-admin.py startproject vagrant_django .
nohup python manage.py runserver [::]:8000 >&/dev/null &
Все, теперь можно выйти из виртуальной машины.
exit
Если теперь вы направите браузер на http://localhost:8000 то увидите свой сайт. А его код будет доступен в текущей папке, откуда вы запускали vagrant up.
Конструктор окружений
То, что мы проделали выше, подразумевает, что кто-то напишет Vagrantfile с инструкциями как настраивать софт. Если вы просто хотите поэкспериментировать, то есть отличный проект PuPHPet, который позволяет “набрать” себе конфигурацию виртуальной машины по компонентам, как в супермаркете. PuPHPet поддерживает vagrant-parallels, так что вы всего в нескольких кликах мышкой от нужной вам конфигурации. На выходе эта система предложит вам скачать небольшой архив со всеми нужными подготовленными файлами. Ничего, кроме перечисленных выше средств, для работы с ним вам не нужно.
Что еще можно сделать с Vagrant
На самом деле применимость Vagrant не исчерпывается средами для разработки. У себя мы, например, используем его для проверки сборки native компонентов, написанных на C++ и Objective-C. Другие примеры того, что можно делать:
- Нужно попробовать какой-нибудь необычный софт? vagrant up; установили; поэкспериментировали; vagrant destroy.
- Continuous Integration: запуск виртуальных машин из Jenkins (об этом, кстати, у меня и будет доклад в Самаре на конференции 404Fest), сборка компонентов и последующее сворачивание машины
- Тестирование веб-проектов, при котором по новым коммитам в код, сайт автоматически отправляется в виртуальную машину, подготовленную в Vagrant
- Для дизайнеров и QA инженеров, для получения “песочницы”
- Ну и, конечно, если вы используете продвинутые средства управления конфигурацией, вроде Chef или Puppet, то Vagrant это единственное разумное средство обкатки изменений в рецептах и манифестах
Почему десятая?
На самом деле те, кто успели уже попробовать vagrant-parallels, сделали это еще в версиях Parallels Desktop 8 и 9. Почему я говорю в посте о 10-ой? До нее этот проект был свободной разработкой на GitHub. В Parallels Desktop 10 поддержка Vagrant Parallels Provider не только заявлена официально – мы поддерживаем практически все его функции, помимо основных. Это и использование инструментов shared folders, и тонкая настройка сети, в общем, все то, что обычные shell-скрипты не позволят сделать с ВМ. Наконец появилась долгожданная функция перенаправления портов (port forwarding) через утилиту ‘prlctl', а не графический интерфейс. Она позволяет пробрасывать данные с определенного порта на Mac в порт виртуальной машины через протоколы TCP и UDP. Можно, допустим, запустить web-server на виртуальной машине, открыть локальный localhost:8080 на маке и попасть на свой тестируемый сайт. Теоретически c большой осторожностью можно даже форвардить порты меньше 1024 (так как процесс, который отвечает за открытие портов, запускается на Mac под root).
А что с VirtualBox?
Нам очень много писали о том, что Parallels Desktop и VirtualBox невозможно запускать одновременно – что-нибудь да вылетало. Справедливости ради – двум системам виртуализации, основанным на разных технологиях, ужиться трудно, хотя для многих пользователей это – не аргумент. Доходило до того, что мы специально искали людей с такими проблемами в Twitter и рекомендовали им использовать vagrant-parallels. Теперь мы решили эту проблему и оба продукта можно запускать вместе. Если ресурсы вашего Mac это позволяют, то одновременная работа пройдет без смерти одного из бойцов, без отключений и требований немедленно послать репорт в Parallels.
Заключение
Очевидно, что начать использовать Vagrant можно очень просто и быстро. Но, главное, — это инструмент, который очень быстро и с большими процентами окупает вложенные инвестиции и ресурсы. Поэтому, если у вас есть выбор, во что вложить свое время: в изучение нового фреймворка, технологии разработки, или инструмента, то я бы, несомненно, посоветовал именно Vagrant.
Ну а для разработчиков, которые уже используют Parallels Desktop, начать работу будет совсем тривиально.
Если у вас остались есть вопросы, вы хотите поделиться своими сценариями использования Vagrant или историями успеха, добро пожаловать в комментарии.
Поскольку наш плагин для Vagrant открытый, запросы по фичам и багам можно направлять нам на GitHub: github.com/parallels.
Следить за релизами и задавать нам вопросы можно также через Twitter: twitter.com/legal_90, twitter.com/racktear.
И сейчас весь наш саппорт тоже достаточно хорошо осведомлен про Vagrant, и про то, как его используют девелоперы. Мы очень охотно отвечаем на вопросы и помогаем людям решать проблемы. Для вас это тоже может быть большим плюсом.
Ссылки
- Vagrant
- Parallels Desktop for Mac
- Parallels GitHub
- Провайдер vagrant-parallels
- Packer: средство создания базовых образов VM
Автор: racktear