使用Chef进行站点部署但没有完整的节点设置

时间:2014-01-06 20:40:01

标签: chef chef-solo knife knife-solo

我们使用Chef(Chef-Solo)来创建托管网站节点,为此它非常棒。

我们使用刀独奏将我们的节点跟踪为JSON文件。我们的节点配置(json文件)本身被检入git仓库。我们的节点设置文件和服务器(节点)本身之间存在一对一的关系。

某些节点为客户端托管多个站点,如果只为其中一个站点运行Chef过程的部署部分,而不是运行整个Chef节点设置过程,那么很高兴有一个轻量级的解决方案。

我意识到这可能是以不打算使用的方式使用厨师。我得到了Chef的“拉”方法,它是幂等性的,它是如何用于配置管理的,以及这种类型的东西如何超出了通常的范围。简单地说......我想利用Chef deploy 资源来部署站点,但不需要在特定服务器上部署所有站点。

另外,我熟悉Capistrano以及它或多或少地完成了我想要做的事情......如果我可以提供帮助,我根本不想为DevOps工作流程引入另一个框架。看起来好像Chef似乎以与Capistrano非常类似的方式部署,我希望有一种方法可以像这样利用Chef。

由于

3 个答案:

答案 0 :(得分:0)

我唯一的想法是chef-apply

答案 1 :(得分:0)

您可以使用多个厨师烹饪书 - 一个客户网站的一本食谱。并在此烹饪书中部署网站。

答案 2 :(得分:0)

经过广泛的研发后,我确定我的选择选择了一个。以下是选项,最终是我选择的选项。

  • chef-apply
    • 这是厨师v11中引入的一个方便实用程序,可让您快速运行配方。主要用于测试。
    • 如果这不足之处,那就是要真正使食谱可以重复使用,你需要有某种类型的论据。这个实用程序似乎不支持它。
  • 当我使用knife-solo时,我为本地管理的每个“节点”(以及git repo中)都有一个json文件。对于那些不熟悉的人.. knife-solo使用的json文件与您要连接和设置的主机(节点)的名称相匹配。我可以管理我的主机名的一些别名,而不是选择只部署网站的json文件,而不是额外的。
    • 这需要设置仅用于部署站点的配方。根据您设置烹饪书和食谱的方式,您可能已经将站点部署逻辑与其自己的配方隔离。如果没有,你可以重构这样做。
    • 这需要广泛使用ssh config 文件。而且真的不是非常灵活或直观。特别值得关注的是,如果您预计自己可能不是唯一使用此设置的人。
    • 这个很复杂。
  • 走出刀 - 独奏领域之外,可以直接在服务器上运行chef-solo。这仍然需要一个JSON文件来指定参数/参数,以及要运行的配方。
    • 在服务器上运行chef-solo -c solo.rb -p deploy.json是一种快速方法,只运行 deploy.json 文件中定义的厨师服务器设置过程的子集。

全部放在一起

使用vanilla chef-solo 可执行文件的最大挫折是必须通过JSON文件指定参数(关于如何在CLI上指定内联JSON,有discussion,但似乎不起作用,至少可靠)。

简而言之,应该有一个标准的服务器设置JSON文件(如果你愿意,可以通过knife-solo管理),它包含所有的服务器设置。然后有一个小的json文件每个站点 在仅部署该站点的主机上。

我所做的是使用主厨服务器设置配置来创建每个站点所需的json文件。我的主厨进程已经知道服务器上的每个站点,因为它需要部署站点代码,设置数据库和配置apache等。所以除了这一切之外,它还会创建一个指示运行的json文件列表和一些其他属性,指示要部署的站点。

我使用.erb文件来创建站点部署json文件。例如:

{
 "custom_cookbook": {
    "deployroot": "<%= @deployroot %>",
    <% if @git_revision -%>
    "git_revision": "<%= @git_revision %>",
    <% end -%>
    <% if @settings_file -%>
    "settings-file": "<%= @settings_file %>",
    <% end -%>
    "git_repository_url": "<%= @git_repository_url %>"
  },
  "run_list": [
    "recipe[custom_cookbook::deploy]"
  ]
}

一旦这些json文件就位,使用chef部署一个站点,只需运行上面指定的chef-solo命令,并使用-j参数指定由主/主厨流程创建的自定义站点特定的json文件。

我们通过Jenkinsmore info on how I use jenkins)启动部署,但这可以使用对网站具有SSH访问权限的任何内容来完成。

希望这会有所帮助。