在生产系统上升级 PHP 的最佳实践

在生产系统上升级 PHP 的最佳实践

我们有两个运行 php 5.3 的负载平衡 Web 服务器。我们的开发团队要求我将 php 升级到 5.4,因为他们需要它带来的某些功能。主要问题是 5.3 是发行版存储库中内置的最新版本,因此要使用包管理器进行升级,我需要添加另一个第三方存储库。我对此本身没有意见,但我担心使用来自“非官方”来源的包。

另一个选择是从源代码编译 php,但我猜这会阻止我在将来的任何阶段使用包管理器进行升级?

所以我想我只是在寻找一些指导,看看该怎么做。从源代码编译还是从任何声称提供 php 5.4 的旧存储库安装?或者也许还有我还没有考虑过的第三个选项?

答案1

事实上,你真正的问题是生产环境。我的意思是,您必须尽可能减少停机时间,并规划恢复(回滚)程序,以防出现问题。

通常,我并不真正关心存储库的“官方性”,而是“声誉”。我不习惯认为“非官方”公共开源存储库会将恶意软件注入软件包(安全问题),我确实认为,如果它们很受欢迎且被广泛使用,那么它们就会得到很好的维护(可靠性问题)。

如果你真的担心使用非官方 repo,你有一个更难的选择:从源代码编译,然后在官方 repo 更新时覆盖 PHP。这会带来风险。

这是我的策略。

首先,制作一个应用程序的可复制快照. 收集文件、数据库条目以及在全新服务器上启动应用程序所需的一切(以防您想使用 3 进行负载平衡,但实际上您并不想这样做)。这将是您的回滚过程。

其次,使用当前 PHP 安装创建服务器快照。完整的系统映像是合适的。将其保留为黄金映像。您将与服务器一起备份应用程序,但没关系。

第三,进行源编译,可能的话先在暂存区尝试。

第四,当您的官方 repo 更新时,创建一个新的应用程序快照,恢复旧的黄金服务器映像,升级 PHP,然后将应用程序升级到您刚刚执行的快照。

如果出现任何问题,您总是有:

  1. 要恢复的备份应用程序。我认为您每秒不会处理数千笔交易,因此数据丢失可能很小,甚至为零
  2. 完整的服务器映像,以防出现非常糟糕的情况

答案2

如果您想要最新版本,我个人更喜欢从源代码编译。但是,听起来您还没有进行过测试,考虑到可能出现的问题,我强烈建议您进行离线测试。

为此,我建议您创建一个虚拟机,尽可能准确地复制实时系统。在此基础上进行升级。您甚至可以测试每种方法,看看哪种方法最适合您。

最重要的是,如果服务器上还有其他程序使用 PHP,请确保升级后它仍能正常工作。PHP 升级因破坏应用程序而臭名昭著,即使是子点版本,更不用说完整点了。

相关内容