组织 Chef 资源并扩展食谱:Apache2 包 + 编译的 PHP

组织 Chef 资源并扩展食谱:Apache2 包 + 编译的 PHP

我正在尝试了解如何组织我的 Chef 厨房并扩展 Opscode 社区食谱的功能。免责声明:n00b。

计划堆栈

  • Ubuntu 12.04.2
  • Apache2(软件包)
  • PHP 5.4.13(已编译)
  • MySQL 服务器
  • MySQL 客户端

APACHE COOKBOOK + 编译后的 PHP

Apache cookbook 仅提供了将 php 作为软件包安装的方法。官方 Ubuntu 12.04 软件包安装 PHP 5.3,没有好的非官方 5.4+ 软件包。该应用程序需要 PHP 5.4+。因此,必须使用标志从源代码编译 PHP "--with-apxs2"

峰面积X射线光电子能谱

要编译 PHP 以与 Apache2 一起使用,需要 apxs2(或 apxs),它似乎没有被安装apache::default(即使apache2 -l显示mod_so.cApache 文档似乎表明这表示安装。)

  1. 我确实注意到了第 142-143 行默认的 apache.conf.erb 模板有一行注释掉LoadModule了“保持 apxs 正常运行”的内容,但我不明白它的用途。Apache2 文档中是否缺少一些简单的内容来说明如何安装或启用 apxs?
  2. Apache cookbook 没有提供安装dev软件包的方法。那么应该在哪里进行安装?我的“sample_lamp_app”配方?在“my_apache2”等“扩展”社区 cookbook 的配方中?带有not_if测试 apxs 条件的“php::source”配方?

笔记

请不要回答“升级到 Ubuntu 12.10”或“改用这个非官方的 Apache2 cookbook”之类的问题。首先,项目规范要求 12.04。其次,我更感兴趣的是学习在 cookbook 中组织和交互的正确方法。

答案1

几周前,我在一次会议上向 Opscode 的一位员工问了同样的问题。

我们目前使用的是旧版本的 chef (10.14.4),因为它允许您将食谱存储在多个位置,chef 会将它们全部合并在一起。当您这样做时,它会警告您已弃用的行为,但 Opscode 的人似乎没有正确的答案来做到这一点。

目录结构

我们只覆盖要更改的部分和元数据文件。在本例中,我们复制了默认.rb文件,进行更改并将其保存在我们的食谱覆盖目录。请注意,我们还复制了元数据.rb,其中我们增加了版本号。我通常会在前面加上一个 9,这样我的版本号就始终是最高的,因此版本号类似于92.2.13代替2.2.13这样,我就使用9作为命名空间的类型了。

`-- chef
    |-- cookbooks
    |   `-- apache2
    |       |-- attributes
    |       |   `-- ...
    |       |-- CHANGELOG.md
    |       |-- CONTRIBUTING.md
    |       |-- definitions
    |       |   `-- ...
    |       |-- files
    |       |   `-- ...
    |       |-- Gemfile
    |       |-- LICENSE
    |       |-- metadata.json
    |       |-- metadata.rb
    |       |-- README.md
    |       |-- recipes
    |       |   `-- ...
    |       `-- templates
    |           `-- ...
    `-- cookbooks-overrides
        `-- apache2
            |-- metadata.rb
            `-- recipes
                `-- default.rb

刀.rb

我们告诉厨师在哪里可以找到食谱

...
cookbook_path [
    "#{ENV['HOME']}/dev/deployment/chef/cookbooks",
    "#{ENV['HOME']}/dev/deployment/chef/cookbooks-overrides"
]

现在,当你使用以下命令将食谱推送到 Chef 服务器时刀具食谱上传,您会收到一个警告,因为该食谱存在于多个地方,但它仍然会很乐意将它们合并在一起,最终您会得到一本可以满足您的要求的食谱。

我确信这不是“正确的方法”,但到目前为止,这无疑是一种成功的方法。只需稍加努力,确保在更新底层食谱(在本例中为 apache2)时,覆盖仍然有效。

其他参考

这个帖子谈论创建“包装食谱”来做你想做的事情。

这个帖子谈论管理第三方食谱的工具。

相关内容