【问题标题】:Can I use chef as a PaaS deployment orchestrator to deploy multiple drupal sites?我可以使用 chef 作为 PaaS 部署协调器来部署多个 drupal 站点吗?
【发布时间】:2012-11-09 22:57:31
【问题描述】:

“在问这个愚蠢的问题之前,我向你道歉”

所以,我的想法是:

  • 厨师服务员
  • N 个节点

在每个节点上;我将定义一个基本角色;像“NodeRole”,它将有 apache、php、mysql

然后,我希望能够部署“à la demande”多个虚拟主机,每个虚拟主机都包含完整的 drupal 安装。

所以这个新角色将具有一些属性,例如:

"username"
"password"
"URL"

当“部署”这个时;它会:

- Add an entry to apache virtual host configuration
- Create a user account with provided password
- Create a database user with provided password
- Install drupal with the provided credentials

我怎样才能“动态地”做到这一点,而不必每次我想部署一个新站点时都创建一个 txt 文件。

是否可以与厨师服务器 api 交互并说出类似“部署 www.example.com john mypassword”的内容?

谢谢!

【问题讨论】:

  • 您准备好厨师解决方案了吗?你想要的和 Aegir 类似的声音:aegirproject.org
  • 艾吉尔不错;但是,我希望它更灵活一点……我不会只使用drupal,而是使用其他几个框架; drupal 只是一个初学者......如果问题不是那么清楚,对不起。

标签: drupal deployment chef-infra cookbook


【解决方案1】:

Chef 是一个拉模式,由客户请求他们的配置。如果您想推动,则必须注入其他东西才能做到这一点。一个命令调度程序,可以在需要时调用客户端与服务器联系。

如果你想一遍又一遍地做同样的事情,感觉就像创建一个 LWRP http://wiki.opscode.com/display/chef/Lightweight+Resources+and+Providers+(LWRP) 可能是你最好的选择。然后您可以将您拥有的变量传递给它,这样代码就不需要复制 X 次了。

如果您不想为每次安装创建新配方,另一种选择是在属性对象中使用 JSON 混搭功能并循环通过创建安装的对象集合。这种方式是数据驱动的,但我个人希望每次安装使用不同的配方,因为它可能对查看运行列表的人更透明。

使用属性 mash 的示例如下所示。您也可以使用数据包来实现这一点。在这种情况下,您可以更新文件中的 JSON 表示并使用刀上传或在 UI 中进行更改。我会再次推荐每个站点的食谱以提高透明度,但这会导致代码/更新运行列表等

你的属性 json 对象看起来有点像这样或类似

"drupal_Sites" : {
    "site1": { "username": "dave", "password" :"password123", "URL":"www.madeup.com" },
    "site2": { "username": "dave2", "password" :"password12", "URL":"www.madeup2.com" }
}

那么在你的食谱中会是这样的

node["drupal_sites"].each do | site | 

Install = yourdrupalcookbook_InstallResource "#{site['URL']}" do
    username site['username']
    password site['password']
    deploy site['URL']
    action :nothing 
    provider "yourdrupalcookbook_InstallProvider"
end

Install.run_action(:create)

结束

【讨论】:

  • 不明白;我知道厨师是一个拉模型;所以每次我都会修改一个节点在服务器上的角色;客户会拉新的变化吗?它每 30 分钟完成一次。
  • 什么是'json mash capabilites'?能举个简单的例子吗?
  • 关于拉取模型的评论只是关于联系 chef-server api,你能做的最好的就是传播更改,然后在下一次厨师运行时将其删除,但对任何混淆表示歉意。 chef 中的 mash 基本上只是 Ruby 中的哈希,带有一点扩展将更新答案以包含示例
  • 谢谢;我现在明白了。关于 REST api;我可以发送一个带有可以“触发”节点更新的属性的json(正如你上面用你的代码解释的那样)吗?
  • 您可以使用 REST API 或刀来上传/更新环境或角色属性并传递一个 json 文件,是的。客户端的下一次运行将看到更新的属性
猜你喜欢
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多