PHP站点部署建议

时间:2010-04-13 10:41:10

标签: php svn web-deployment

我目前对我的团队正在采用的部署方式感到非常困扰......这是非常老式的,我知道它不能很好地工作。但我不知道如何改变它,所以请提出一些建议......

以下是我们目前的设置:

  • 2个网络服务员
  • 1个数据库服务器
  • 1个测试服务器

当前的部署调整

  1. 我们开发并使用测试服务器,每个更改都手动上传到测试服务器。
  2. 当更改或功能完成后,我们会将更改提交到SVN存储库。
  3. 提交更改后,我们将更改上传到第一个网络服务器,每隔一分钟就会运行一个cronjob来同步服务器之间的文件。
  4. 非常恼人的是,无论何时我们在同步作业启动时上传文件,同步的文件都会显示已损坏,因为它只有一半上传。另一件事是,每当出现部署故障时,恢复将非常困难。这些基本上是我面临的问题,我该怎么办?

    此外,由于第一个网络服务器上的文件需要随时与其他服务器同步,因此cronjob就是出于此原因。

    P / S:对不起,我忘了提到,SVN服务器是托管的。我们对它没有太多的控制权,但我相信我可以编辑钩子......

3 个答案:

答案 0 :(得分:7)

使用Phing之类的部署框架来管理对Web服务器的部署并摆脱cron作业。基本上,生产系统上的发布不应该自动发生,而是在您确定当前构建未被破坏之后。它不应该依赖开发系统。

由于Phing使用XML和PHP来配置和控制部署过程,因此您可以对该过程进行版本控制。这是一个额外的好处,因为您可以将部署连接到应用程序的特定版本。

要防止生产网站受到部署过程的影响,请考虑将新版本上载到单独的目录中,然后对其进行符号链接。如果出现任何问题,您可以轻松地符号链接到以前的版本。

另请考虑using a CI server

答案 1 :(得分:1)

我在最后一个地方做了同样的事情。我们拥有的是:

  • 每个网站的存储库
  • 每个专门用于直播网站(即/branches/live)和测试网站(即/branches/testing)的网站的分支机构
  • 可以与SVN交谈的2个网络服务器
  • 可以与SVN交谈的测试服务器
  • 所有服务器都安装了SVN命令行客户端

每个网络服务器都是独立运行的,因此他们并不真正了解彼此 - 这是留给负载均衡器的。每个服务器都有一个cronjob,每3小时运行一次,并导出每个网站的live分支的最新版本到文件系统上的正确文件夹中。

在我们的测试服务器上,每个网站的testing分支都是结帐,而且没有cronjob。开发人员在文件夹上线之前,只要他们想要为用户进行测试就更新了文件夹。

在开发期间,对网站的trunk进行了提交。当更改准备好进行测试时,它们将合并到测试分支中,并在测试服务器上手动更新结帐。当更改准备好上线时,它们将合并到实时分支,服务器将在当天结束时更新。

在3年内,我们只遇到一个问题,即开发人员犯了错误的内容并且不得不回滚网站。

答案 2 :(得分:0)

作为部分修复,在您访问时触发rsync命令的网站上创建一个URL,以便您可以控制rsync运行的时间(显然,您需要确保使用此URL命中服务器1而不是将此URL公开给公众)。更好的是,使用curl在您使用的任何上传脚本的末尾调用rsync URL。