Статьи

Простое создание виртуальных машин с PuPHPet — часть 2

В первой части этой серии мы рассмотрели проблему создания и управления средами разработки простым, воспроизводимым и (даже) эффективным способом. Это проблема, с которой, я уверен, мы все время от времени сталкиваемся. Решение было относительно новым инструментом под названием PuPHPet .

Если вы пропустили первую часть, PuPHPet создаст конфигурацию Vagrant + Puppet на основе пяти ключевых областей:

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

Мы рассмотрели, как настроить большинство параметров и как использовать сгенерированную конфигурацию, с помощью некоторых основных команд vagrant. Но это так далеко, как мы пошли.

Итак, во второй части серии мы пойдем дальше. В частности, мы рассмотрим два основных файла: common.yaml и Vagrantfile . Мы внесем в них некоторые изменения, а затем подготовим виртуальные машины для отражения изменений конфигурации.

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

ПРИМЕЧАНИЕ: обратите внимание, что в Puppet и Vagrant произошли некоторые важные изменения, которые повлияли на PuPHPet. Обратите особое внимание на два уведомления в верхней части сайта PuPHPet — особенно если у вас возникли какие-либо трудности после первой части этой серии. Если уведомления пропали, проблемы тоже.

Изменения обеспечения

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

Эта команда является отличным способом быстрого тестирования любых провайдеров и особенно полезна для поэтапной разработки сценариев оболочки, поваренных книг Chef или модулей Puppet. Вы можете просто внести простые изменения в сценарии обеспечения на своем компьютере, запустить бродячее предоставление и проверить желаемые результаты. Промыть и повторить.

Мы будем использовать его для развертывания изменений в нашей среде.

Изменение конфигурации общей папки

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

 config.vm.synced_folder "/Users/matthewsetter/Documents/workspace/my-great-app", "/var/www/my-great-app", id: "vagrant-root", :nfs => false 

Вы видите, что я установил общую папку в каталоге рабочей области с таким же именем в /var/www/ на виртуальной машине. Недавно я настраивал новую Vagrant VM для проекта клиента. Я обнаружил, что мое приложение Zend Framework 2 не может записывать в каталог кэша. Если посмотреть на структуру каталогов проекта, на виртуальной машине все каталоги принадлежали пользователю vagrant; но пользователь (и группа) веб-сервера был www-data. Так что он не мог читать. Я видел два варианта:

  1. Измените разрешения на 777
  2. Смена владельца и группы

Для меня второй был более разумный выбор. Но как это сделать? Как оказалось, все довольно просто. В конце описанной выше конфигурации нам нужно указать владельца и группу как www-data . Я сделал это в обновленной конфигурации ниже.

  config.vm.synced_folder "/Users/matthewsetter/Documents/workspace/my-great-app", "/var/www/my-great-app", id: "vagrant-root", :nfs => false, owner: "www-data", group: "www-data" 

Чтобы развернуть изменение, обновите файл Vagrantfile в своей конфигурации Vagrant, сохраните файл, затем из командной строки выполните команду: vagrant provision . Если все будет хорошо, вы увидите вывод, похожий на первый раз, когда вы вызвали vagrant up , но намного короче, так как вносятся только несколько изменений — не вся виртуальная машина, которая предоставляется. Когда это будет сделано, подключитесь к виртуальной vagrant ssh с помощью vagrant ssh , а затем посмотрите разрешения для каталога проекта. Они должны выглядеть так:

  $ ls -lahrt /var/www/my-great-app/ total 3.1M drwxrwxrwx 1 www-data www-data 102 Oct 15 05:00 data/ -rw-rw-rw- 1 www-data www-data 856K Oct 15 05:00 composer.phar -rw-rw-rw- 1 www-data www-data 607 Oct 15 05:00 README.md -rw-rw-rw- 1 www-data www-data 259 Oct 15 05:00 .gitmodules -rw-rw-rw- 1 www-data www-data 338 Oct 15 05:00 .gitignore -rw-rw-rw- 1 www-data www-data 1.8K Oct 15 05:00 init_autoloader.php drwxrwxrwx 1 www-data www-data 340 Oct 15 05:00 db/ -rw-rw-rw- 1 www-data www-data 2.2M Oct 15 05:00 zftool.phar 

Изменение конфигурации PHP

Все идет нормально. Давайте посмотрим на конфигурацию PHP и внесем некоторые изменения. Ниже приведена исходная конфигурация, созданная PuPHPet в первой части. Вы найдете это в vagrant/puppet/hieradata/common.yaml . Он показывает, что версия PHP — 5.5, композитор включен, модули php, настройки ini и часовой пояс по умолчанию.

  php: version: '55' composer: '1' modules: php: - cli - intl - cgi - curl - mcrypt - memcache - memcached - pspell - tidy - sqlite pear: { } pecl: - pecl_http ini: display_errors: On error_reporting: 'E_ALL & ~E_STRICT' apc.enabled: '1' timezone: Europe/Berlin 

Давайте внесем некоторые изменения. Давай меняться:

  • часовой пояс «Европа / Лондон»
  • сеанс save_path
  • некоторые другие параметры времени выполнения:

В частности, обновление из ini: вниз со следующим:

  ini: display_errors: On error_reporting: 'E_ALL & ~E_STRICT' apc.enabled: '1' session.save_path: /tmp allow_url_fopen: '1' allow_url_include: '1' error_log: syslog file_uploads: '1' timezone: Europe/London 

Вероятно, вы узнаете директивы ini из руководства по PHP, поэтому я не буду перефразировать их здесь. Но вы можете видеть, что их здесь так же легко настроить, как и в ini-файле PHP. На самом деле, давайте выйдем на конечности и внесем достойные изменения.

После этого вот новые настройки PHP:

  • session.save_path => / tmp => / tmp
  • allow_url_fopen => On => On
  • allow_url_include => On => On
  • file_uploads => On => On
  • error_log => syslog => syslog
  • Часовой пояс по умолчанию => Европа / Лондон
  • date.timezone => Европа / Лондон => Европа / Лондон

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

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

Изменение конфигурации XDebug

Если вы использовали PHP в течение какого-то времени, вы, вероятно, использовали пакет XDebug Дерека Ретана . В первой части мы взяли базовую настройку, предлагаемую в PuPHPet. Давайте внесем в него некоторые скромные изменения и снова предоставим виртуальную машину для их включения. Ниже приведена оригинальная конфигурация в common.yaml.

 xdebug: install: '1' settings: xdebug.default_enable: '1' xdebug.remote_autostart: '0' xdebug.remote_connect_back: '1' xdebug.remote_enable: '1' xdebug.remote_handler: dbgp xdebug.remote_port: '9000' 

Добавьте к нему следующие параметры, не забывая соблюдать отступ, иначе у вас возникнут проблемы.

  xdebug.auto_trace = 1 xdebug.idekey = "SITEPOINTPHP" xdebug.max_nesting_level xdebug.profiler_enable = 1 xdebug.profiler_output_dir = "/tmp/xdebug.profiler" 

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

Как и раньше, вызовите vagrant provision , немного подождите, пока процесс обеспечения завершится. Затем мы можем проверить успешность процесса, снова посмотрев на работающую конфигурацию PHP:

 php -i | grep -i xdebug 
  • xdebug.auto_trace => On => On
  • xdebug.idekey => SITEPOINTPHP => SITEPOINTPHP
  • xdebug.max_nesting_level => 100 => 100
  • xdebug.profiler_enable => On => On
  • xdebug.profiler_output_dir => /tmp/xdebug.profiler => /tmp/xdebug.profiler

Изменение конфигурации MySQL

Хорошо, последний. Давайте внесем изменения в MySQL и немного повеселимся. Мы изменим имя пользователя и пароль, установим и phpmyadmin . Мы закончим, сделав привилегии пользователя более ограничительными. Неплохой список задач. Нет?

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

Примечание: я буду честен, я не администратор MySQL; так что есть инструменты, о которых я не буду знать. Если да, пожалуйста, укажите некоторые в комментариях.

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

 mysql: root_password: password phpmyadmin: 0 databases: njmOqAFAsG3i: grant: - ALL name: testdb host: localhost user: testdb_couser password: testdb_password sql_file: '' 

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

 mysql: root_password: password phpmyadmin: 1 databases: njmOqAFAsG3i: grant: - INSERT - SELECT - 'SHOW DATABASES' - UPDATE - USAGE - INDEX - DELETE - CREATE - ALTER name: testdb host: localhost user: testdb_username password: testdb_P@$sw0rd sql_file: '' 

Давайте снова подготовим виртуальную машину и посмотрим, что изменилось. После запуска vagrant provision я могу войти под новым именем пользователя и паролем, а phpMyAdmin доступен по адресу http://192.168.56.101/phpmyadmin/ .

Вывод

Так что ты думаешь? Действительно ли PuPHPet, Vagrant и Puppet делают управление средой разработки действительно простым? Так много вещей, которые могли быть сделаны вручную или с помощью рукописных скриптов bash, больше не нужно.

По мере того, как вы следовали, ваше снабжение прошло так же гладко, как у меня? Сталкивались ли вы с какими-либо проблемами, с которыми вам нужна помощь? Если это так, не стесняйтесь, напишите мне напрямую.

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

Пожалуйста, поделитесь своими мыслями в комментариях.