我正在学习厨师,到目前为止,我了解到最好将所有 opscode 食谱放在 cookbooks 目录中,并将我的所有自定义设置放在 site-cookbooks 中。通过这种方式,我可以在 site-cookbooks 中镜像例如 apt cookbook 并更改
默认['apt']['compile_time_update'] = true
强制进行 apt-get 更新,而在此之前它没有这样做。顺便说一句,我花了很长时间才发现这个属性文件将被命名为“customize.rb”,据我所知,它没有在任何地方记录。
为了获得一个简单的 LAMP Stack 依赖项的所有食谱,我使用了 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'
我的流浪文件如下:
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 食谱后立即尝试安装 php,尽管它在运行列表中的位置很差,导致尝试重新启动 apache 时出现编译错误,例如 apache 正在运行线程 MPM,但是你的 PHP模块未编译为线程安全的。
当我将配置分成两部分时,第一次运行没有任何 php 资源,然后在第二次运行中添加 php 资源(vagrant 配置),那么它工作正常。
我在那里错过了什么......我怎么能告诉厨师运行“apt,apache2,mysql” - 首先......然后安装php?
另一个问题是——我可以确定图书馆员添加的所有依赖项都由厨师(自动)包含在运行列表中,还是我必须像我在“构建要素”中那样手动包含所有依赖项,例如在我的流浪文件。
希望有人可以帮助我,谢谢。