Vagrant Provisioning shell vs puppet vs chef

Posted

技术标签:

【中文标题】Vagrant Provisioning shell vs puppet vs chef【英文标题】:Vagrant provisioning shell vs puppet vs chef 【发布时间】:2013-11-21 16:25:18 【问题描述】:

我有以下设置:

许多不同的项目是独立的 git 存储库,但都具有大致相同的服务器配置 每个项目又依赖于许多其他项目,我们使用 composer 依赖管理器将它们组合在一起(此处为 php 语言)。

我想使用 Vagrant 并在每个存储库中包含一个 Vagrant 文件,因此我的团队成员可以克隆一个存储库,运行 vagrant up 并准备好使用。

我的问题现在针对配置。我需要安装几个工具和包,如 apache、git、mysql 和几个 php 包,然后下载一些文件(如最近开发的数据库转储),在 /var/www 中设置所有内容并运行 composer install 命令。

因此,一种选择是使用使用厨师或木偶等食谱的经理。 另一种方法是编写一个 bash 文件并使用 shell 配置。

我对厨师/木偶没有太多经验,所以自然地,使用 shell 选项似乎更容易,但我想了解从长远来看这是否不是一个好的/可行的选项。

为什么在我看来,使用木偶/厨师似乎是一种不好的方法:

我知道我将不得不使用几种不同的配方,并且几乎总是为我的不同存储库使用相同的配方,因此我必须将它们全部包含在所有存储库中。考虑拥有 20 个存储库并需要 10 个配方,这意味着我需要添加 200 个配方作为 git-submodule 或类似的(每个团队成员也需要克隆存储库,然后克隆 10 个配方存储库,然后才为每个运行 vagrant up项目)。相比之下,我只需要使用我的 shell 脚本创建一个小型 repo 并克隆它 20 次。

我可能遗漏了一些东西,所以请告知我是否应该选择 chef/puppet,以及为什么即使我的存储库都有非常相似的服务器设置也有意义。

【问题讨论】:

如果您认为 shell 配置器是可行的方法,那么就使用它。你会发现它更快,因为你不会有一个新的工具来学习。学习厨师或木偶的最好方法是尝试一下。为了让你开始看这个:***.com/questions/19125374/… @MarkO'Connor 感谢您的评论。 berkshelf 工具看起来很有趣,似乎解决了我需要单独下载所有代码配方的问题 :) 我知道我可以使用 shell 脚本更快,但可能有非常正当的理由使用 chef / puppet我还没有完全掌握。所以问题是使用 chef / puppet 比 shell 脚本有什么优势 - 还是只是偏好? 听起来你想要完成的事情会更容易使用 Docker 和一个小的 bash 脚本(或任何你想要的 ansible/chef/puppet 东西)。我刚刚经历了这个,并使用了 Docker 和 Bash 【参考方案1】:

以下文章涉及另一个 CM 工具 (ansible),但我认为作者出色地解释了从 shell 脚本转换的好处。

http://devopsu.com/blog/ansible-vs-shell-scripts/

引用 1:

真正让我吃惊的是这些知名开发者的反应。他们基本上说,“这真的很酷,但我可能不会阅读它,因为我的手动安装/shell-script 工作流程现在还不错。”

我有点震惊,但考虑了几分钟后,我意识到鉴于他们对 CM 工具的了解,他们的选择是完全理智和理性的。

引用 2:

对他们来说,使用 CM 工具意味着要花费数周时间来学习复杂的概念,在复杂的安装过程中苦苦挣扎,并随着时间的推移维护这个复杂的系统。他们对其中的好处有所了解,但使用 CM 工具的成本似乎太高,不值得付出努力。

最后总结了 shell 脚本的好处,我认为它们适用于所有 CM 工具、puppet、chef、salt、ansible...

哪种方法最有可能在源代码控制中结束? 哪种方法可以放心安全地多次运行? 哪种方法可以轻松地在多台服务器上运行? 哪种方法实际验证(测试)您的服务器的正确性? 哪种方法可以轻松定位特定服务器(Web、db 等)? 哪种方法支持轻松模板化配置文件? 哪种方法可以轻松支持您的整个堆栈?

希望这会有所帮助。

【讨论】:

【参考方案2】:

2016 年更新

对于那些通过 Google 发现此内容的人来说,a bunch of developers 似乎为了简单而转向 Ansible。来自帖子:

“Ansible 是适合不喜欢部署工具的人的部署工具。它接近于脚本,不会使用代理或集中式服务器污染您的服务器,并且立即有意义。”

我们最近在我们的微服务架构中实现了它,它非常棒。

超级简单 花了大约一天时间来取货 一旦你准备好了就不需要考虑它了

Puppet/chef 在我的心中/堆栈中始终占有一席之地,但 Ansible 更简单。

【讨论】:

以上是关于Vagrant Provisioning shell vs puppet vs chef的主要内容,如果未能解决你的问题,请参考以下文章

为啥您应该在 Ad Hoc Distribution Provisioning Profile 之前使用 Development Provisioning Profile?

no matching provisioning profile found

iOS开发之删除Provisioning Profiles方法

Your build settings specify a provisioning profile with the UUID, no provisioning profile was

No matching provisioning profiles found:No provisioning profiles with a valid signing idea....

PushSharp 的 ios-provisioning-portal