Настройка PHP веб-проекта, инфраструктуры - PullRequest
14 голосов
/ 21 октября 2008

Как я могу наилучшим образом настроить свою среду разработки PHP (LAMP), чтобы у меня были серверы разработки, промежуточной и рабочей среды. Развертывание в один клик для любого из них, а также откат в один клик для любой ревизии. Откат должен также откатить схему базы данных и данные до того, что было, когда этот исходный код был текущим.

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

Итак, как ты это делаешь? Какими существующими инструментами вы пользуетесь?

Спасибо!

ОБНОВЛЕНИЕ: Просто чтобы прояснить, поскольку есть некоторая путаница в том, что меня интересует.

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

Если вы запускаете проект PHP и у вас есть схема БД в управлении версиями, как вы это сделаете? Какие инструменты вы используете? Они у себя дома, или мы можем где-нибудь найти их в Интернете?

Если вы запускаете проект PHP и выполняете автоматическое тестирование при коммите (и / или ночью), как вы это делаете? Какую систему управления версиями вы используете? Используете ли вы SVN и запускаете ли вы свои тесты в перехватах после фиксации?

Если вы запускаете проект PHP с несколькими серверами разработки, промежуточным сервером и производственным сервером (серверами), как вы их организуете и как развертываете?

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

Ответы [ 5 ]

12 голосов
/ 22 октября 2008

Наша производственная среда включает в себя следующее:

  • 3 интерфейса, обслуживающих наш сайт
  • 2 базы данных (Master-Slave, репликация)
  • 1 смешанный, который запускает httpd и базу данных для рекламы

Наша среда разработки - это один сервер, работающий как с базой данных, так и с httpd. С точки зрения конфигурации у нас есть разные рабочие пространства для каждой настройки, а наш VC - это subversion. Постановка тоже довольно проста - она ​​проходит на одном из интерфейсов.

Изменения в базе данных

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

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

Deployment

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

Проверьте этот образец capfile:

role :www, "web01", "web02", "web03"
role :web, "web01", "web02", "web03", "web04"
role :db, "db01", "db02"

desc "Deploy sites"
task :deploy, :roles => :www do
    run "cd /usr/www/website && sudo svn --username=deploy --password=foo update"
end

Capistrano также позволяет запускать любую другую команду без определения задачи:

cap invoke COMMAND="uptime" ROLES=web

(Требуется настройка роли "web". См. Пример выше.)

Стиль кодирования и документация

Мы в значительной степени придерживаемся стандарта кодирования PEAR , который мы проверяем с помощью PHP_CodeSniffer (phpcs). Когда я говорю довольно много, я имею в виду, что я раздвоил предоставленные фырканья и добавил несколько исключений из моего собственного удовольствия.

Помимо стиля кодирования, phpcs также проверяет встроенную документацию. Эта документация создается в конце phpDocumentor .

CI

У меня оба эти инструмента настроены на нашем CI-сервере ( Continuos-Integration ), который phpUnderControl с использованием вышеупомянутого и CruiseControl, phpUnit , Xdebug (пара метрик кода ...) и т. Д.

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

CI-сервер создает новую версию пару раз в день, генерирует графики, документы и всевозможные отчеты.

Помимо всех упомянутых инструментов, мы также используем Google Apps (в основном для электронной почты) и поддерживаем вики-сайты Google со всей другой документацией. Например, процедура развертывания, списки тестов QA и т. Д.

1 голос
/ 23 июля 2009

Для изменений базы данных у нас есть каталог в VCS:

+ dbchanges
|_ 01_database
|_ 02_table
|_ 03_data
|_ 04_constraints
|_ 05_functions
|_ 06_triggers
|_ 07_indexes

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

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

Таким образом, все разработчики могут просто запустить скрипт, чтобы обновлять БД.

1 голос
/ 21 октября 2008

Я заметил, что это не получало много воздействия. Это также то, что меня интересует. Знаете ли вы о Phing ? Вы пробовали это?

Andrew

0 голосов
/ 28 октября 2008

@ andrew: я пробовал Phing и закончил с phpUnderControl. Проблема с Phing состоит в том, что для управления покрытием кода он должен включать в себя все файлы в вашем проекте, что для нашего проекта просто не делает этого. Подход CruiseControl работал лучше для нас. Попробуйте, они оба просты в настройке - сложная работа заключается в создании тестов ....

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