测试,部署和更新PHP站点

Mau*_*ycy 4 php deployment lamp

很快我将发布我的网站项目,在它看到一天的光之前,我想准备一些"更新模型".我正在使用Debian与Apache,PHP 5.3和MySQL(我认为最新),不是作为一个软件包安装而是单独安装.

我想出了执行这个过程的简单想法,所以请看一看并指出一些弱点:

  • 测试 - 我发现通常的做法是将测试版本的站点部署到beta.mysite.com子域,并从那里进行测试.测试将使用与实际站点相同的数据库.在初始发布之后,每个新的测试候选者将是一个单独的分支(在部署时合并,仍然对分支一无所知).
  • 部署 - 如果在测试阶段一切正常,请复制并覆盖旧版本的页面.

我可以立即发现的问题:

  1. 只要数据库保持不变,测试就可以了.如果它改变了怎么办?
  2. 我希望更新尽可能透明,没有任何维护模式也没有任何东西,但我担心复制文件会导致问题.

还有其他任何可能成为问题的东西,或者是否有更好的方法来做这件事?

Ars*_*nko 5

1.测试

通常,您从不在生产环境中测试某些内容,尤其是生产数据库,原因有三:

  • 性能:测试可能是CPU密集型的,并浪费了服务器的其他宝贵资源.由于您不希望在测试期间降低生产环境的性能,因此不应使用生产环境.

  • 数据保护:您不希望在测试期间更改生产数据库中的数据.这意味着,不仅你的测试可能有一个有限的范围内(即你可能会测试可能破坏与实际用户的所有数据的一些bug,让缺陷被黑客随后利用之前三思而后行),但您可能会意外通过在生产数据库上运行未经测试的代码来更改数据.

  • 安全性:如果您在公司的环境中并拥有一个团队,您可能会将与测试相关的工作分配给专门的测试人员.出于安全原因,为该测试人员提供对生产环境的访问并不是一个好主意.

1.1测试环境

测试环境必须尽可能与生产环境相似.例如,如果您测试使用.NET Framework 3.5为Windows XP发布的应用程序,则不应在Windows 7下使用.NET Framework 4对其进行测试,因为在测试期间会有效,并且一旦客户开始使用该应用程序就会失败.

示例:曾经,我使用过NTFS备用数据流的应用程序.在开发期间和测试期间,一切都运行良好,没有人想到2009年FAT32仍然活着的事实.当然,一旦投入生产,客户就将应用程序安装在FAT32格式的闪存驱动器上,然后崩溃了.

请注意,这并不意味着您应该在开发期间使用相同的环境.

在数据库的情况下,事情是不同的.数据库引擎和版本必须是相同的,并且该模式必须相同(相同的表,相同的约束,等等),但数据应该是不同的在大多数情况下,测试数据库中充满了一些随机数据,不相关的你在生产中的数据.

1.2数据库:测试瓶颈

例如,如果最近发布了一个网站,则您没有大量数据.如果数据库包含注册用户列表,则开头只有少数用户.另一方面,您可能不仅需要测试您的应用程序是否有效,还要测试性能是否正确以及瓶颈什么.在这种情况下,您需要使用大量数据进行测试:这样,您可以在生产环境中拥有数千名用户,并在测试环境中拥有数十亿随机生成的用户帐户.

1.3数据库:测试输出的正确性

另一种情况是,您希望测试数据与生产数据不同,这是为了避免HTML注入并验证输出是否正确.如果您有一个电子商务网站,则您拥有一个SQL表Products,并且每个产品都有一个标题,该标题将显示在网站上.在测试环境中,您应该拥有名称如下的产品:

1. A very long name of a product goes here. Oh, this name is really huge!
2. javascript:alert('<a>&\é<%???')
3. 
4. '; delete * from Users
Run Code Online (Sandbox Code Playgroud)

这些名称将确保:

  1. 长名称显示正确,
  2. 名称被正确转义,支持unicode并且编码正确,
  3. 空名称不会破坏布局,
  4. 避免SQL注入但在输出期间没有转义(如果可以通过网站更改标题).

如果您开始使用此类内容填充生产数据库,您的用户可能会认为您的网站已损坏或被黑客入侵.

2.部署

一切都取决于每秒的实际请求数.

2.1小型网站

如果您的网站很小而且不经常使用,那么您真的不应该关心更新工作流程.复制更改的源文件可能需要不到一秒钟,因为这些文件很小.如果它真的打扰你,你可以安排在访客很少的时候复制文件.对于大多数小型网站,在半夜更新源代码应该没问题.

此外,显示在凌晨4点到凌晨5点之间服务器可能会脱机的消息没有任何问题.有时在晚上工作,我经常在我的银行网站上看到这些消息,出于安全原因,他们可能需要在维护或其他计划任务期间每周完全脱机一次.

2.2服务器场

如果您的网站很大并且每秒有数千个请求,那么您可能拥有一个服务器场.在这种情况下,更新过程应该不是问题,因为服务器将逐个脱机,自行更新,然后返回到服务器场.