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

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.