了解开发、暂存和生产环境
网站更新的最终目标是尽可能无缝地将更新后的应用程序代码从开发阶段转移到生产阶段。这种应用程序代码的移动称为部署。在这种情况下,移动包括将应用程序代码和配置文件从一个环境复制到另一个环境。
在了解将应用程序迁移到 PHP 8 的细节之前,我们先来看看这些环境是什么。了解不同环境可能采取的形式对开发人员的角色至关重要。有了这种了解,您就能更好地将代码部署到生产环境中,并将错误降到最低。
定义环境
我们使用环境一词来描述软件堆栈的组合,其中包括操作系统、网络服务器、数据库服务器和 PHP 安装。在过去,环境等同于服务器。然而,在现代社会,服务器这个词具有欺骗性,因为它意味着一台装在金属盒子里的物理计算机被放置在某个看不见的服务器机房的机架上。如今,由于云服务提供商和高性能虚拟化技术(如 Docker)的大量出现,这种情况很可能不会发生。因此,当我们使用 "环境 "一词时,应将其理解为物理服务器或虚拟服务器。
环境一般分为三个不同的类别:开发环境、暂存环境 和 生产环境。有些组织还会提供单独的 测试 环境。让我们先来看看所有环境的共同点。
常见组件
需要注意的是,进入所有环境的内容都是由生产环境中的内容驱动的。生产环境是应用程序代码的最终目的地。因此,所有其他环境都应尽可能与操作系统、数据库、Web 服务器和 PHP 安装相匹配。例如,如果生产环境启用了 PHP OPCache 扩展,那么所有其他环境也必须启用该扩展。
包括生产环境在内的所有环境至少都需要安装操作系统和 PHP。根据应用程序的需要,通常还需要安装网络服务器和数据库服务器。网络服务器和数据库服务器的类型和版本应尽可能与生产环境相匹配。
一般来说,开发环境与生产环境越接近,部署后出现错误的可能性就越小。
现在我们来看看开发环境的内容。
开发环境
开发环境是您最初开发和测试代码的地方。它的独特之处在于拥有应用程序维护和开发所需的工具。这包括一个源代码库(例如 Git),以及启动、停止和重置环境所需的各种脚本。
通常情况下,开发环境会有脚本来触发自动部署程序。这些脚本可以替代 提交钩子,在您向源代码库发出提交时激活。其中一个例子就是 Git 钩子,它是可以放置在 .git/hooks
目录中的脚本文件。
有关 Git Hooks 的更多信息,请参阅此处的文档: https://git-scm.com/book/en/v2/Customizing-GitGit-Hooks 。 |
传统的开发环境由带有数据库服务器、网络服务器和 PHP 的个人电脑组成。这种传统模式没有考虑到目标生产环境中可能存在的变化。例如,如果您有 12 个经常合作的客户,那么这 12 个客户的操作系统、数据库服务器、Web 服务器和 PHP 版本完全相同的可能性很小!最佳做法是尽可能以虚拟机或 Docker 容器的形式模拟生产环境。
因此,代码编辑器或 IDE(集成开发环境)并不位于开发环境中。相反,您可以在开发环境之外进行代码创建和编辑。然后,您可以通过共享目录将文件直接复制到虚拟开发环境中,或者将更改提交到源代码库,然后从开发环境虚拟机内部提取更改,从而将更改推送到本地。
在开发环境中执行单元测试也很合适。开发单元测试不仅能更好地确保代码在生产中正常运行,也是在应用程序开发早期阶段发现错误的好方法。当然,您还需要在本地环境中尽可能多地进行调试!在开发过程中捕捉并修复一个错误所需的时间通常只有在生产过程中修复一个错误所需的时间的十分之一!
现在让我们来看看暂存环境。
Staging 环境
在大型应用程序开发项目中,多个开发人员在同一个代码库中工作的情况非常普遍。在这种情况下,使用版本控制库至关重要。在开发环境测试和调试阶段完成后,所有开发人员都要在暂存环境中上传代码。
暂存环境必须是生产环境的精确副本。你可以把暂存环境想象成汽车厂装配线上的最后一道工序。在这里,来自一个或多个开发环境的所有部件都被安装到位。暂存环境是生产环境的原型。
值得注意的是,暂存服务器通常可以直接访问互联网;不过,它通常位于一个安全区域,访问前需要输入密码。
最后,让我们来看看生产环境。
生产环境
生产环境通常由客户直接维护和托管。这种环境也被称为实时环境。打个比方,如果开发环境是练习,舞台环境就是彩排,而生产环境就是现场表演(也许少了歌舞!)。
生产环境可以直接访问互联网,但受到防火墙的保护,通常还受到入侵检测和防御系统(如 https://snort.org/ )的进一步保护。此外,生产环境可能隐藏在反向代理配置之后,该配置在面向互联网的网络服务器上运行。否则,至少从理论上讲,生产环境应该是暂存环境的完全克隆。
现在您已经了解了应用程序代码从开发环境迁移到生产环境的环境,让我们来看看 PHP 8 迁移过程中关键的第一步:发现潜在的 BC 代码错误。