为什么独立的测试环境很有必要
测试环境是您现有架构的一份副本,您可以在其中先行测试各项更改, 避免直接暴露给真实用户。听起来很简单,但这往往决定了是一次几分钟就能搞定的平滑更新,还是一场以紧急回滚收场的事故。
当出现以下任一情况时,搭建测试环境就非常值得了:
- 网站短暂无法访问就会招致投诉——无论是电商网站、预约页面还是社团官网。
- 您运行着多个相互协作的组件:Web 服务器、数据库、缓存,或许还有反向代理。
- 您希望测试软件更新或新版本,而不想立即让所有访客充当“小白鼠”。
- 您与他人协作开发,并非每一处代码或配置改动都出自您手。
核心理念在于: 在测试环境中搞砸任何东西都不会失去用户的信任,但在生产环境中搞砸就会。
Docker 在其中带来的改变
Docker 本身并非本文的主角,但它让搭建测试环境变得轻松了许多。容器将您的应用程序及其依赖项封装在一起,使它们 在测试机上的运行方式与之后在生产环境中几乎完全一致.
如果不使用容器,环境差异往往会悄然滋生:不同的 PHP 版本、不同的软件包、不同的配置。这些细微差异往往就是导致“测试时明明好好的”,一上生产环境却依然崩溃的罪魁祸首。
容器技术并不深奥。您只需理解每个组件(Web 服务器、数据库、应用程序)都运行在各自独立的单元中,而且您可以在测试 VPS 上随时构建、销毁和重启这些单元,而不会触及底层服务器本身。
测试环境(Test)、预发布环境(Staging)与生产环境(Live)对比
在实际工作中,这些术语的使用往往并不严格。一种实用的区分方式如下:
- 测试环境(Test): 一种快速、通常用完即弃的环境。您可以在这里检查改动是否能正常构建、启动,并大致实现预期功能。
- 预发布环境(Staging): 尽可能接近生产环境。您可以在这里演练当更新遇到真实数据、真实 URL 和贴近现实的运行条件时会有怎样的表现。
- 生产环境(Live / Production): 真实用户访问的环境。这里只进行正式部署,绝不拿来做任何试验。
对于中小型项目,两阶段模式通常就足够了:一套生产系统,外加一台同时承担测试和预发布任务的 VPS。最关键的一点仅仅在于它们是 相互独立的系统.