【问题标题】:What methods are used for differentiating between production/staging/development environments in PHP applications?什么方法用于区分 PHP 应用程序中的生产/登台/开发环境?
【发布时间】:2012-11-15 11:51:48
【问题描述】:

显然这是一个常见问题:我们有由 git 或其他 SCM 管理的 PHP Web 应用程序,并且(理想情况下)部署在 3 个以上应该非常相似的不同环境中。唯一的区别应该是特定配置,例如外部资源的寻址(例如:数据库主机、内存缓存等)。

以下是我见过或使用过的三种方法:

  1. 维护主机名数组 => 环境类型: $hosts = array ('host1.example.com' => 'production', 'staging.example.com' => 'staging' ...)
  2. 在 .gitignore(或其他 SCM 的等效文件)中有一个配置文件,其中包含要复制和编辑的示例版本
  3. 使用http.conf 在您的http.conf 中设置一个env_var:“SetEnv ENVIRONMENT dev”,然后在您的脚本中使用$environment = get_env('ENVIRONMENT');

还有其他方法吗?我知道其中的每一个都有好处和陷阱——它们是什么?

【问题讨论】:

  • 我认为使用 PHP 的商店没有 prod/stage/dev 差异化:p
  • 非常有趣 =) 仅仅因为 PHP 是互联网的磁带并不意味着没有真正的编码人员会严格使用它。我敢肯定有人会……某处……

标签: php configuration release development-environment production-environment


【解决方案1】:

在 *nix 上:

  • 您可以直接在/etc/environment 中设置环境变量以在系统范围内应用它们。
  • 您只能在 /etc/apache2/envvars (Ubuntu) 或 /etc/sysconfig/httpd (CentOS) 中为 Apache 设置环境变量。

由于环境配置是特定于环境而不是特定于应用程序的,因此使用.htaccess 或其他应用程序配置文件来设置这些是没有意义的。

【讨论】:

  • 在我看来更清洁的选择。
【解决方案2】:

每当推送事件发出时,我们都会使用 Jenkins 从 git 服务器拉取数据。

在它的配置中,每个服务器都有不同的一行:

mv config_<env>.php config.php

当 config.php 在 git 中时忽略。

【讨论】:

  • 那么这条线是如何被执行的呢?每个服务器在最初部署时是否都安装了 post_push 挂钩?
  • git 服务器在 push 时 ping jenkins,然后他执行一系列预定义的命令,从 git pull 开始,然后 config thingy,执行单元/功能测试,然后接受构建或失败时恢复到以前的好版本并发出通知。结帐en.wikipedia.org/wiki/Jenkins_(software) 或搜索持续集成。会有很大帮助。
  • 我们现在正在准备使用 Jenkins(我们已经在运行);您是说您还使用它来直接管理对生产和登台机器的部署?
  • “直接”是什么意思?
  • 我的意思是 Jenkins 实际上在目标主机上运行命令以在成功构建后部署新版本。你如何做到这一点?你会在 Jenkins 主机上发送git push {production-servers} 吗?
【解决方案3】:

使用设置环境选项可以由任何主要服务器完成。 如果未定义,则默认为生产。

这样您就不必维护服务器列表。并且可以让它远离git

【讨论】:

  • 那么cli呢?你应该把它传进去吗?
  • 不为 cli 计量,因为用户将永远无法看到输出。因此,仅使用 cli 相同的方式不会测量服务器。
【解决方案4】:

过去几年我一直在开发的 Web 应用程序使用 Java API 后端,前端有一个 PHP 层用于模板等。我们使用 Maven 来控制环境的差异。

我不完全确定这一切是如何组合在一起的,因为我没有自己设置。我们所拥有的是一个很大的 settings.xml 文件,它被分成不同的环境。然后根据环境从该文件中提取配置选项。

Udan 类似,我们在发布到 dev/staging/live 时也使用 Jenkins 将它们整合在一起。

这里似乎有一个专门为 PHP 设计的 Maven:http://www.php-maven.org/
我从来没有用过它,所以不能说它有多大用处,不过也许值得一看。

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2018-09-07
    相关资源
    最近更新 更多