Статьи

Легко создавайте виртуальные машины с PuPHPet

Разве создание и управление средами разработки разочаровывают, замедляют или отвлекают от разработки? У вас есть проблемы, потому что ваши среды разработки и развертывания отличаются? Если так, у меня есть решение для вас — PuPHPet!

Вступление

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

Как мы все знаем, количество вариантов, разнообразие выбора, требования ИТ-менеджера, руководителя группы или клиента могут быть стрессовыми. Они могут (и делают) потянуть нас во многих направлениях, часто одновременно.

Есть выбор базы данных, такой как MySQL , PostgreSQL , Oracle и SQLServer . Есть варианты NoSQL, такие как Cassandra , Hadoop и Redis . Есть выбор веб-сервера, такие как Apache и Nginx . У этого списка нет конца.

И когда у нас нет выделенной команды sys-администратора (скажем, мы сольный фрилансер или очень маленькая команда), время, необходимое для поддержки сред разработки, становится действительно ценным — мы становимся DEVOPS.

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

Бродяга:

Создавать и настраивать легкие, воспроизводимые и переносимые среды разработки. Бродяга изменит как ты работаешь

Марионетка:

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

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

Введите PuPHPet

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

Первоначально созданная Хуаном Треминио несколько месяцев назад, PuPHPet делает создание сред, идеально подходящих для PHP-разработчиков, в таких стеках, как {W, M, L} AMP, очень простым.

Он ориентирован на 5 областей:

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

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

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

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

vagrant up 

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

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

Требуемое программное обеспечение

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

Так что, если вы обнаружите, что что-то не работает, попробуйте разные версии обоих пакетов. В настоящее время я использую Vagrant 1.3.5 и VirtualBox 4.3.2, и они работают безупречно каждый раз.

Во-первых, установите копию этих двух пакетов.

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

Когда они установлены, откройте https://puphpet.com . Справа вверху видно, что существует четыре начальных варианта: локальный , Digital Ocean , Rackspace и Amazon Web Services . Выберите Local, поскольку мы не используем эти онлайн-сервисы в этом руководстве.

В разделе «Local Local Details» мы можем указать виртуальные машины:
— Операционная система
— имя хоста
— Айпи адрес
— Выделение памяти

Для сегодняшнего примера мы используем Debian Wheezy 7.2 x64 с VirtualBox 4.3 . Это позволяет нам использовать PHP 5.5 или 5.4. Не стесняйтесь оставить оставшиеся три параметра такими, какие они есть, или настроить их так, как вам удобно.

Далее идут локальные перенаправленные порты виртуальных машин . Я не настроил его, но если вы хотите настроить некоторые порты на вашем хост-компьютере для переадресации на порты на гостевой виртуальной машине, то настройте их здесь при необходимости.

Совместное использование папок с локальной виртуальной машиной

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

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

Основы сервера

Если вам нужны определенные пакеты, такие как git , subversion , vim и т. Д., Перечислите их здесь. Помните, вам нужно знать имя пакета, указанное в выбранной вами операционной системе. Список не предоставляется во всплывающем окне при вводе.

Веб сервер

Apache (2) или Nginx? Для этого урока я собираюсь с Apache. Выбор конфигурации прост и понятен. Сначала укажите модули для установки и включения, введя в поле Apache Modules. Появится список доступных опций, из которых вы можете выбрать, что поможет обеспечить безошибочный процесс.

Далее идет настройка виртуального хоста . Какое имя сервера и псевдоним вашего приложения? Сначала укажите их, затем корневой каталог и порт. То, что мы сделаем, это установим тот же каталог для корня документа, который мы указали в Box Sync Folder Target , чтобы все было легко и просто. Если у вас нет особых потребностей, оставьте порт по умолчанию 80.

Последние два параметра, Переменные среды и AllowOverride , изменяются только в том случае, если это требуется вашему приложению. На сегодня по умолчанию все в порядке.

PHP

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

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

Я изменил свой часовой пояс PHP на Europe / Berlin, так как это наиболее близко для меня. Но измените свой, как лучше всего подходит для вашего местоположения. Для модулей PHP мой список: cli , intl , mcrypt , cgi , curl , memcached , memcache , pspell , tidy и sqlite . Прокрутите список и добавьте те, которые вам нужны (или хотели бы). Для модулей PEAR и Pecl я оставил их как есть.

Я решил установить Xdebug, используя настройки по умолчанию, но не Xhprof. XDebug просто превосходен, поэтому я настоятельно рекомендую вам его использовать.

База данных

Хорошо, теперь мы серьезно. Для сегодняшнего примера я выбрал MySQL, установив пароль root в качестве пароля и оставив привилегии вообще. Имя БД — это точка сайта, имя пользователя — testuser, а пароль — пароль теста . Я оставил здесь простой выбор, чтобы не усложнять ситуацию. У меня нет сценария SQL для запуска при загрузке виртуальной машины, поэтому я оставил это поле пустым.

Создать и скачать конфигурацию

Теперь просто нажмите на чрезвычайно большую кнопку Вперед, сделайте это . Вы увидите загрузку в каталоге загрузок. После завершения распакуйте архив и перейдите в каталог на вашем терминале. Оттуда беги 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 , чтобы быстро проверить все в порядке, запустите 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 работают. Если вы посмотрите в /etc/apache2/sites-enabled/ вы увидите конфигурацию вашего виртуального хоста, используя псевдослучайное имя. Если вы добавили имя хоста в /etc/hosts на вашем локальном компьютере, вы можете открыть имя хоста в браузере и просмотреть страницу, которая в результате.

Были сделаны!

Так что у вас есть это. Хорошо, в первый раз, как и во всем остальном, может показаться, что нужно выполнить много шагов. Но когда вы станете более знакомыми, вы станете намного быстрее. Более того, вам не нужно каждый раз создавать заново.

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

Мысли?

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