PHP 代码部署提示

2022-08-30 17:16:46

过去,我一直以一种非常业余的方式进行开发,这意味着我有一台本地机器,在那里我开发和测试代码,还有一台生产机器,我在完成后将代码复制到其中。最近,我将其略微修改为本地开发的地方,将代码检查到SVN中,然后通过SVN更新生产机器。

现在我想开始一个新项目并改进我的工作流程。理想情况下,我的想法如下:

  • 具有一个或多个本地开发环境
  • 在本地计算机上开发和测试
  • 使用 SVN(或 Git)作为代码存储库
  • 使用生成工具设置新环境(开发、过渡或生产)并部署代码

由于我不是很熟悉这个过程,我正在寻找有关如何最好地设置这个想法以及要使用的工具的建议,尤其是在构建工具方面。我正在研究蚂蚁和Phing(可能是make),但我对这个很陌生,我真的很想得到一些指导。有没有关于PHP部署的好教程或书籍,特别是对于初学者?我特别感兴趣的是以下主题:

  • 部署到具有不同设置的不同类型的服务器(例如,dev 使用与生产或暂存不同的 db、db 密码、PHP 错误报告)。
  • 自动从 SVN 提取代码的部署。
  • 临时为生产环境设置“维护”页的部署。
  • 一旦我掌握了上述内容,甚至可以在构建过程中进行一些测试。

我知道我的问题可能听起来很困惑...我承认,我是新手,在我真正需要的东西上可能有点偏离目标。这就是为什么任何帮助都非常感谢。


答案 1

我建议将测试部署策略设置为生产就绪的安装脚本 - 因为无论如何,您最终都需要其中一个。

一些对某些人来说似乎很明显但值得指出的提示:

  • 保存在 VCS 中的配置文件应为模板,并且应与最终包含实际设置的文件不同。例如: 或或或类似的东西。否则,您最终会意外地在模板上签入特定于服务器的配置文件。config-dist.phpconfig-sample.confsample/config-mysql.php
  • 对于 PHP 部署,预计某些用户将无法通过 Web 服务器本身以外的任何机制运行服务器端脚本。基于PHP的安装程序几乎是不可协商的。
  • 你应该包括一个消费者友好的更新机制,为此,wordpress是一个可以模仿的项目的一个很好的例子。PHP脚本可以(a)下载最新版本,(b)使用ftp函数更新应用程序的文件,以及(c)执行更新脚本对数据库进行适当的更改,等等。
  • 看在天上,不要做像[编辑]那样的事情,让你的用户为每个版本下载并安装单独的补丁。让他们下载包含迄今为止所有更新的最新(最终)版本,并按顺序应用正确的功能。ALTER TABLE

无论文件是通过SVN还是通过FTP部署的,安装/更新机制都应该是相同的:获取最新的文件,运行更新脚本。更新程序使用 PHP 脚本中列出的版本和 DB 中列出的版本,并使用该知识按顺序应用相应的数据库修补程序。至于如何生成这些补丁,这里还有其他问题,您可以参考以获取更多信息。

至于“维护”页面,只需使用上面提到的版本技巧来触发它(将数据库中的版本与PHP代码中的版本进行比较)。能够将站点标记为“向下”对公众,但使其对管理员可见(如Joomla一样),也可以通过数据库或文件系统标志触发。

至于从SVN自动提取代码,我想说的是,你最好使用cron脚本或提交触发器,而不是将其处理到你的应用程序中,因为它与最终用户无关。


答案 2

这并不是你问题的一部分,但它是相关的:

如果你开始分发面向广大受众的代码,我建议你去构建和分发OpenSSL签名的PHAR包。您可以通过HTTP分发它们而不会出现问题,并且由于它们是OpenSSL签名的,因此您还可以降低中间人攻击的风险,并保护最终用户/客户/客户端免受注入代码的人的侵害,如果您想设置自动或一键式更新。

我过去贡献了一组工具,它们对此非常有效,但是您要么需要PHP 5.3,要么需要通过PECL安装PHAR的PHP 5.2。https://github.com/koto/phar-util

就测试而言,PHPUnit是事实上的标准。


推荐