厨师部署?

我有兴趣从Capistrano转换为Chef,但我有一些问题将所有部分组合在一起。

我已经关注了http://wiki.opscode.com/display/chef/Quick+Start并且能够knife启动EC2实例。 就代码部署而言,看起来好像我想做http://wiki.opscode.com/display/chef/Deploy+Resource中的内容 ,唯一的问题是,该页面上没有提到它在哪个目录中/ file deploy /to/path代码块应该去。

我遇到的另一个问题是了解在设置服务器后如何部署代码更改。 也许我只是习惯了当前的工作流程( git push && cap deploy ),但我能说的最好的是,在我提交更改后,我应该ssh到服务器并运行sudo chef-client ? 有些事情感觉不对。 是否没有相应的上限,即chef deploy

最后(也许这有点困难),我希望将多个rails应用程序部署到单个服务器上。 在每个应用程序的回购中保留某种厨师配置文件来描述其部署的细节似乎是谨慎的,但我不确定那将如何与chef-repo /托管服务器进行交互。 每个应用程序都是一个角色吗? 根据我对事物运作方式的理解,我对’chef-client’试图在运行时部署所有应用程序的想法感到有些不安。 通过git push && cap deploy我确定我正在部署什么。 而某些其他应用程序存储库可能不处于可部署状态。 是否有办法在此设置中部署一个应用程序?

因此,刀实际上能够执行capistrano-esque任务 – 特别是在多个服务器上运行命令。

要将应用程序部署到所有应用程序服务器,假设您遵循opscode rails应用程序cookbook路径,您可以执行以下操作:

 knife ssh role:t chef-client -xroot -P 

这将在所有应用服务器上以root身份运行chef-client。 它使用Chef搜索API查找具有该角色的所有节点并在其上运行该命令。

它非常强大。

我写了以下文章,描述了如何使用chef部署Ruby on Rails。

http://tech.hulu.com/blog/2012/07/06/automating-system-provisioning-and-application-deployment-with-chef/

嗯……这篇文章不只是关于Rails,但是这个例子中最重要的部分是关于部署Rails。

还有一个名为“application”cookbook的社区食谱,可用于部署Ruby on Rails。 与该菜谱相比,本文中的示例对于新人来说应该更容易理解。 但是,一旦您习惯使用本文中的示例,您应该查看应用程序菜谱,看看这对您是否更有意义。

关于使用刀ssh按需部署的建议是绝对正确的。 如果我可以进一步详细说明使用Chef作为部署解决方案(特别是与Capistrano等工具相比)。 Chef被设计为配置管理和系统集成的工具,这意味着系统上运行的所有内容都应该是幂等的。

使用Chef部署时,有时会出现关于在Chef运行时重新运行所有内容的混淆。 请记住,Capistrano通过告诉系统“执行此操作”来工作,Chef通过告诉系统“be this”来工作,因此应用程序的哪个版本以及数据库应使用的模式通常将在属性和数据包中定义。 当Chef运行时,如果已经部署了应用程序并且数据库已经具有正确的模式,则不会发生任何事情,只有在系统尚未处于所需状态时才应采取操作。 这就是为什么即使在部署多个应用程序时重新运行所有内容也应该不成问题。

根据我的经验,最好保留capistrano,因为它具有一些你必须与Chef一起复制的RoRfunction。 Chef是一个非常灵活的工具,你可以用它做很多事情,因此它可以替代许多其他工具。 我个人觉得有针对性的工具更有用。

Unicorn的Capistrano插件,S3的Asset Syncs和其他设备(如https://github.com/bokmann/dunce-cap )总是非常有用。

作为部署和管理Ruby on Rails应用程序的一种更简单的方法,我也可以建议http://www.cloud66.com

免责声明:我为Cloud 66工作。