如何开始从子版本存储库部署 PHP 应用程序?

我听说过“部署应用程序”这个短语,这听起来比将单个更改的文件上传到服务器更好/更容易/更可靠,但我不知道从哪里开始。

我有一个Zend框架应用程序,它处于版本控制之下(在Subversion存储库中)。如何“部署”我的应用程序?如果我有一个不想覆盖的“上传”目录,该怎么办?

我通过第三方托管我的应用程序,因此除了FTP之外,我知之甚少。如果其中任何一项涉及登录到我的服务器,请解释该过程。


答案 1

自动部署 + 运行测试到过渡服务器称为持续集成。这个想法是,如果你签入的东西破坏了测试,你会立即得到通知。对于PHP,你可能想看看XincphpUnderControl。

不过,您通常不希望自动部署到生产环境。通常的做法是编写一些脚本来自动执行任务,但您仍然需要手动启动。你可以使用Phing等框架或其他构建工具(一个流行的选择是Capistrano),但你也可以把一些shell脚本放在一起。就个人而言,我更喜欢后者。

脚本本身可以执行不同的操作,具体取决于您的应用程序和设置,但典型的过程是:

  • ssh 到生产服务器。其余命令通过 ssh 在生产服务器上运行。
  • svn export svn://path/to/repository/tags/RELEASE_VERSION /usr/local/application/releases/TIMESTAMP
  • 停止服务(Apache,守护进程)
  • unlink /usr/local/application/current && ln -s /usr/local/application/releases/TIMESTAMP /usr/local/application/current
  • ln -s /usr/local/application/var /usr/local/application/releases/TIMESTAMP/var
  • /usr/local/application/current/scripts/migrate.php
  • 启动服务

(假设您在/usr/local/application/current)


答案 2

我不建议自动更新。仅仅因为你的单元测试通过并不意味着你的应用程序100%工作。如果有人在没有任何新单元测试的情况下签入了随机新功能,并且该功能不起作用,该怎么办?现有的单元测试可能会通过,但该功能无论如何都可能被破坏。您的用户可能会看到一些半成品的内容。通过签入自动部署,您可能在几个小时内不会注意到某些内容是否已经存在。

无论如何,如果您真的想要,进行自动部署并不困难。您需要一个签到后的挂钩,实际上步骤是:

1) 从最新签入中执行导出 2) 将导出上载到生产服务器 3) 解压缩/配置新上载的导出

我总是手动执行最后的步骤。一般来说,它就像SVN导出,zip,上传,解压缩,配置一样简单,最后两个步骤我只是将几个bash命令别名在一起执行。然后,我将根应用程序目录与新目录交换,确保我将旧应用程序目录保留为备份,并且很高兴。

如果您对在错误自动上线之前捕获错误的能力充满信心,那么您可以考虑自动执行该过程。不过,它给了我抖动的抖动。


推荐