我正在使用Berkshelf、Chef和Vagrant,尝试配置在nginx上运行的自定义站点。我正在使用opscode nginx配方,然后编写自己的配方来制作自定义站点。当我运行vagrant up时,会出现一个错误,指出没有禁用默认的nginx站点。我找到了几个不同的建议,但似乎都没有起作用。
错误信息:
STDOUT:
STDERR: nginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/sites- enabled/kyleboon.me:2
nginx: configuration file /etc/nginx/nginx.conf test failed
我的Berksfile文件:
site :opscode
metadata
cookbook 'nginx'
我定义的'roles/web.json'角色:
{
"name": "web",
"chef_type": "role",
"json_class": "Chef::Role",
"description": "The base role for systems that serve HTTP traffic",
"default_attributes": {
"nginx": {
"default_site_enabled": false
},
"app": {
"name": "kyleboon.me",
"web_dir": "/var/data/www/kyleboon.me"
},
"user":{
"name": "vagrant"
}
},
"run_list": [
"recipe[nginx]",
"recipe[kyleboon.me]"
]
}
这是我添加的nginx网站的recipes/default/default.rb:
nginx_site 'default' do
action :disable
end
%w(public logs).each do |dir|
directory "#{node.app.web_dir}/#{dir}" do
owner node.user.name
mode "0755"
recursive true
end
end
template "#{node.nginx.dir}/sites-available/kyleboon.me" do
source "site.erb"
mode 0777
owner node.nginx.user
group node.nginx.user
end
nginx_site "kyleboon.me"
cookbook_file "#{node.app.web_dir}/public/index.html" do
source "index.html"
mode 0755
owner node.user.name
end
(提示:我知道文件权限需要更改,我一直在尝试各种方法,一旦我把其他的东西都搞定了,就会更新它们)
这里是attributes/default.rb:
override['nginx']['enable_default_site'] = false
你可以看到我尝试在web.json中禁用默认站点,包括属性和此配方本身,但它们都没有生效。
我没有定义一个节点或独立节点,我不确定那是否是一个问题。到目前为止,我在vagrant上的主要问题是如何做事情有无数可能性。没有两个示例是以相同的方式完成的,我不确定什么是被认为是“最好”或“正确”的方法。
node['nginx']['enable_default_site']
禁用默认站点 - 也许您在以前的运行中留下了 sites-enabled 中的符号链接,这些符号链接不再由 chef 管理(因为 Chef 不会仅因为删除资源声明而删除文件)。 - cmur2