首先,我要说的是我知道SO中的相关问题:


流浪者,Docker,木偶,厨师
流浪者+木偶+ docker
Chef-server-Chef-solo-流浪汉-木偶...对我来说正确吗?

还是那里的文章: .upguard.com / blog / puppet-vs-chef-battle-wages

但是我很难理解它们为Web开发人员提供的真正好处(例如,具有(PHP / react)的全栈开发人员)。你懂?这些对我来说都不是很清楚:


它们可以提供什么设施以及它们如何使我的工作更轻松?
它们何时对项目成功和非成功变得至关重要?自我重复活动?

您介意从我的POV中澄清这些概念/技术吗?如果您介意的话,请避免与常规的“ Vs”进行比较。文学和尝试介绍现实生活中的好部分。任何人的简短解释就足够了。

评论

一个有趣的问题,尽管我想知道它是否会被认为太宽泛...如果专家(不是我)可以写一本书来回答这个问题,我也不会感到惊讶...总之,祝您好运! />
希望如此。首先,我在SO中提出了这个要求,他们强迫我缩小范围,然后由于“基于观点”而关闭了它。有人转发我到这里,现在我问。我希望它不会关闭。任何用户的任何简短解释都足够

#1 楼

首先,我强烈建议不要针对类似软件的“功能比较”博客文章,因为它们很快过时了,我将尝试对系统配置管理器(SCM)保持通用的答案,并让Docker不再谈论第一部分。

它可以为您带来什么:


在环境之间复制配置
版本配置
执行配置
/>
要获得一个PHP应用程序的真实示例,您需要:


操作系统
Web服务器
php libs
为外部服务(smtp,数据库IP等)配置应用程序

SCM可以提供的功能是从最小的基本OS开始:


注意安装Web服务器(apache / nginx)
安装PHP(按软件包或源代码)
安装必要的libs
设置站点配置(apache中的vhost)
根据需要进行任何设置来设置php.ini
从存储库中部署应用程序(从git到nexus,选择范围广泛)
编写应用程序配置(此处可以是smtp或数据库服务器,用于此环境)
启动Web服务器
最终在y上运行一些烟雾测试我们的应用程序。

现在,如果有人来连接到计算机并手动更改任何配置,SCM的目标就是在下次运行时将计算机保持在所需状态,

这样的优点是可以强制将任何更改放入所需的状态描述中,并且不要在环境之间忘记。通常,chef或puppet设置为定期运行,Chef的默认值为30分钟。

现在,与docker的最大区别在于,您将执行相同的操作,安装中间件,lib,强制进行模板化配置等。
一旦进入运行时阶段,如果您的应用程序中存在漏洞,并且攻击者使用它来调整您的配置或修改您的Web服务器配置,那么即使它没有破坏应用程序,也可能会在一段时间内被忽略。

如果正确使用SCM,它会还原更改,它甚至会删除apache的sites-enabled目录中不需要的站点,从而增加了攻击者的复杂性。

如果您的Webserer死亡,则容器将停止,除非您有系统对其进行重新启动进行监视,否则您将无法使用。 SCM会注意到该服务已停止并在下一次运行时重新启动,其运行时间比runit短,但它将纠正一个轮转脚本,该脚本未能正确地重启该服务(例如Ubuntu上的默认apache logrotate conf可能会超时并让您的apache已停止)

即使创建docker容器,SCM可能也会很有趣,您知道在centos或ubuntu机器上将具有相同的行为(大多数社区代码使用正确的软件包名称来处理)您可以按照这种方式进行操作),这样就可以消除对dockerfile中的程序包名称进行编辑的问题。


SCM背后的主要思想是在管理应用程序和代码时管理基础架构对其进行版本控制,测试并确保其行为始终相同。

如果您依靠人工操作来配置中间件/ libs / app config,则可以肯定会有一个步骤偶尔在部署过程中忘记,发现这个问题确实很难。使用SCM可以避免这种遗漏。

评论


优秀,详细的答案。我只能挑一根骨头-我不同意“ SCM将注意到服务已关闭并重新启动它”。这样,超出了配置管理的范围。您所描述的是流程管理器的工作,例如runit,supervisor,forever等。

–阿德里安
17 Mar 10 '17 at 20:02

@Adrian是Chef和puppet的范围,当您声明服务X处于启动状态时,他们的工作就是启动服务。流程管理器将仅纠正崩溃,而不纠正计划作业中的错误(例如,停止SN,备份,忘记启动/失败以启动)。这不是超出范围,只是我们在谈论另一种责任:)

–滕西拜
17 Mar 10 '17 at 20:05



当它收敛时,它将确保服务的状态是预期的(即启动)。当它收敛。它不会“注意到”发生的任何事情,并且不会连续收敛。流程管理器将立即检测到流程终止并重新启动它。预定的工作不是一项服务,所以我不确定您为什么提到它。

–阿德里安
17 Mar 10 '17 at 20:32

@adrian我的意思是预定的工作有目的地停止服务,例如dB备份,是的,这是SCM收敛的时候,我是否应该再次强调SCM应该定期运行?

–滕西拜
17 Mar 10 '17 at 20:35

点是周期性和连续性之间的差异。在大多数情况下,每5分钟左右聚合一次是不实际的,这是服务的停机时间5分钟。这就是为什么我们需要流程管理器来管理流程,而配置管理器来管理配置。我不希望人们阅读此答案将两者混为一谈。

–阿德里安
17 Mar 10 '17 at 20:37