Простая сборка виртуальных машин с помощью PuPHPet

в 6:12, , рубрики: php, PuPHPet, vagrant, Веб-разработка, виртуализация, метки: , ,

Перевод первой части Build Virtual Machines Easily With PuPHPet.

Простая сборка виртуальных машин с помощью PuPHPet
Создание и управление средами разработки расстраивает вас, замедляет работу или отвлекать вас от разработки? У вас возникают трудности из-за того, что ваше локальное окружение и окружение при деплое отличаются? Если это так, у меня есть для вас решение — PuPHPet!

Введение

Я не могу с уверенностью сказать за вас, но одна из моих любимых мозолей* в разработке — это окружение, будь то создание и поддержание его для различных проектов с различными потребностями, обеспечение взаимодействия команды разработчиков, (особенно, распределенной), или настройка сред для разработки, тестирования и боевого окружения. Все это может быть трудоемкой задачей, особенно когда выполняется вручную.

В зависимости от требований руководства или клиентов разнообразие вариантов выбора может вогнать в депрессию. Все они могут тянуть в разные стороны (и тянут!), зачастую одновременно.

Взять например варианты выбора базы данных MySQL, PostgreSQL, Oracle или SQLServer. А также NoSQL решения, таких как Cassandra, Hadoop, и Redis. Или выбор сервера, например Apache или Nginx. Список можно продолжать и продолжать. И когда рядом нет всегда готового помочь сисадмина (скажем фрилансер или очень небольшая команда разработчиков), время, затраченное на поддержание среды разработки значительно увеличивается, а мы превращаемся в DevOps*.

Чтобы наконец покончить с таким положением дел и сделать весь процесс как можно более эффективным, я приступил к изучению Vagrant и Puppet. Из бесед с коллегами и тщательному поиску на просторах интернета стало ясно, что эти два средства, фактически являются стандартом для создания повторно используемых сред. Если вы не знакомы с этими отличными инструментами, вот две краткие выдержки из их соответствующих руководств:

Vagrant:

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

Puppet:

ПО, автоматизирующее управление инфраструктурой на протяжении его жизненного цикла, от резервирования и конфигурирования до настройки взаимодействия и отчетности. Используя Puppet вы можете легко автоматизировать повторяющиеся задачи, например, быстро развернуть критически важные приложения, и активно управлять изменениями, быстро масштабирование с 10 до 1000 серверов, на собственном оборудовании в облаке.

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

Введение в PuPHPet

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

Первоначально PuPHPet задумывался Juan Treminio как чертовски простое средство создания рабочего окружения для, преимущественно, PHP-разработчиков.

Он фокусируется на 5 направлениях:

  • Развертывание (память, IP-адрес, проброс портов)
  • Базовые настройки сервера
  • PHP (модули, библиотеки, настройки конфигурации)
  • База данных (PostgreSQL, MySQL)
  • Веб-сервер (Apache 2, Nginx)

Если вам необходим PHP 5.5 в связке с PostgreSQL и Nginx или PHP 5.4 с Apache 2 и MySQL, вы можете быстро создать и загрузить необходимую конфигурацию.

С PuPHPet, окружения будет готово в течении получаса и все, что нужно сделать, это выполнить команду:

vagrant up

Вот так вот. В папке с разархивированным PuPHPet нужно использовать эту команду, немного подождать и готово. Не верите? Давайте вместе пошагово разберем весь процесс, от начала и до конца.

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

Необходимое ПО

Небольшое замечание, прежде чем мы начнем. Одна из самых больших проблем, с которыми я столкнулся, когда я впервые столкнулся c PuPHPet — проблемы с совместимостью право версий Vagrant и VirtualBox.

В настоящее время я использую Vagrant 1.3.5 и VirtualBox 4.3.2 и они работают безупречно. Для начала установить эти два пакета.

Создание конфигурации

Когда они будут установлены откройте puphpet.com. В самом верху предложены 4 варианта конфигурации: Local (т.е. на локальном компьютере), Digital Ocean, Rackspace и Amazon Web Services. Выберите Local, другие варианты мы сейчас рассматривать не будем.

В разделе «Local VM Details» мы можем выбрать следующие опции:

  • Операционная система
  • Имя хоста
  • IP-адрес
  • Объем оперативной памяти

Для нашего примера мы используем Debian Wheezy 7.2 x64 with VirtualBox 4.3 Это позволит нам использовать PHP 5.4 или 5.5. Оставшиеся 3 опции можно оставить как есть или изменить, если считаете нужным.

Далее раздел Local VM Forwarded Ports. Здесь я ничего не трогал, но если вы хотите, то можете настроить здесь проброс портов с локальной машины на виртуальную.

Простая сборка виртуальных машин с помощью PuPHPet

Совместное использование папок

Здесь Vagrant и Puppet начинают показывать всю свою мощь и гибкость. В Box Sync Folder Source нужно указать локальный каталог, который будет синхронизирован с каталогом в виртуальной машине, указанный в Box Sync Folder Target. Я оставил этот пункт по-умолчанию, также как и тип папок в Shared Folder Type.

Эта опция пригодится, если вы хотите создать несколько пользовательских каталогов в виртуальной машине. Скажем, у вас есть рабочая папка с проектом в ~/Documents/workspace/your-project. Вы можете отобразить этот каталог непосредственно в корне веб-сервера вашей виртуальной машины. Таким образом, вы можете разрабатывать локально, без синхронизации или необходимости ручного копирования в рабочую папку проекта в виртуальной машине.

Простая сборка виртуальных машин с помощью PuPHPet

Базовые настройки сервера

Если вам для работы необходимы конкретные пакеты, такие как Git, subversion, Vim, и т.д., то их необходимо перечислять в этом разделе. Единственное, что следует помнить, — имя пакета должно быть указано также, как и в выбранной операционной системе.

Простая сборка виртуальных машин с помощью PuPHPet

Веб-сервер

Apache или Nginx? Сейчас я выберу Apache. Затем необходимо указать модули, которые будут установлены и включены, введя в поле Apache Modules. Чтобы облегчить процесс ввода названий модулей, а также избежать ошибок, поле ввода будет представлено всплывающим списком доступных вариантов.

Далее идет конфигурация Virtual Host. В полях имя сервера и псевдоним указывается необходимое доменное имя. Для того, чтобы это настройка сработала, в файле hosts локального компьютера нужно добавить запись данного домена с соответствующим ip. В поле Document Root стоит указать ту же директорию, что и в Box Sync Folder Target, чтобы сделать синхронизацию простой и красивой. Если у вас нет особой необходимости, оставьте в поле Port 80, т.е. по-умолчанию.

Оставшиеся две настройки, Environment Variables и AllowOverride изменить, только если ваше приложение нуждается в этом. (Прим. пер. — не совсем понял назначение этих двух опции, кто в курсе — проясните пожалуйста).

Простая сборка виртуальных машин с помощью PuPHPet

PHP

Здесь не так много опций, но основные, как раз те, что нужны чаще всего — присутствуют. Я оставил по-умолчанию PHP 5.5 (я думаю, сейчас уже вряд ли стоит смотреть на версии ниже этой). Я также отметил установку Composer. Если вы не использовали Composer, или не уверены нужен ли он вам, советую познакомиться с ним поближе, он стоит того.

В разделе INI Settings, я оставил уже выбранные опции, а затем добавил allow_url_fopen, allow_url_include, error_log, file_uploads и apc.enabled. Не стесняйтесь сделать то же самое, или просмотреть и выбрать из обширного списка.

Я изменил PHP Timezone на Europe/Berlin как наиболее близкий к моему местоположению. Советую поступить также, и выбрать нужный вам часовой пояс. В PHP Modules я остановился на таком списке: cli, intl, mcrypt, cgi, curl, memcached, memcache, pspell, tidy и sqlite. Просмотрите список и добавить те, которые вам нужны. Для модулей PEAR и Pecl я оставил все как было.

Я выбрал установку Xdebug (по-умолчанию) но не Xhprof. Настоятельно рекомендую использовать XDebug и вам.

Простая сборка виртуальных машин с помощью PuPHPet

База данных

Так, теперь внимательно. Для нашего примера я выбрал MySQL, установил пароль для root и оставили привилегии для всех. Название БД SitePoint, имя пользователя TestUser и пароль testpassword. У меня нет установочного SQL файла в данном примере, поэтому оставлю последнее поле пустым.

Простая сборка виртуальных машин с помощью PuPHPet

Создание и загрузка конфигурации

Простая сборка виртуальных машин с помощью PuPHPet

Теперь, просто нажмите большую кнопку Go ahead then, make it. Вы увидите, что загрузку началась. После её окончания, распакуйте архив и перейдите в каталог в вашем терминале. Оттуда, запустите vagrant up.

Начинается процесс создания виртуальной машины. Если вы не загружали ранее файл Box (образ ОС), который указан при создании конфигурации, вам придется ждать немного дольше, сначала будет произведена загрузка образа и только после этого начнется создание виртуальной машины. Если все пройдет нормально, вы увидите следующий вывод:

vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'debian-wheezy72-x64-vbox43'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Running 'pre-boot' VM customizations...
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /var/www
[default] -- /tmp/vagrant-puppet/manifests
[default] Running provisioner: shell...
[default] Running: /var/folders/_w/k6fxbl615w700lgkrtt0vb3w0000gn/T/vagrant-shell20131126-3538-kid3ga
stdin: is not a tty

 ____        ____  _   _ ____      _      generated using
|  _  _   _|  _ | | | |  _  ___| |_   ___ ___  _ __ ___
| |_) | | | | |_) | |_| | |_) / _  __| / __/ _ | '_ ` _ 
|  __/| |_| |  __/|  _  |  __/  __/ |_ | (_| (_) | | | | | |
|_|    __,_|_|   |_| |_|_|   ___|__(_)______/|_| |_| |_|

Created directory /.puphpet-stuff
Running initial-setup apt-get update
Finished running initial-setup apt-get update
[default] Running provisioner: shell...
[default] Running: /var/folders/_w/k6fxbl615w700lgkrtt0vb3w0000gn/T/vagrant-shell20131126-3538-1116fzj
stdin: is not a tty
Downloading http://apt.puppetlabs.com/puppetlabs-release-wheezy.deb
Finished downloading http://apt.puppetlabs.com/puppetlabs-release-wheezy.deb
Running update-puppet apt-get update
Finished running update-puppet apt-get update
Updating Puppet to latest version
dpkg-preconfigure: unable to re-open stdin: No such file or directory
Finished updating puppet to latest version: Puppet v3.3.2
Created empty file /.puphpet-stuff/update-puppet
...
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 436.21 seconds

Проверьте работоспособность

Теперь, когда виртуальная машина создана, залогиньтесь в ней. Чтобы сделать это, в том же каталоге запустите vagrant ssh. После входа, чтобы быстро проверить, что все работает запустите sudo netstat -tlnp. Вывод покажет, какие службы работают. Он должен соответствовать этому:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1643/rpcbind    
tcp        0      0 0.0.0.0:39284           0.0.0.0:*               LISTEN      1678/rpc.statd  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2643/sshd       
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      13637/postgres  
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2399/exim4      
tcp6       0      0 :::111                  :::*                    LISTEN      1643/rpcbind    
tcp6       0      0 :::80                   :::*                    LISTEN      31623/apache2   
tcp6       0      0 :::22                   :::*                    LISTEN      2643/sshd       
tcp6       0      0 ::1:5432                :::*                    LISTEN      13637/postgres  
tcp6       0      0 ::1:25                  :::*                    LISTEN      2399/exim4      
tcp6       0      0 :::37887                :::*                    LISTEN      1678/rpc.statd

Там вы увидите, что Apache и PostgreSQL (Прим. пер.: хотя в конфигурации было MySql) работает. Если вы посмотрите в /etc/apache2/sites-enabled/ вы увидите конфигурацию для вашего виртуального хоста.

Все готово!

Заполняя в первый раз, может показаться, что шагов слишком много. Но теперь, когда мы прошли этот путь вместе, все получится намного быстрее. Более того, вам не нужно создавать конфигурацию каждый раз с нуля.
Если вы перетащите puppet/hieradata/common.yaml на puphpet.com, он автоматически заполнит форму и вам останется только редактировать её.

Автор: kriptomen

Источник

Поделиться

* - обязательные к заполнению поля