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

    Мир веб-разработки сейчас меняется, и это, в том числе, происходит благодаря 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, и про то, как его используют девелоперы. Мы очень охотно отвечаем на вопросы и помогаем людям решать проблемы. Для вас это тоже может быть большим плюсом.

    Ссылки


    Parallels
    Мировой лидер на рынке межплатформенных решений

    Comments 55

      +4
      А какой профит для девелопера от перехода с VirtualBox+vagrant на Parallels+vagrant? Или это имеет смысл только если все-равно используешь Parallels, чтобы запускать Windows приложения на OSX?
      • UFO just landed and posted this here
          +2
          А можно ли получить какие-то реальные цифры сравнения производительности?

          Работая над достаточно крупным веб-проектом в связке Windows-host + VirtualBox + Vagrant + Linux-guest столкнулся с серьезной потерей производительности. А как обстоят с этим дела у Parallels?
          0
          Вопрос в том, какое соотношение быстрее/цена.
          • UFO just landed and posted this here
            0
            При использовании vagrant & virtualbox лучше всего использовать nfs при шаринге папок. С ним все работает значительно быстрее.
              0
              Есть ещё rsync-режим, появившийся относительно недавно, также должен быть ощутимо быстрее
              • UFO just landed and posted this here
                  0
                  Для веб-девелопера в первую очередь имеет значение производительность shared-папок, т.к. весь код, который запускается, лежит в этой shared-папке. И вот стандартный VirtualBox shared folders иногда вообще абсолютно не подходит для работы (некоторые фреймворки могут по 10 секунд грузить страницу из такой папки), девелоперы пытаются что-то предпринимать типа nfs или rsync (привет, сложности на Windows хостах, да и на макоси у меня nfs глючит с debian хостом), либо совершенный отказ от shared folders (привет сложности с разворачиванием и прощай простой vagrant up). А как у вас с производительностью shared folders?
                  • UFO just landed and posted this here
                      0
                      Вообще, это интересно, что никто не жалуется. Может быть проблемы есть только у нас в PHP+Symfony2… Я попытаюсь подготовить тестовый стенд на днях, который это показывает.
                        0
                        Вот тут есть некоторые цифры. Там про VirtualBox, но по моему опыту, Shared Folders ужасно тормозят на всех машинах (я столкнулся с проблемой работая над большим проектом на Symfony2)
                        www.midwesternmac.com/blogs/jeff-geerling/vagrant-nfs-shared-folders
                        +1
                        Для веб-девелопера в первую очередь имеет значение производительность shared-папок
                        А я вот ни разу ими не пользовался — работаю что с локальным, что с удалённым сервером через SFTP.

                        И никаких тормозов не замечал.
                          +1
                          Тоже использую SFTP (хост — Windows, гость — Ubuntu).
                          Автоматический деплой файлов настроен в IDE от JetBrains.
                          Тормозов не замечаю.
                            0
                            Да, JetBrains — наше всё!

                            У меня проекты привязаны к разным deployment и я отправляю код то на локальный, то на продакшн. Зачем использовать локальные директории, если их нет на удалённом сервере — не знаю.
                            0
                            Вы и git через IDE используете, получается?
                              0
                              Да, это очень удобно.

                              Если нужно что-то разрулить — то руками в консоль.
                              0
                              Стандартный режим работы с Vagrant: вы делаете vagrant up, поднимается виртуалка, провиженится, и ваша папка маунтится в /vagrant в гость, откуда уже работает ваш проект. Т.о. любой девелопер на любой машине может сделать vagrant up, и этого будет достаточно для того, чтобы запустить проект с нуля. Если вы заливаете файлы через SFTP через IDE, то в вашем процессе разворачивания проекта появляется звено «правильно настройте правильную IDE», чего я бы хотел, например, избежать в своих проектах.
                                0
                                А зачем работать на ненастроенной IDE?

                                Сейчас у меня одинаковая работа на виртуалке, и на реальном сервере: доступ через SSH, заливка по SFTP и т.д. Мне это очень нравится и при деплое не бывает проблем.

                                Наверное, shared-директории тоже удобно, но мне нравится вот так.
                                  0
                                  Работать на ненастроенной IDE незачем. Но не все используют продукты JetBrains, как минимум потому что не все готовы платить за них деньги. А если вдруг кто-то из команды захочет Vim или Emacs использовать в работе? Поэтому я считаю, что подход «заливка по SFTP» хотя и может иногда хорошо работать, но подходит далеко не всем.
                                    0
                                    Ни в коем случае не хотел вас убедить в обратном.

                                    До покупки IDE от JetBrains я успешно получал их Open Source лицензии бесплатно. У обсуждаемой Parallels Desktop, насколько я понимаю, такой возможности нет.
                              +1
                              Практически, специально для Вас писал
                              habrahabr.ru/post/248019/
                                0
                                спасибо! =)
                      0
                      PuPHPet — молодцы! Много всего полезного добавили, например ruby / nodejs / python.
                        +10
                        Прочитал, пошел и купил MacBook Pro.
                          +3
                          А я полез на шкаф за ключом для Parallels Desktop.

                          Покупал жене вместе с Mac — она думала, что не сможет освоиться без Windows приложений. Ага, Windows прожил ровно неделю, и с тех пор коробка Parallels пылится в шкафу.
                            0
                            А у меня пара штук бесплатных валяется.
                            Покупал на Бихе макбуки на семейство — и там диск с PD идет «прицепом» в виде бонуса (а вообще забавно — получить CD в комплекте с Macbook Air, где привода отродясь нет).
                            • UFO just landed and posted this here
                            +8
                            В любой непонятной ситуации иди и покупай Macbook Pro!
                            –3
                            Было бы не так грустно, если бы не лицензионная политика Parallels
                              +3
                              Вам кажется странным, что ПО стоит денег? Ну, так для этого люди каждый год выпускают версию, которая имеет 70-80 изменений, работа которых стоит денег. А если хочется бесплатного, пользуйтесь другими аналогами. Но там уже и возможности другие, и юзабилити на другом уровне
                                0
                                Мне кажется странным, что ПО стоит каждый раз _таких_ денег. И вангую что с выходом релиза yosemite (кстати завтра) Параллелс опять напишет мне что «упппс, а эта версия не предназначена для работы в этой операционной системе».
                                  0
                                  Только что установил Parallels Desktop 9 на Developer Preview 8 — полёт нормальный.
                                    +2
                                    До релиза Maverics то же самое было с 8 версией, а потом после апдейта лавочка прикрылась. Дружу с Параллелс еще с 7 версии и каждый год выкладывать за апдейты по 2000 руб уже прилично подзадолбало ради того, чтобы оно просто работало
                                      0
                                      О как.

                                      Ну тогда не буду пока удалять образы VirtualBox, спасибо!
                                      • UFO just landed and posted this here
                                          0
                                          Подтверждаю, у меня 8-я нормально работала, даже удивился, все откладывал апдейт ОС из-за нее, а потом что-то забыл и проапдейтил.
                                          Спасибо, что устранили конфликт c VirtualBox, я частенько забывал, что у меня на другом столе виртуалка осталась и при vagrant up всегда ловил зависание. Да и неудобно каждый раз одно закрывать, другое открывать…
                                0
                                Вот тут: OS X, Vagrant и Parallels Desktop. Строим свои коробки с помощью veewee я писал о сборке Vagrant образов для Parallels Desktop 9.
                                С 10-м еще не пробовал.
                                • UFO just landed and posted this here
                                  0
                                  Кажется нельзя скачать с вагрантклауд готовые образы под parallels. Это очень больно
                                  • UFO just landed and posted this here
                                      0
                                      Хм. очень странно. Я, естественно, нашел образы на вагрант клауде, но 5 минут назад они не качались. Очень странно
                                      • UFO just landed and posted this here
                                          0
                                          Скорее всего у меня что-то глючило. А разве не vagrantclound хостит образы? Или там только ссылки хранятся? Как же box share?
                                          • UFO just landed and posted this here
                                              0
                                              ясно, спасибо за рязъяснения!
                                        0
                                        А дебиан выложите?
                                    +1
                                    Мне очень не нравится в Parallels Desktop то, что никак нельзя виртуальные машины сгруппировать. Я к примеру работаю с кластерами и складываю все ноды в группу, названную по смыслу. Далее запускаю разом все машины в группе или же останавливаю их. Есть возможность сделать образы или же сбросить состояния, ну и тд. Все это к тому, что мне как разработчику неудобно пока еще пользоваться Parallels. В этом отношении пока еще VirtualBox со всеми его минусами более юзабильный для админов и разработчиков. Жду подобных возможностей и в Parallels.
                                      +1
                                      Замечание уместное — на текущий момент графический интерфейс Parallels Desktop этого действительно не позволяет.

                                      Однако, если вы решите использовать его с Vagrant, то такой проблемы не будет — вы можете задать конфигурацию сразу нескольких виртуальных машин в одном Vagrantfile и оперировать этими машинами как вместе, так и по отдельности: docs.vagrantup.com/v2/multi-machine/index.html
                                        +1
                                        Согласен, можно и так. Но дело в том, что Vagrant у меня не всегда и не везде. Куда проще порою иметь исходный эталонный образ, с которого просто создается машина или группа машин. При этом не заморачиваясь с боксами вагранта. 2-3 клика у меня уже клоны образов. Тем более на прошках SSD и так является узким местом в плане места. Потому эталонный образ оставляет всегда за собою 200-400 Мб, а в клоне только то, что доустановил поверх, и не отъедают место на харде. Здесь уже идет совокупность разных факторов (не говоря уже о переносимости).
                                      +1
                                      Кстати, сегодня набор официальных Vagrant-боксов от Parallels был значительно расширен: vagrantcloud.com/parallels
                                      Добавили боксы с дистрибутивами CentOS 5.10, CentOS 7.0 и Debian 7.6, а так же 32-битные версии большинства имеющихся боксов.

                                      Only users with full accounts can post comments. Log in, please.