Какие методы используются для разграничения между производственными/промежуточными/средами разработки в приложениях PHP?


Очевидно, что это распространенная проблема: у нас есть веб-приложения PHP, которые управляются git или другими SCMS и развертываются (в идеале) в 3+ разных средах, которые должны быть очень похожи. Единственные различия должны заключаться в конкретной конфигурации, такой как адресация внешних ресурсов (например, хост базы данных, memcache и т.д.).

Вот три метода, которые я видел или использовал:

  1. Поддерживать массив имен хостов =>типы среды: $hosts = array ('host1.example.com' => 'production', 'staging.example.com' => 'staging' ...)
  2. Иметь конфигурационный файл, который находится в файле .gitignore (или эквиваленте для других SCM) с примером версии для копирования и редактирования
  3. Используйте http.conf, чтобы установить env_var: "SETENV ENVIRONMENT dev" в вашем http.conf, а затем $environment = get_env('ENVIRONMENT'); в ваших сценариях.

Существуют ли и другие методы? Я знаю, что у каждого из них есть преимущества и подводные камни - что это такое?

Author: MK., 2012-11-27

4 answers

Мы используем Дженкинса для извлечения с сервера git всякий раз, когда выдается событие push.

В его конфигурации у нас есть строка, которая отличается для каждого сервера:

mv config_<env>.php config.php

В то время как config.php находится в git игнорировании.

 1
Author: Udan, 2012-11-27 19:21:05

На *nix:

  • Вы можете задать переменные среды непосредственно в /etc/environment, чтобы применить их в масштабах всей системы.
  • Вы можете задать переменные среды для Apache только в /etc/apache2/envvars (Ubuntu) или /etc/sysconfig/httpd (CentOS).

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

 4
Author: netcoder, 2012-11-27 19:25:24

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

Таким образом, вам не придется вести список серверов. И может держать это подальше от git

 1
Author: E_p, 2012-11-27 19:18:08

Веб-приложение, над которым я работал последние пару лет, использует серверную часть Java API со слоем PHP спереди Для создания шаблонов и т. Д. Мы используем Maven для контроля различий в средах.

Я не совсем уверен, как все это сочетается, поскольку я сам этого не создавал. Однако то, что у нас есть, - это большой settings.xml документ разделен на различные среды. Затем параметры конфигурации извлекаются из этого файла в зависимости от среды.

Аналогично Udan мы также используем Дженкинса, чтобы собрать все это воедино при публикации в dev/staging/live.

Похоже, что здесь есть Maven, специально разработанный для PHP: http://www.php-maven.org/
Я никогда им не пользовался, поэтому не могу сказать, насколько это было бы полезно, хотя, может быть, стоит посмотреть.

 0
Author: diggersworld, 2017-05-23 12:24:59