【发布时间】:2015-10-16 17:19:38
【问题描述】:
我正在学习厨师,到目前为止,我了解到最好将所有 opscode cookbooks 放在 cookbooks 目录中,并将我的所有自定义设置放在 site-cookbooks 中。这样我就可以在 site-cookbooks 中镜像例如 apt cookbook 并更改
默认['apt']['compile_time_update'] = true
强制进行 apt-get 更新,而在此之前它没有这样做。 顺便说一句,我花了很长时间才发现这个属性文件将被命名为“customize.rb”,据我所知,它没有在任何地方记录。
为了获得所有食谱及其对简单 LAMP 堆栈的依赖项,我正在使用 vagrant-librarian 插件。 所以我的 Cheffile 看起来像这样。
site 'http://community.opscode.com/api/v1'
cookbook 'apt', '~> 2.8.2'
cookbook 'openssl', '~> 4.4.0'
cookbook 'apache2', '~> 3.1.0'
cookbook 'mysql', '~> 6.1.0'
cookbook "php", github: "priestjim/chef-php"
cookbook 'phpmyadmin', '~> 1.0.6'
我的 Vagrantfile 如下:
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.name = 'chef-lamp'
end
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.host_name = "project.dev"
config.vm.synced_folder "./public", "/vagrant/"
config.omnibus.chef_version = "12.3.0"
config.vm.provision "chef_solo" do |chef|
chef.arguments = '--force-formatter'
chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
chef.add_recipe 'apt'
chef.add_recipe 'build-essential'
chef.add_recipe 'mysql'
chef.add_recipe 'xml'
chef.add_recipe 'openssl'
chef.add_recipe 'apache2'
chef.add_recipe 'apache2::mod_php5'
chef.add_recipe 'apache2::mod_rewrite'
chef.add_recipe 'php'
chef.add_recipe 'php::module_mysql'
chef.add_recipe 'apache2::mod_php5'
chef.add_recipe 'apache2::vhost'
#chef.add_recipe 'phpmyadmin'
end
end
我的主要问题是为什么厨师总是在处理 apt cookbook 后立即尝试安装 php,尽管它在运行列表中的位置很靠后,导致尝试重新启动 apache 时出现编译错误,例如由于 apache 正在运行线程 MPM,但您的 PHP 模块未编译为线程安全的。
当我将配置分为两部分时,第一次运行没有任何 php 资源,然后在第二次运行中添加 php 资源(流浪者配置),那么它工作正常。
我在那里错过了什么......我如何告诉厨师运行“apt,apache2,mysql” - 首先......然后安装php??
另一个问题是——我可以确定图书馆员添加的所有依赖项都由厨师(自动)包含在运行列表中,还是我必须像使用“build-essentials”一样手动包含所有依赖项我的 Vagrantfile 中的示例。
希望有人能帮助我,谢谢。
【问题讨论】:
-
我几乎不认为
cookbooks/site-cookbooks模式是这些天要走的路。使用 Berkshelf 管理依赖项。你看过chefdk吗? -
好吧,我认为这是将自己从角色和包装食谱中拯救出来的最佳方式,同时保持版本控制的分离。
-
为什么要从角色和包装器中拯救自己?
标签: php apache vagrant chef-infra librarian