Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

VagrantWebdev — виртуальная среда для веб-разработки

Anna | 29.05.2014 | нет комментариев

Вступительное слово

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

  • Среда должна разворачиваться максимально легко, с этим должен совладать всякий новичок-стажер либо даже администратор, если потребуется.
  • Среда должна обеспечивать меня и всякого разработчика каждому нужным серверным ПО, при этом инкапсулируя его в виртуальной среде.
  • Сами файлы планов обязаны находиться в каталоге, разделяемом хостом и виртуальной машиной, а именно в каталоге планов IDE. Даже если разработчик — ярый последователь текстовых редакторов и поклялся на крови, что никогда его грубый диск не примет в себя ни одной IDE, ему данный правило так же будет на руку.
  • Хост должен иметь доступ к СУБД, Memcache и Sphinx, запущенным на виртуальной машине, для проведения работ, не требующих «тяжелой артиллерии», а значит проводящихся прямо на машине разработчика — скажем, для разработки на Django либо разработки утилит, общающихся с этими сервисами.
  • Должен быть легкий метод сделать резервную копию данных, спрятанных в виртуальной машине.

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

Для достижения поставленных целей я предпочел Vagrant, так как нет по моему скромному суждению больше благополучной утилиты для распространения виртуальных машин для разработки. Из списка базовых боксов я предпочел машину на моем любимом и дюже знаменитом Debian Wheezy, к тому же размер выбранного бокса каждого 295 Мб.

План находится на GitHub’е и ожидает своего часа. Он обеспечивает:

  • Веб-сервер (Apache 2.2 PHP 5.4),
  • Xdebug с вероятностями удаленной отладки, профилирования и создания трейсов по триггеру,
  • СУБД: MySQL, PostgreSQL, Redis,
  • Memcache,
  • Sphinx с организацией комфортной конфигурации с поддержкой conf.d.

Так же внутри установлены PHPUnit DBUnit, Python 2, SQLite и еще некоторое число славных пророческой. Данный комплект сервисов обусловлен нашими надобностями, но если сообществу будет увлекательно видеть что-то еще — не думаю, что будет задачей добавить это.

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

VagrantWebdev был протестирован на Windows и на Ubuntu 13.10, и я был бы дюже признателен за поддержка в тестировании на других платформах.

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

Организация системы

Как я теснее упоминал, в плане применяется Vagrant и бокс с Debian Wheezy, учрежденный на VirtualBox. Установка довольно минималистичная, но совместно с тем в комплекте имеются Puppet и Chief, в связи с чем, если в грядущем конфигурирование с поддержкой скрипта перестанет быть особенно изысканным решением, дозволено будет сменить метод без задач со сменой бокса.

Параметры

Система имеет некоторое число параметров, которые влияют единовременно на гостевую ОС, работу утилит и скрипт «провизии» — не знаю, такое ли значение слова «provision» имел в виду Митчел Хашимото, автор Vagrant’а, но мне нравится именно данный вариант.

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

То есть, безусловно, не задачей в плане трудности решения, а задачей в плане трудности грациозного решения, так как в Windows Vagrant использует личный интерпретатор Ruby, в котором отсутствует встроенный модуль для парсинга ini-файлов, что повлекло надобность изобретения собственного не слишком прекрасного и не слишком двухколесного велосипеда в виде модуля Params, тот, что поддерживает только самые базовые вероятности этого формата конфигураций, но в определенном данном случае абсолютно справляется с задачей.

Для метаморфозы доступны следующие параметры:

  • www_dir: каталог веб-планов, тот, что будет смонтирован в гостевой системе как /var/www. По умолчанию это %Home%\htdocs для Windows и ~/htdocs для Unix-like систем.
  • vhosts_section_id: строка, применяемая для идентификации «нашей» сегменты в файле hosts
  • box: наименование бокса в Vagrant’е
  • box_url: URL, откуда он будет скачан в случае, если данный бокс не установлен в системе
  • memory: объем оперативной памяти, доступной гостевой ОС, по умолчанию 2 Гб
  • server_ip: IP-адрес, по которому будет доступна машина в приватной сети, по умолчанию 192.168.2.10
  • use_smtp: необходимо ли применять доставку электронной почты на внешние домены через SMTP-сервер. По умолчанию присвоено значение 0, так как другой вариант требует от пользователя настройки параметров SMTP-сервера, а это противоречит тезису легкости развертывания даже неопытным пользователем.
  • Параметры SMTP-сервера, которые нужно заполнить в случае его применения для доставки почты на внешние домены
Утилиты

Для возрастания комфорта работы со средой я разработал некоторые утилиты, которые, как упоминалось выше, обретаются в каталоге bin. Утилиты поделены на три каталога:
vagrant, обертки для команд утилиты Vagrant. Первоначально утилиты этой группы создавались для комфорта работы в графических интерфейсах, Дабы особенно частые действие дозволено было исполнить двойным щелчком мыши, но позднее некоторые из них взяли на себя ответственность за некоторые добавочные действия, о которых я расскажу чуть позднее.
utils — утилиты всеобщего назначения, сделанные для автоматизации некоторых значимых задач и internal — утилиты, предуготовленные для выполнения в гостевой ОС.

Сервисы

 

Веб-сервер

В данной системе применяется классика: Apache 2.2 PHP 5.4. Веб-сервер обеспечивает доступ к планам в доменной зоне loc. Домены распределяются в соответствии с именем подкаталога www_dir. К примеру, если план находится в каталоге /var/www/test, он будет доступен как test.loc и www.test.loc.

Есть три метода указать хосту, где искать домены этой зоны. 1-й из них — добавить надобные записи в файл hosts. Для автоматизации этой задачи была разработана утилита PatchHosts. Она отменно справляется с задачей всюду, помимо Windows 8.1, так как там запись в файл hosts затруднена даже с правами менеджера. В случае ошибки доступа утилита открывает текстовый редактор с контентом, тот, что нужно скопировать в файл hosts, в Windows 8.1 его дозволено записать, скажем, с поддержкой Блокнота.

2-й метод больше прекрасен, но доступен только в случае, если в вашей системе имеется DNS-сервер либо прокси для DNS-запросов — скажем, Dnsmasq. В этом случае дозволено указать ему очевидно, где искать домены зоны loc, для dnsmasq в плане есть соответствующий файл конфигурации.

Ну и 3-й метод, тот, что я бы не стал советовать — указать в своей системе качестве DNS-сервера192.168.2.10. В тезисе, это может быть решением, но повлечет за собой надобность менять настройки сети при всяком запуске и при всякой остановке виртуальной машины.

К сожалению, виртуальные хосты Apache так же обновляются лишь полуавтоматически. Первоначально (ссылка на ветхий коммит) для этой цели применялся mod_vhost_alias; он был классен и радовал изящностью решения, пока не всплыл дюже малоприятный баг, тот, что оказался неизбежным в случае выбранного стека спецтехнологий. Пришлось, скрепя сердце, перейти на очевидное добавление всех хостов в конфигурацию с поддержкой особой утилиты. В качестве утешительного приза я сократил избыточность такого метода конфигурирования с поддержкой mod_macro, разрешающего применять макросы при настройке Apache.

Для добавления виртуальных хостов в конфигурацию Apache служит утилита из каталога utils подназваниемUpdateApacheVHosts. Она должна запускаться позже метаморфозы состава планов; механически она запускается при применении для запуска, перезагрузки либо выхода из гибернации утилит из каталогаvagrant.

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

Xdebug

Настройки этого растяжения для PHP разрешают следующее:

  • Механическое обратное подключение к машине разработчика при отладке. Триггером для этого служит передача как параметра запроса либо cookie переменной XDEBUG_SESSION_START=session_name. Дюже комфортная опция, исключительно в общности с вероятностями отладки в таких IDE как PhpStorm либо NetBeans. Вам не нужно настраивать Xdebug для подключения к определенному IP-адресу, довольно того, Дабы IDE ждала подключения на той же машине, с которой отправлен запрос.
  • Профилирование и создание трейса по триггеру. Для этого, как и в предыдущем случае, необходимо передать переменные: XDEBUG_TRACE=1 и XDEBUG_PROFILE=1 соответственно. Файлы с итогами сохраняются в каталог %VagrantWebdev%/runtime/xdebug.
СУБД и Memcache

На данный момент в системе доступны следующие СУБД: MySQL, PostgreSQL и Redis. Все они доступны извне, что разрешает применять VagrantWebdev не только для работы с LAMP-планами, а так же применять комфортные инструменты для администрирования баз данных, такие как мои любимые HeidiSQL, pgAdmin и RedisDesktopManager.

Для пользователя root в MySQL и пользователя postgres в PostgreSQL установлен пароль password. Только пускай данный секрет останется между нами, отлично?

Так же в плане есть утилиты, облегчающие извлечение резервных копий данных. Это следующие утилиты из каталога utilsmysqldumppg_dumpall и redis_dump. Итоги их работы сохраняются в каталог%VagrantWebdev%/runtime.

Memcache так же доступен извне, а для комфорта его чистки в том же каталоге utils имеется утилита flush-memcache.

Все указанные утилиты отправляют в гостевую ОС команды посредством SSH. В основном их наименование отражает, что именно вызывается в гостевой ОС, вот, к примеру код утилиты mysqldump, версия для Unix-like:

#!/bin/bash
set -e

DIR=$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd )
cd "$DIR/../.."
vagrant ssh -c "mysqldump -uroot -ppassword --all-databases --set-charset --complete-insert > /vagrant/runtime/mysql-dump.sql" -- -T -n
read -p "Press [Enter] key to exit..."
Sphinx

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

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB