Какие методы используются для разграничения между производственными/промежуточными/средами разработки в приложениях PHP?
Очевидно, что это распространенная проблема: у нас есть веб-приложения PHP, которые управляются git или другими SCMS и развертываются (в идеале) в 3+ разных средах, которые должны быть очень похожи. Единственные различия должны заключаться в конкретной конфигурации, такой как адресация внешних ресурсов (например, хост базы данных, memcache и т.д.).
Вот три метода, которые я видел или использовал:
- Поддерживать массив имен хостов =>типы среды:
$hosts = array ('host1.example.com' => 'production', 'staging.example.com' => 'staging' ...)
- Иметь конфигурационный файл, который находится в файле .gitignore (или эквиваленте для других SCM) с примером версии для копирования и редактирования
- Используйте
http.conf
, чтобы установить env_var: "SETENV ENVIRONMENT dev" в вашем http.conf, а затем$environment = get_env('ENVIRONMENT');
в ваших сценариях.
Существуют ли и другие методы? Я знаю, что у каждого из них есть преимущества и подводные камни - что это такое?
4 answers
Мы используем Дженкинса для извлечения с сервера git всякий раз, когда выдается событие push.
В его конфигурации у нас есть строка, которая отличается для каждого сервера:
mv config_<env>.php config.php
В то время как config.php находится в git игнорировании.
На *nix:
- Вы можете задать переменные среды непосредственно в
/etc/environment
, чтобы применить их в масштабах всей системы. - Вы можете задать переменные среды для Apache только в
/etc/apache2/envvars
(Ubuntu) или/etc/sysconfig/httpd
(CentOS).
Поскольку конфигурация среды зависит от среды, а не от приложения, не имеет смысла использовать .htaccess
или другой файл конфигурации приложения для их настройки.
Использовать опцию set environment может любой крупный сервер. По умолчанию используется производство, если оно не определено.
Таким образом, вам не придется вести список серверов. И может держать это подальше от git
Веб-приложение, над которым я работал последние пару лет, использует серверную часть Java API со слоем PHP спереди Для создания шаблонов и т. Д. Мы используем Maven для контроля различий в средах.
Я не совсем уверен, как все это сочетается, поскольку я сам этого не создавал. Однако то, что у нас есть, - это большой settings.xml документ разделен на различные среды. Затем параметры конфигурации извлекаются из этого файла в зависимости от среды.
Аналогично Udan мы также используем Дженкинса, чтобы собрать все это воедино при публикации в dev/staging/live.
Похоже, что здесь есть Maven, специально разработанный для PHP: http://www.php-maven.org/
Я никогда им не пользовался, поэтому не могу сказать, насколько это было бы полезно, хотя, может быть, стоит посмотреть.