我们使用Chef(Chef-Solo)来创建托管网站节点,为此它非常棒。
我们使用刀独奏将我们的节点跟踪为JSON文件。我们的节点配置(json文件)本身被检入git仓库。我们的节点设置文件和服务器(节点)本身之间存在一对一的关系。
某些节点为客户端托管多个站点,如果只为其中一个站点运行Chef过程的部署部分,而不是运行整个Chef节点设置过程,那么很高兴有一个轻量级的解决方案。
我意识到这可能是以不打算使用的方式使用厨师。我得到了Chef的“拉”方法,它是幂等性的,它是如何用于配置管理的,以及这种类型的东西如何超出了通常的范围。简单地说......我想利用Chef deploy 资源来部署站点,但不需要在特定服务器上部署所有站点。
另外,我熟悉Capistrano以及它或多或少地完成了我想要做的事情......如果我可以提供帮助,我根本不想为DevOps工作流程引入另一个框架。看起来好像Chef似乎以与Capistrano非常类似的方式部署,我希望有一种方法可以像这样利用Chef。
由于
答案 0 :(得分:0)
我唯一的想法是chef-apply
答案 1 :(得分:0)
您可以使用多个厨师烹饪书 - 一个客户网站的一本食谱。并在此烹饪书中部署网站。
答案 2 :(得分:0)
经过广泛的研发后,我确定我的选择选择了一个。以下是选项,最终是我选择的选项。
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文件。
我们通过Jenkins(more info on how I use jenkins)启动部署,但这可以使用对网站具有SSH访问权限的任何内容来完成。
希望这会有所帮助。