2011-06-03 100 views
25

过去,我一直在以非常业余的方式开发,这意味着我有一台本地机器,在那里我开发并测试了代码和一台生产机器,当我完成时我复制了代码。最近我稍微修改了这个地方到我在本地开发的地方,将代码检入SVN,然后通过SVN更新生产机器。PHP代码部署技巧

现在我想开始一个新项目并改进我的工作流程。理想的情况是我必须记住以下几点:

  • 有一个或多个本地开发环境
  • 开发和代码库本地机器(S)
  • 使用SVN(或GIT)上测试
  • 使用构建工具来建立新的环境(无论是开发,分期或生产),并部署代码

因为我不是很熟悉这个过程,我在寻找如何更好地设置这个想法了建议和工具尤其是使用当涉及到构建工具。我正在研究Ant和Phing(可能会做),但我对此很新,所以我很想得到一些指导。是否有任何关于PHP部署的好教程或书籍,特别是对于初学者?我在有下列主题特别感兴趣什么:

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

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

+0

您现在正在成为一名真正的开发者,为此+1。此外,我认为这个问题已经在SO – dynamic 2011-06-03 23:32:33

+0

+1得到解答,我对此感兴趣。 – cabaret 2011-06-03 23:44:34

+0

http://programmers.stackexchange.com/questions/62852/php-project-deployment – OnesimusUnbound 2011-06-03 23:51:49

回答

3

我会建议让你的测试部署策略成为一个生产就绪的安装脚本 - 因为你最终还是需要其中的一个。

可能看起来很明显一些,但值得指出的几项建议:保存在您的VCS

  • 您的配置文件应该是一个模板,并且应该从最终将包含文件名称不同实际的设置。例如。 config-dist.phpconfig-sample.confsample/config-mysql.php或沿着这些线。否则,您将最终意外检查模板上特定于服务器的配置文件。
  • 对于PHP部署,预计一些用户将无法通过除Web服务器本身以外的任何机制运行服务器端脚本。基于PHP的安装程序几乎是不可协商的。
  • 你应该包括一个消费者友好的更新机制,为此,wordpress是一个模拟项目的好例子。 PHP脚本可以(a)下载最新版本,(b)使用ftp函数来更新应用程序的文件,(c)执行更新脚本,以便对数据库进行适当更改等。
  • 对于上帝的缘故,不要像[编辑]那样做,并让您的用户为每个点发布下载并安装单独的修补程序。让他们下载包含迄今为止所有更新的最新(最终)版本,并按顺序应用正确的ALTER TABLE函数。

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

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

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

+0

请注意:如果攻击者可以在wordpress部署服务器和托管当前正在更新的wordpress安装的网络服务器之间“进入”,则WordPress的更新机制容易受到中间人攻击。 – damianb 2011-06-04 01:07:34

+0

@Obsidian:对于通过互联网访问的每一段数据,情况也是如此。解决这个问题的唯一方法是使用加密签名(安全套接字或签名文件),如果您是偏执狂,则可以将其作为升级过程的一部分。 – tylerl 2011-06-04 03:56:26

3

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

如果你进入分发面向广大受众的代码,我会建议你去构建和分发的OpenSSL签名药业包。您可以通过HTTP发布它们而不会出现问题,并且由于它们是经过OpenSSL签名的,因此您还可以减轻中间人攻击的风险,并且在您注册时保护最终用户/客户/客户端免受注入代码的人的影响想要设置自动或单击更新。

过去有很多工具对此很有帮助,但是您可能需要PHP 5.3,或者您需要PHP 5.2以及通过PECL安装的PHAR。 https://github.com/koto/phar-util

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

+1

这都是准确的。但我建议避免强加用户安装pecl(甚至pear)包的要求,以便使用您的软件,除非绝对必要。至少有一个回退(例如,只有在安装PHAR时才支持签名验证,但不需要使用该软件)。确定它很简单*安装pecl软件包,但并非所有用户都有这种自由。 – tylerl 2011-06-04 04:02:53

+0

@tylerl我会说实话,这是我只支持PHP 5.3的两个原因之一(另一个原因是Zend现在不支持它)。由于PHAR在5.3中是本地的,它允许我只是推动PHAR分发官方的东西,如果有人想从github获取源代码tarball,他们可以(但他们必须修改它以在PHAR之外工作)。 – damianb 2011-06-04 05:54:17

0

如果您有兴趣使用Git,那么您应该从CodeMeme中检查此构建系统。从你所描述的事情来看,这听起来像是一个不错的选择。您可以将它作为子模块添加到任何项目中,并使用包含的代码来定制构建脚本,该脚本将部署到多个环境中的不同多个服务器。它使用Git构建部署代码,但不幸的是SVN不受支持。

https://github.com/CodeMeme/Phingistrano