显然这是一个常见问题:我们拥有由git或其他SCM管理的PHP Web应用程序,并且(理想情况下)部署在3个不同的环境中,这些环境应该非常相似。唯一的区别应该是在特定配置中,例如寻址外部资源(例如:数据库主机,内存缓存等)。
以下是我见过或使用的三种方法:
$hosts = array ('host1.example.com' => 'production', 'staging.example.com' => 'staging' ...)
http.conf
在http.conf中设置env_var:“SetEnv ENVIRONMENT dev”,然后在脚本中设置$environment = get_env('ENVIRONMENT');
。还有其他方法吗?我知道每一个都有好处和陷阱 - 那是什么?
答案 0 :(得分:4)
On * nix:
/etc/environment
中设置环境变量,以便在系统范围内应用它们。/etc/apache2/envvars
(Ubuntu)或/etc/sysconfig/httpd
(CentOS)中为Apache设置环境变量。由于环境配置是特定于环境的而不是特定于应用程序的,因此使用.htaccess
或其他应用程序配置文件来设置它们是没有意义的。
答案 1 :(得分:1)
使用set environment选项可以由任何主要服务器完成。 如果未定义,则默认为生产。
这样您就不必维护服务器列表。并且可以使它远离git
答案 2 :(得分:1)
每当发出推送事件时,我们都会使用Jenkins从git服务器中提取。
在它的配置中,我们有一条不同的服务器:
mv config_<env>.php config.php
虽然config.php在git中忽略。
答案 3 :(得分:0)
我过去几年一直在研究的Web应用程序在前面使用了一个带有PHP层的Java API后端进行模板化等。我们使用Maven来控制环境中的差异。
我不完全确定它是如何组合在一起的,因为我没有自己设置它。我们所拥有的是一个分隔成各种环境的大型settings.xml文档。然后根据环境从该文件中提取配置选项。
与Udan类似,我们也会在发布到dev / staging / live时使用Jenkins将它们全部拉出来。
看来有一个专为PHP设计的Maven:http://www.php-maven.org/
我从来没有用它,所以不能说它有多么有用,值得一看但也许。