我们应该使用哪个软件包pipe理系统进行部署?

我们是一个只有一个产品的小型软件公司,它是一个负载均衡的网站(每月800万次访问)(大约20台服务器用于Web服务)。

目前我们每周发布一次,旨在持续部署。

我们的服务器正在运行Centos,我们的客户Mac OS X.

我们目前正在评估不同的包装系统:

  • RPM
  • subversion +一些shell脚本(创build一个与源代码树分开的“production-svn-tree”)
  • 我们自制的“打包机”由tar-archive加上一些脚本组成 – 目前的问题是没有降级(安装非当前版本)的逻辑,也没有可能删除文件 – IMO添加这些东西包括很多工作的

我想知道你们中的一些人是否有使用包装系统进行部署的经验,并可以提供一些见解。

我已经使用了RPM包装进行部署,并且与Debian包装相比令人厌恶。 使用一个软件包可以带来许多好处,比如设置依赖关系,apacheconfiguration,logrotate,cronjobs,post inst脚本等,以及源代码和权限。 能够使用debconf从用户提出问题(例如,我应该为这个Web应用程序提供哪些url?),然后将答案模板化到apacheconfiguration中是非常有用的。 但是,据我所知,RPM没有类似debconf的configuration,这意味着你最终不得不手动编辑configuration文件,不能轻易地从软件包中安装新的版本。

我一般认为只是从服务器上的源代码控制安装就没有意义,因为对于复杂的应用程序来说,这只是故事的一部分。 所以给你三个选项,我会去3。

我会build议Capistrano ,而不是一个包装系统,是专门devise用于部署代码到一个或多个服务器。 它直接从您的版本控制系统(svn,git,mercurial等)部署到服务器,执行您需要的任何脚本,运行数据库迁移等。

它在服务器上保留了许多以前的版本,允许您在出现意外故障的情况下在几秒钟内回滚。

此外,它还提供多服务器部署,一次部署到多个服务器,如果任何部分无法正确部署,则将它们全部回滚到以前的版本。

Capistrano起源于Ruby世界,但今天被广泛使用。 它可能看起来很简单,但是是一个非常强大的工具,强烈build议。 我的公司用它来将数十个网站部署到多个服务器上。

因为Capistrano是一个命令行工具,所以我们使用Webistrano来pipe理和运行Capistrano。

考虑到你的情况的简单性,你可能会逃避使用rsync或NFS坐骑来分发代码,然后从一个版本运行到另一个“更新”(这是我认为你的意思是通过选项# 2)。

但是,如果您想要比这更好的东西,我强烈build议使用本地打包系统来提供代码(然后您可以与所有本地打包工具“免费”集成)。 当然,这需要一些技巧,创造良好的包装,但投资应该为自己付出代价。 在硬币的另一面,使用非本地包装格式是你必须一次又一次支付的东西。

正如另一张海报所说,你可能会想要使用一个configuration。 pipe理系统(但是,任何好的configurationpipe理系统都应该与本地打包集成…所以任何投资仍然会支付)。

至于一些暗示“dpkg规则,rpm很糟糕”的回应,我会build议如果你倾向于听他们的话,那就把你的服务器移到Debian并使用本地包装。

我会认真的build议你select一个configurationpipe理系统。 有几个开源项目可供select: cfengine , puppet , bcfg2 ,…

Cfengine是最广泛使用的(17年的经验,有部署高达+60000像Facebook服务器)。 有支付的支持,如果你需要它cfengine.com

木偶在这个领域的新手很stream行,因为它看起来更简单(这是一个味道,国际海事组织)的问题,但有一个巨大的问题:它取决于ruby,所以你必须安装移动目标。 看到这个debian ruby​​维护者的博客文章,以获得关于你是否想用这个烂摊子来pipe理你的基础设施的意见: http ://www.lucas-nussbaum.net/blog/?p=566; 他们也支付了支持。

我知道没有人运行bcfg2,它看起来不错。

哦,是的,还有另一个ruby工具, 厨师 。 还有一个乱七八糟的安装。

最后的目标是只需启动(使用centos)一个新的服务器并让它自动configuration。 configurationpipe理将负责一切。 你需要改变所有服务器上的东西? 没问题,写一个策略,它会在下次运行软件的时候进行部署。 需要一段时间才能build立起来(虽然时间不是很长,但是和所有新事物一样,你需要感受一下),但是你会想,如果没有它,你怎么能够生存下去。

根据奥卡姆的剃刀和爱因斯坦的简单原理,我会select3号。就我能从这个系统的有限经验(我主要使用Deb,Arch和BSD)中得到它,RPM是一个非常棒的软件,可能远远过于复杂为您的需要。 我几乎看不到引入额外的SVN层的好处。 看起来最合理的做法是使用一些脚本来从SVN标签生成压缩包,然后使用一些脚本来交付和部署。 恕我直言。