- PVSM.RU - https://www.pvsm.ru -

Web-разработка с комфортом: Parallels Desktop 10 + Vagrant

Мир веб-разработки сейчас меняется, и это, в том числе, происходит благодаря Vagrant, средству управления виртуальными машинами, которое позволяет разработчикам неплохо сэкономить время и силы на поддержке рабочего окружения и синхронизации с коллегами.
Сегодня поговорим об одной из функций нового Parallels Desktop 10, по поводу которой мы получили больше всего вопросов и откликов у пользователей-разработчиков: интеграции с Vagrant. Честно говоря, это и для самих разработчиков Parallels Desktop – одна из самых любимых функций.
Если вы еще не знаете, зачем в веб-разработке нужен Vagrant, или используете в качестве основы для Vagrant виртуальную машину VirtualBox на Mac, то вам сюда :) Расскажем про первый полнофункциональный плагин для Vagrant, разработанный нашей командой.

Web разработка с комфортом: Parallels Desktop 10 + Vagrant


Если вы когда-нибудь пробовали развернуть на своей рабочей машине среду для веб-разработки: базу данных, любимый фреймворк, nginx, redis и т.п., то наверняка сталкивались с тем, что ваш сетап сильно отличается от того, как ваш сайт работает в продакшене. Используемые версии пакетов не совпадают, а некоторые вообще под вашу ОС поставить невозможно, и приходится искать замену.

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

Мы в Parallels столкнулись с похожей проблемой около года назад, когда команда внутренней разработки начала расширяться, и стало понятно, что нужно налаживать активную совместную работу внутри команды и больше экспериментировать. А тут все очень просто: если у вас есть необходимость “пощупать” какую-нибудь технологию, и вы не можете себе позволить сделать это максимально быстро, то под натиском ежедневных задач вы этого никогда не сделаете. И есть еще специфика, связанная с тем, что у нас поддерживается инфраструктура как на Linux, так и на Windows и Mac. Не буду подробно на этом останавливаться. Все, кому интересен наш use case, могут посмотреть видео с доклада про это [1].

Поиски решения привели нас к Vagrant [2]. Это утилита с command-line интерфейсом, сделанная в духе unix-way. Принцип работы очень прост: у вас есть текстовый файл, описывающий какую виртуальную машину вы хотите иметь: количество ядер процессора, объем памяти, размер диска, дистрибутив ОС, и т.п. На основе этого файла при наборе команды vagrant up будет создана новая виртуальная машина, готовая к использованию. Вы можете пойти дальше, и приложить к этому файлу скрипт, настраивающий “виртуалку” под ваши нужды: установить MySQL, Django, nginx и т.п. И все это тоже будет выполнено автоматически, в момент настройки. После того, как вы поняли, что удовлетворены результатом, можно положить эти файлы в git и отправить коллеге. Таким незамысловатым образом у вас получается стандартизированная рабочая среда.

Еще одно удобное свойство Vagrant, которое мы открыли для себя, заключается в возможности “прокидывать” свою рабочую директорию с кодом внутрь “виртуалки”. Это убирает необходимость ручной синхронизации, и как только вы сохраняете файл, он моментально оказывается в виртуальной машине, и изменения можно сразу посмотреть в браузере.

Тут стоит упомянуть, что на тот момент Vagrant работал только с VirtualBox, или, при помощи премиум-плагина от оригинального автора, мог соединяться с VMware. Поскольку не только мы для себя, но и рынок уже решил [3], какое решение виртуализации на Mac считать лучшим, было решено сделать собственную интеграцию с Parallels Desktop. И вот, после года разработки, мы выпустили открытый плагин к Vagrant, по качеству не уступающий официальным интеграциям. Автор Vagrant, понятное дело, хочет зарабатывать деньги на продаже интеграции с VMware, поэтому пока на главной странице Vagrant нет ссылки на наше бесплатное решение. А поскольку для некоторых пользователей наличие у Vagrant каких-то интеграций или плагинов тоже может быть новостью, и для работы с ним они закрывают Parallels Desktop и запускают Virtualbox, то ниже мы опишем очень простой порядок действий на этот случай :)

Пример использования

Теперь немного практики. Я расскажу о том, как получить себе рабочую среду с Linux и Django на Mac.

Для начала вам понадобится Vagrant, который можно скачать с официального сайта [4], Parallels Desktop 10 [5] и плагин 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 [6] то увидите свой сайт. А его код будет доступен в текущей папке, откуда вы запускали vagrant up.

Конструктор окружений

То, что мы проделали выше, подразумевает, что кто-то напишет Vagrantfile с инструкциями как настраивать софт. Если вы просто хотите поэкспериментировать, то есть отличный проект PuPHPet [7], который позволяет “набрать” себе конфигурацию виртуальной машины по компонентам, как в супермаркете. PuPHPet поддерживает vagrant-parallels, так что вы всего в нескольких кликах мышкой от нужной вам конфигурации. На выходе эта система предложит вам скачать небольшой архив со всеми нужными подготовленными файлами. Ничего, кроме перечисленных выше средств, для работы с ним вам не нужно.

Что еще можно сделать с Vagrant

На самом деле применимость Vagrant не исчерпывается средами для разработки. У себя мы, например, используем его для проверки сборки native компонентов, написанных на C++ и Objective-C. Другие примеры того, что можно делать:

  • Нужно попробовать какой-нибудь необычный софт? vagrant up; установили; поэкспериментировали; vagrant destroy.
  • Continuous Integration: запуск виртуальных машин из Jenkins (об этом, кстати, у меня и будет доклад в Самаре [8]на конференции 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 [9].
Следить за релизами и задавать нам вопросы можно также через Twitter: twitter.com/legal_90 [10], twitter.com/racktear [11].
И сейчас весь наш саппорт тоже достаточно хорошо осведомлен про Vagrant, и про то, как его используют девелоперы. Мы очень охотно отвечаем на вопросы и помогаем людям решать проблемы. Для вас это тоже может быть большим плюсом.

Ссылки

Автор: racktear

Источник [16]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/virtualizatsiya/70361

Ссылки в тексте:

[1] видео с доклада про это: http://www.youtube.com/watch?v=jgtbp3I3uGE

[2] Vagrant: http://www.vagrantup.com

[3] рынок уже решил: http://www.forbes.ru/kompanii/internet-telekom-i-media/251090-plata-za-perekhod-kak-parallels-vyigrala-konkurentsiyu-u-ap

[4] официального сайта: http://www.vagrantup.com/downloads.html

[5] Parallels Desktop 10: http://www.parallels.com/ru/products/desktop/

[6] http://localhost:8000: http://localhost:8000

[7] PuPHPet: https://puphpet.com

[8] доклад в Самаре : http://2014.404fest.ru/reports/jenkins/

[9] github.com/parallels: https://github.com/parallels

[10] twitter.com/legal_90: https://twitter.com/legal_90

[11] twitter.com/racktear: https://twitter.com/racktear

[12] Parallels Desktop for Mac: http://www.parallels.com/ru/products/desktop

[13] Parallels GitHub: https://github.com/Parallels

[14] Провайдер vagrant-parallels: https://github.com/Parallels/vagrant-parallels

[15] Packer: средство создания базовых образов VM: http://www.packer.io

[16] Источник: http://habrahabr.ru/post/238139/