Содержание


Обновленный PHP

Cоздание виртуальных машин с помощью инструментов Vagrant и PuPHPet

Автоматизация создания допускающих совместное использование виртуальных машин для разработки или для развертывания

Comments

Серия контента:

Этот контент является частью # из серии # статей: Обновленный PHP

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Обновленный PHP

Следите за выходом новых статей этой серии.

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

Я повидал множество различных попыток решения этой проблемы. Более десяти лет назад всем участникам группы порой выдавали точно такие же компьютеры, какие использовались в производственной среде. В более поздние времена обычная практика состояла в формировании среды разработки на хостинге, которую все программисты использовали совместно. Кроме того, эта практика требовала осуществления разработки в дистанционном режиме. Это решение было эффективным, но имело огромный недостаток – оно не допускало разработки в офлайновом режиме.

На моей машине все работает

— Любой разработчик

Благодаря повышению вычислительной мощности современные разработчики могут использовать для преодоления этой проблемы виртуальные машины. Если у каждого участника рабочей группы имеется виртуальная машина для разработки, то можно единовременно создать единую конфигурацию виртуальной машины для всей группы. Точно так же, как инструмент Composer заботится об установке библиотек для разработчика, виртуальные машины можно использовать для стандартизации самой системы. В этом учебном пособии описываются инструменты с открытым исходным кодом, совместно позволяющие автоматизировать процесс создания и конфигурирования виртуальных машин.

Виртуальные машины для локальной разработки

В Википедии приведено следующее определение виртуальной машины.

Виртуальная машина – это система, которая предоставляет полную системную платформу, поддерживающую исполнение полной операционной системы. Обычно виртуальная машина эмулирует существующую архитектуру и создается с целью предоставления платформы для исполнения программ в тех случаях, когда реальные аппаратные средства недоступны для использования.

Использование виртуальной машины для эмуляции физического компьютера обеспечивает такие преимущества, как единообразие разработки и развертывания. Если вы развертываете свою систему в облачной архитектуре, такой как Amazon Web Services, это развертывание уже осуществляется на виртуальной машине. В этой статье я сосредоточусь на исполнении виртуальной машины на локальном компьютере.

Имеется несколько программных продуктов, которые можно применить для создания локальных виртуальных машин. Наиболее распространенными из них являются следующие: VMware (Windows®/Linux®/Mac), Parallels (Mac) и VirtualBox (Windows/Linux/Solaris/Mac). В этом учебном пособии я буду использовать продукт VirtualBox. Помимо того, что VirtualBox работает на всех вышеперечисленных платформах, именно ее чаще всего используют PHP-разработчики. VirtualBox была разработана компаний Oracle в рамках проекта с открытым исходным кодом и абсолютно бесплатна для использования.

Чтобы продолжить изучение предлагаемого материала, перейдите на страницу загрузки VirtualBox и загрузите установщик для своей операционной системы. Запустите установщик и выполните под его руководством обычный процесс установки программного обеспечения для своей операционной системы. После завершения установки запустите VirtualBox. Экран приветствия показывает, что у вас пока нет никаких виртуальных машин (рис. 1).

Рисунок 1. Новая установка VirtualBox
Screenshot of the VirtualBox application's welcome screen
Screenshot of the VirtualBox application's welcome screen

Теперь рассмотрим процесс создания виртуальной машины в ручном режиме (позднее в этом учебном пособии будет показано, как автоматизировать эти шаги, однако я рекомендую вам воспроизвести все шаги в ручном режиме, чтобы понять все тонкости и последствия этого процесса). После нажатия на кнопку New появится диалоговое окно Name and operating system, предлагающее ввести для новой виртуальной машины параметры Name (имя), Type (тип) и Version (версия). Как показано на рис. 2, я выбрал установку версии Ubuntu.

Рисунок 2. Выбор Ubuntu для виртуальной машины
Screenshot of choosing to make an Ubuntu machine
Screenshot of choosing to make an Ubuntu machine

После этого я прохожу через серию диалоговых окон. VirtualBox спрашивает у пользователя, сколько оперативной памяти нужно выделить его виртуальной машине, какого размера должен быть виртуальный диск и какой файловый формат для него использовать. Рекомендуется для всех этих параметров выбрать значения по умолчанию, если у вас нет определенной причины поступить иначе. После выбора всех значений по умолчанию создается виртуальная машина, и я могу увидеть всю ее конфигурацию (рис. 3).

Рисунок 3. Конфигурация новой виртуальной машины
Screenshot of the new virtual machine being displayed
Screenshot of the new virtual machine being displayed

Пока у меня еще нет работающей виртуальной машины. VirtualBox создал для меня виртуальную машину, готовую к установке на нее дистрибутива Ubuntu. Однако на данный момент эта машина ничем не отличается от физической машины, собранной из аппаратных компонентов. Ее можно включить, но до тех пор, пока вы не установите на ее жесткий диск операционную систему, ничего не произойдет.

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

Рисунок 4. Запрос на указание установочного диска
Screenshot of prompting for installation medium
Screenshot of prompting for installation medium

Если бы в этот момент я был готов завершить создание своей виртуальной машины для Ubuntu, то я указал бы продукту VirtualBox на образ диска для установщика Ubuntu, после чего начался бы процесс полной установки Linux. Однако сейчас моя цель не в этом. Мне нужно создавать воспроизводимые единообразные виртуальные машины — а для этого требуется более высокая степень автоматизации, чем позволяет обеспечить установка в ручном режиме.

Представляем Vagrant

Vagrant – это слой автоматизации, предназначенный для автоматической инициализации виртуальных машин для VirtualBox и прочего программного обеспечения виртуальных машин. Vagrant полностью автоматизирует шаги, которые я выполнил в разделе "Виртуальные машины для локальной разработки" при конфигурирования VirtualBox для создания новой машины.

С помощью специального конфигурационного файла Vagrant задает различные настройки для виртуальной машины и устанавливает основную операционную систему по выбору пользователя. Пользователь может подробно указать, какую именно виртуальную машину он хочет получить. Vagrant сохраняет всю эту информацию в файле с именем Vagrantfile, который вы затем можете перенести в свои проекты по созданию программного обеспечения. Подобно файлу composer.json, предназначенному для сборки проекта (см. статью под названием "Обновленный PHP: Инструмент Composer для манипулирования зависимостями в PHP"), файл Vagrantfile точно определяет систему, которую пользователь хочет установить. Вы просто инициируете команду vagrant up, после чего инструмент Vagrant создает и запускает соответствующий сервер.

Кроме того, проект Vagrant имеет доступ к каталогу с большим количеством заранее сконфигурированных машин. Пользователь может задействовать эти машины в качестве базовых конфигураций при построении своих машин, что существенно упрощает создание новых инсталляций в собственных целях.

Теперь с помощью Vagrant я могу автоматически создать именно ту виртуальную Ubuntu-машину, которую я хотел получить ранее. Загрузите Vagrant со страницы Downloads и запустите соответствующий установщик для своей операционной системы (снова напоминаю, что позднее в этом учебном пособии будет описана дополнительная автоматизация, заменяющая шаги, которые я собираюсь выполнить здесь, но я рекомендую вам воспроизвести все эти шаги в ручном режиме, чтобы понять процесс).

Создание и конфигурирование виртуальной Ubuntu-машины

Инструмент Vagrant работает из командной строки, поэтому после установки вы не увидите графического интерфейса Vagrant. В документации по Vagrant, имеется ссылка на каталог Atlas-образов (Atlas box) от HashiCorp. Подобно каталогу Packagist для инструмента Composer, этот каталог является местоположением по умолчанию, в котором инструмент Vagrant ищет образы виртуальных машин для использования в качестве вашего базового образа. Этот каталог имеет поисковый индекс для отыскания образов (рис. 5).

Рисунок 5. Каталог Atlas-образов (box) от HashiCorp
Screenshot of the HashiCorp Atlas catalog
Screenshot of the HashiCorp Atlas catalog

На самом верху этой страницы имеется превосходный вариант для меня – это официальная версия Trusty Tahr, новейшего выпуска Ubuntu. Я запомнил имя образа, показанное в каталоге (ubuntu/trusty64), и теперь могу выполнить следующие команды:

 vagrant init ubuntu/trusty64 vagrant up

При выполнении этих команд на экран будет выведено множество строк (подобных показанным на рис. 6).

Рисунок 6. Результаты выполнения команд vagrant init и vagrant up
Screen output from starting Ubuntu via Vagrant
Screen output from starting Ubuntu via Vagrant

Готово! Я все сделал. Я не только создал машину VirtualBox, но и сконфигурировал ее с дистрибутивом Ubuntu, а затем запустил. Моя виртуальная машина работает в фоновом режиме и готова к подключению. Для этого достаточно ввести с клавиатуры команду vagrant ssh.

Другие vagrant-команды

Вам могут понадобиться и другие распространенные команды, некоторые из которых перечислены ниже.

vagrant halt
Принудительно завершает работу исполняющейся виртуальной машины.
vagrant destroy
Завершает работу виртуальной машины и полностью удаляет ее.
vagrant suspend
Приостанавливает работу виртуальной машины и сохраняет ее текущее состояние.
vagrant resume
Возобновляет работу ранее приостановленной виртуальной машины.
vagrant status
Сообщает о текущем состоянии виртуальной машины.

Vagrant предлагает множество других возможностей, описанных в документации, таких как синхронизированные папки (избавляющие от необходимости подключаться по ssh к образу для редактирования кода), специальные сетевые средства, совместно используемые образы и т. д. Файл Vagrantfile даже можно сконфигурировать для одновременного создания и обслуживания нескольких машин. Этот конфигурационный файл может показаться несколько запутанным, однако позднее я покажу, почему это не составляет проблемы.

Представляем PuPHPet

К настоящему моменту я установил VirtualBox и Vagrant, а затем с помощью Vagrant автоматизировал создание виртуальной машины. Однако мне по-прежнему нужно установить программное обеспечение на моей виртуальной машине. Снова напомню, что выполнение этого шага в ручном режиме с большой вероятностью приведет к несогласованности. К счастью, для избавления от подобных неприятностей имеется несколько продуктов для ИТ-автоматизации (другое название – автоматизация инфраструктуры). К этой категории относится и проект с открытым исходным кодом Puppet от компании PuppetLabs. Инструмент Puppet использует довольно сложную, хорошо документированную систему конфигурационных файлов, посредством которых пользователь указывает, какое программное обеспечение необходимо установить, какие команды выполнить, какие параметры настроить и т. д.

В середине 2013 года PHP-разработчик Хуан Треминио (Juan Treminio) ценой немалых усилий научился конфигурировать Vagrant и работать со сложными Puppet-файлами, чтобы создать полностью автоматическую систему. Он решил, что нужно освободить других PHP-разработчиков от необходимости преодолевать эти трудности, в результате чего и родился инструмент PuPHPet. Созданный Хуаном Треминио PuPHPet представляет собой онлайновый графический интерфейс, позволяющий пользователю указать, где будет развернута его машина, какая операционная система ему нужна и какое программное обеспечение он желает установить/сконфигурировать на этой машине. После этого PuPHPet генерирует для пользователя конфигурационные файлы Vagrantfile и Puppet. Затем пользователю нужно лишь запустить команду vagrant up, и все заработает.

В предположении, что вы уже установили VirtualBox и Vagrant, перейдите к начальной странице PuPHPet. После нажатия на ссылку Click Here to Get Started Right Away вы начнете прохождение по серии простых в использовании конфигурационных страниц. На рис. 7 показана начальная страница PuPHPet..

Рисунок 7. Начальная страница PuPHPet
Screenshot of the PuPHPet getting-started page
Screenshot of the PuPHPet getting-started page

На каждом шаге этого процесса (по мере прохождения по пунктам меню в левой части страницы) пользователь конфигурирует определенный аспект сервера:

  • Deploy Target: На этом шаге осуществляется выбор поставщика виртуальной машины (по умолчанию это VirtualBox), а также операционной системы и предпочтительного дистрибутива, например, Ubuntu Trusty.
  • System: На этом шаге можно указать пакеты для установки (например, vim), настроить users/groups/cronjobs и т. д.
  • Web Servers: На этом шаге можно установить Nginx или Apache, а также заранее сконфигурировать веб-сервер.
  • Languages: Для PHP (по умолчанию; другие варианты: Ruby, Python и Node.js) можно не только выбрать версию, но и изменить конфигурацию PHP при необходимости.
  • Databases: По умолчанию в качестве базы данных используется MySQL. На этом шаге задается основная конфигурационная информация, такая как пароль пользователя root и все базы данных, которые вам необходимо создать.

Другие пункты меню — в том числе Mail Tools, Work Queues и Search Servers — предлагают подобные опции для других инструментов, которые могут потребоваться продвинутым веб-приложениям.

После того как вы выберете значения для всех конфигурационных параметров (конфигурация по умолчанию вполне пригодна для стандартной системы PHP-разработки), вы дойдете до пункта меню Create Archive. Нажмите Create Archive для перехода к странице Download Your Customized Archive (см. рис. 8).

Рисунок 8. Страница PuPHPet для загрузки вашего специализированного архива
Screenshot of the PuPHPet download-archive page
Screenshot of the PuPHPet download-archive page

Нажмите Go ahead then, make it!, чтобы создать файл Vagrantfile и получить ZIP-файл со всей своей конфигурацией.

Вы создали пригодную для многократного использования систему, которую можно предоставить в совместное пользование другим разработчикам в качестве воспроизводимого ресурса. Загружаемый ZIP-файл содержит не только файл Vagrantfile, но и папку, содержащую остальную часть конфигурации (для Puppet). Вам достаточно лишь выполнить команду vagrant up, чтобы начать процесс создания системы, точно соответствующей вашим спецификациям. Обязательно учитывайте, что выполнение всех необходимых установок может потребовать определенного времени. Эту конфигурацию можно проверить в системе управления версиями или передать ее в совместное использование коллегам по рабочей группе. При желании вы также можете перейти к конфигурационным файлам в каталоге puphpet и дополнительно сконфигурировать или настроить свою систему. Все vagrant-команды, которые я рассмотрел в разделе "Представляем Vagrant", работают и с этим образом Vagrant.

Заключение

В этом цикле статей было показано, насколько значительно язык PHP развился за годы своего существования. Он не только выдержал испытание временем — на его основе функционирует 82% веб-сайтов в Интернете — но и превратился в сложную и весьма совершенную систему. Кроме того, вокруг языка PHP выросла экосистема, позволяющая осуществлять на нем профессиональную разработку корпоративного уровня. Создаете ли вы очередной аналог Facebook или интранет-сеть для своей компании, PHP является превосходным мощным инструментом для решения ваших задач. Недавнее добавление инструмента PuPHPet к этой экосистеме устранило значительную часть проблем разработки, особенно в больших проектах с десятками и сотнями PHP-разработчиков, работающих совместно для достижения общей цели.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Web-архитектура, Open source
ArticleID=1023845
ArticleTitle=Обновленный PHP: Cоздание виртуальных машин с помощью инструментов Vagrant и PuPHPet
publish-date=12112015