服务器 Gind.cn

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

改善我们的部署策略

我们有一个在我们公司开发的电子商务应用程序。 它是一个合理的标准的LAMP应用程序,我们已经开发了大约3年。 我们在testing领域开发应用程序,在这里我们添加新的function和修复错误等。我们的错误跟踪和function开发全部在托pipe的颠覆解决scheme(unfuddle.com)内进行pipe理。 当错误被报告时,我们在testing域上做了这些修复,然后当我们很高兴错误已经修复时,将修改提交给svn。 我们按照相同的程序添加新的function。 值得指出的是我们的服务器系统和应用程序的总体架构。 每次开发新function时,我们都会使用我们的应用程序(始终是我们控制的服务器)将此更新推出到所有站点。 使用我们的系统的每个站点实际上使用95%的代码库完全相同的文件。 我们在每个站点内有几个文件夹,其中包含定制到该站点的文件–css文件/图像等。除此之外,每个站点之间的差异由每个站点数据库中的各种configuration设置定义。 这将开始实际部署本身。 当我们准备推出某种更新时,我们会在testing站点所在的服务器上运行一个命令。 这将执行复制命令(cp -fru / testsite / / othersite /),并通过每个基于修改date更新文件的vhost force。 我们托pipe的每个附加服务器都有一个虚拟主机,用于同步生产代码库,然后我们在该服务器上的所有站点上重复复制过程。 在这个过程中,我们移出不想被覆盖的文件,在完成复制时将其移回。 我们的推出脚本执行一些其他function,如应用SQL命令来改变每个数据库,添加字段/新表等。 我们越来越担心我们的过程不够稳定,不容错过,也是一种暴力方法。 我们也意识到,我们并没有充分利用颠覆,因为我们有一个职位,即在不使用分支或标签的情况下,开发新function将阻止我们推出重要的错误修复。 这似乎也是错误的,我们有这么多的文件复制我们的服务器。 我们也无法轻松地对我们刚推出的产品进行回滚。 我们在每次推出之前都会执行diff操作,以便我们可以获得将要更改的文件列表,以便我们知道之后发生了什么变化,但是回滚过程仍然存在问题。 就数据库而言,我已经开始关注dbdeploy作为一个潜在的解决scheme。 但是,我们真正想要的是关于如何改进文件pipe理和部署的一般性指导。 理想情况下,我们希望文件pipe理更紧密地连接到我们的存储库,所以卷展/回滚将更多地连接到SVN。 就像使用导出命令来确保站点文件与回购文件一样。 如果解决scheme也可能会停止我们的服务器周围的文件复制,这也是一件好事。 忽视我们目前的方法,听听其他人如何解决同样的问题真的很好。 总结… 使多个服务器上的文件保持与svn同步的最佳方式是什么? 我们应该如何防止文件复制? 符号链接/别的东西? 我们应该如何构build我们的回购,以便开发新function并修复旧function? 我们应该如何触发推出/回滚? 提前致谢 编辑: 我最近读了很多关于使用Phing和Capistrano完成这些任务的好东西。 任何人都可以提供更多关于他们的信息,他们对于这样的任务有多好?