Часть 4: Подготовка окружение (vagrant + PuPHPet) (Тестирование ПО)

02 May 2017

Оглавление

Снимок экрана от 2017-05-02 16-36-41

Это очередная часть проекта Тестирование ПО который рассказывает о разработке веб-приложений с использованием методологии TDD. Конкретно в этой главе мы развернем рабочее окружение и создадим шаблон проекта для последующей разработки.

Для создания окружения многие используют для этого ту же машину на которой и пишут код. Нельзя однозначно сказать, хорошо это или плохо. В нашем случае это плохо. Поскольку рабочая система засоряется пакетами и приложениями, которые нужны лишь на один раз. Плюс к этому нельзя взять окружение, удалить его и начать заново если что-то не понравилось или из-за игры с настройками все пошло не так. И конечно же, не стоит забывать разработчиков, которые пользуются отличными от *nix операционными системами, так как многие из дальнейших операций будут им попросту либо недоступны, либо доступны со множеством ограничений.

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

Что нам потребуется

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

  1. VirtualBox - виртуальная машина от Oracle, которая поставляется под различные операционные системы.
  2. Vagrant - набор инструментов для простого и удобного создания и настройки виртуальных машин. Этот проект так же поставляется под различные операционные системы.

За сведениями про установку данного по вам стоит обратиться к документации вашего дистрибутива или в официальную документацию проектов.

Что мы сделаем

Веб-конфигуратор

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

Deploy target->Locally

01 - Deployment targetЗапуск проекта осуществляется локально через при помощи virtualbox. Устанавливаем locally и операционную систему centos 7 (в тестовом примере это x64, но вы всегда можете собрать машину на другой архитектуре и системе, но тогда последующие шаги придется адаптировать под вашу сборку). Другие Deploy target отключаем

Для корректной синхронизации между машинами указываем в подразделе shared folders->folder target каталог /var/www. И тип синхронизации Default. Memory - 1024.

System->Packages

02 - System

PuPHPet не имеет в своем конфигураторе способа поставить memcached одной галочкой и его надо добавить в список стандартных пакетов.

System->Locale/Timezone

03 - LocaleДля нас будет удобно если локаль системы соответствует региональным установкам.

Webservers->Nginx

Для работы потребуется два домена tdd.dev и api.tdd.dev с практически идентичными конфигурациями.

tdd.dev

[gallery ids=”1901,1905” type=”rectangular” link=”file”]

Домен содержит два локейшна:

api.tdd.dev

[gallery ids=”1914,1917” type=”rectangular” link=”file”]

Аналогично фронтенду домен также содержит два локейшна.

Стоит отметить, что YII_ENV указывать крайне желательно. Этот параметр в дальнейшем влияет на режим работы Yii2 (либо он будет в отладочном, либо в тестовом, либо в продакшн режиме). Желательным является указание переменной YII_DEBUG.

Languages->PHP

[gallery ids=”1938,1939” type=”rectangular” link=”file”]

Включаем composer и xdebug. Настройки по-умолчанию нас пока устраивают.

Databases->MariaDB

[gallery ids=”1946,1947” type=”rectangular” link=”file”]

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

В секции баз данных нам нужна только одна база - tdd. Удаляем все, что там есть и добавляем новую базу.

В секции grants нужно добавить права для пользователя tdd

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

Databases->Redis

12 - redis

Включаем.

Доработка конфигурации для удобной работы

Скачиваем и распаковываем архив из раздела create archive в папку с проектами на диске.

Перед запуском нужно отредактировать файл puphpet/puppet/modules/php/manifests/pecl/module.pp. Требуется заменить все вхождения

"pecl info ${name}"

на

"pecl info ${name} | iconv -c; test \${PIPESTATUS[0]} -eq 0"

Это требуется для того, чтобы избавиться от бага.

Увы, но это не все. Для удобной работы нам потребуется сделать еще несколько шагов чтобы подготовить инфраструктуру.

Токены авторизации для composer

Для настройки токенов нам потребуется сформировать файл auth.json в котором будет размещен ключ авторизации. Чтобы получить ключ открываем страницу https://github.com/settings/tokens создаем ключ и копируем то, что получилось.

{  
 "github-oauth": {  
 "github.com": "тут токен, который получили выше"

}  
}

Полученный файл размещаем по адресу puphpet/files/dot/.config/composer/auth.json.

После этапа провизии этот файл будет автоматически скопирован на виртуальную машину.

Предупреждение: не забудьте добавить его в .gitignore перед коммитом.

Vagrant

Создадим файл puphpet/bootstrap.sh со следующим содержимым

#!/usr/bin/env bash  
echo "export YII_ENV=${YII_ENV}" > /etc/profile.d/yii_env.sh  
echo "set YII_ENV=dev${YII_ENV}" > /etc/profile.d/yii_env.csh  
echo "export YII_DEBUG=${YII_DEBUG}" > /etc/profile.d/yii_debug.sh  
echo "set YII_DEBUG=${YII_DEBUG}" > /etc/profile.d/yii_debug.csh

А в Vagrantfile исправляем пару строк

Vagrant.configure('2') do |config|  
 config.vm.provision 'shell' do |s|  
 s.path = "#{dir}/puphpet/bootstrap.sh"  
 s.env = { YII_ENV: "dev", YII_DEBUG: 1 }  
 end  
 eval File.read("#{dir}/puphpet/vagrant/Vagrantfile-#{data['target']}")  
end

Тем самым мы заставляем систему прописать нужные переменные окружения до выполнения puppet-apply.

Yii2

В каталоге puphpet/files/exec-once-unprivileged размещаем файл 00-composer.sh.

#!/usr/bin/env bash  
composer global require "fxp/composer-asset-plugin:^1.3.1"

Запустившись однократно команда установит глобально пакет, который нам нужен в дальнейшем для управления статическими пакетами. Файл empty можно удалить из текущего каталога.

В каталоге puphpet/files/exec-always-unprivileged разместим два файла.

Важно: имена файлов сделаны такими не просто так. Скрипт провизии перед выполнением сортирует их в лексикографическом порядке. И очень важно, чтобы инициализация composer выполнялась после развертывания конфигурационных файлов.

00-update-config.sh

#!/usr/bin/env bash  
echo "Deploy config files"  
su - $USER -c "cd /var/www && php init --env=${YII_ENV} --overwrite=y"

99-build.sh

#!/usr/bin/env bash  
echo "Deploy application"  
COMPOSER=composer  
COMPOSER_OPT=""  
if ["$YII_ENV" = "prod"]; then  
 COMPOSER_OPT="${COMPOSER_OPT} --no-dev"  
fi  
if ["$YII_DEbUG" = 1] || ["$YII_DEBUG" = true]; then  
 COMPOSER_OPT="${COMPOSER_OPT} -a"  
fi  
su - $USER -c "cd /var/www && ${COMPOSER} install ${COMPOSER_OPT}"

Примечание : во время провизии машины при первом старте у пользователя vagrant набор групп только прописан. И поэтому чтобы они задействованы нужно выполнять команды под su.

Так как проект основывается на шаблоне yii2-app-advanced, то просто копируем весь шаблон приложения в каталог с проектом. Конечно же папку vagrant и Vagrantfile не копируем так как они у нас уже есть.

Из мелких доработок шаблона:

Доработка хост-системы

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

Самый простой способ - добавить нужные записи в файл /etc/hosts.

192.168.56.101 tdd.dev www.tdd.dev api.tdd.dev

Запуск

13 - yii

На этом доработка закончена и можно делать vagrant up в каталоге проекта. После того, как система соберется вы сможете попасть на готовый проект http://tdd.dev.

14 - requirements

Чтобы проверить, что все в порядке в dev-режиме предусмотрен скрипт requirements.php. Обратиться к нему можно по адресу http://tdd.dev/requirements.php и убедиться, что все работает и поиграться с виртуальной машиной.

Литература

  1. Puppet – Facts
  2. Puppet: Custom facts walkthrough
  3. Working with Advanced Vagrant features in PhpStorm
  4. “Learning Puppet 4: A Guide to Configuration Management and Automation” Jo Rhett, ISBN: 9781491907665

Исходный код

Оглавление

Теги: тестирование по tdd vagrant

Категории: Разработка HowTo