Как отключить сайт nginx по умолчанию при использовании Chef и Vagrant?

я использую 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'

' роли / 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]"
  ]
}

вот рецепты / по умолчанию / по умолчанию.rb для сайта nginx я добавляю:

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

(P.S. Я знаю, что права доступа к файлам должны быть изменены, я просто возился с множеством вещей, я обновлю их, как только все остальное будет работать)

а вот атрибуты по умолчанию.rb:

override['nginx']['enable_default_site'] = false

вы можете видеть, что я попытался отключить сайт по умолчанию в интернете.json, атрибуты и сам рецепт, но ни один из них не прилипает.

у меня нет определенного узла или одиночного узла, и я не уверен, что это проблема. Моя главная проблема с vagrant до сих пор была бесконечными возможностями для того, как делать вещи. Нет двух примеров, сделанных одинаково, и я не уверен, что считается "лучшим" или "правильным" способом.

2 ответов


вы можете отключить любой сайт nginx по имени, используя nginx_site и его имя. Проблема заключается в том, что nginx_site определение фактически ищет параметр enable, который должен быть установлен в true или false, а не параметр action, установленный в: disabled.

чтобы отключить сайт по умолчанию, добавьте в свой рецепт:

nginx_site 'default' do
  enable false
end

это работает для меня с версии 1.7.1 поваренной книги nginx opscode. Я не знаю, будет ли это работать с версией предоставлено сообществом, поскольку ему, по-видимому, несколько месяцев.

чтобы получить последнюю версию, добавьте в свой Berksfile:

cookbook 'nginx', git: 'https://github.com/opscode-cookbooks/nginx'

надеюсь, что это поможет:)


Я получаю ту же ошибку, но у меня нет сайта по умолчанию включена. Вместо этого он исходит от /etc/nginx/conf.d/default.conf! Мне пришлось прибегнуть к

file "/etc/nginx/conf.d/default.conf" do
  action :delete
end

это происходит из пакета RHEL, который кулинарная книга nginx устанавливает на мой ящик.