【问题标题】:How to configure nginx with chef solo on vagrant?如何在 vagrant 上用厨师独奏配置 nginx?
【发布时间】:2014-05-10 07:32:47
【问题描述】:

我有一个启动正常的流浪虚拟机,我已经通过以下方式使用 nginx 对其进行了配置:

config.vm.provision "chef_solo" do |chef|
chef.add_recipe "nginx"

当它启动时,nginx 已安装并运行。完美的。 (我使用 berkshelf 来管理食谱,那一本来自 opscode)
现在我想实际配置 nginx,在这种情况下作为反向代理运行。我似乎无法找到如何。我可以准备好一个 conf 文件并将其发送到 VM,但我确信还有另一种方法可以利用说明书。最好的选择是能够直接从 Vagrant 文件中按照上述行进行配置。也许使用像这里描述的自定义 json 数据 http://docs.vagrantup.com/v2/provisioning/chef_solo.html.
它看起来像:

chef.json = {
    "nginx" => {

但是http://community.opscode.com/cookbooks/nginx 的食谱页面对我来说有点神秘,有一些有趣的选项,但我不知道如何包含/使用它们。

【问题讨论】:

  • 你看过 GitHub 上的文档吗:github.com/opscode-cookbooks/nginx
  • Chef 社区网站中的格式对于阅读食谱的自述文件不是特别好。试试GitHub page
  • 感谢 cmets。确实它更容易阅读,但我还没有理解进入 Vagrantfile 的格式。任何文档或示例将不胜感激。

标签: nginx chef-infra vagrant


【解决方案1】:

如果您想将 nginx 配置为反向代理,那么您需要编写一个调用 cookbook_file 资源或 template 资源的食谱。我建议使用后者,因为它稍后会更加灵活,并且会为您提供可重复使用的模板供其他食谱使用。

我建议您阅读此处的文档: http://docs.opscode.com/resource_template.html#using-templates

如果您想查看真实食谱中的反向代理示例。看这里:

https://github.com/lusis/chef-kibana/blob/master/recipes/nginx.rb

https://github.com/lusis/chef-kibana/blob/master/templates/default/kibana-nginx.conf.erb

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    这对我有用:

    Vagrant.configure("2") do |config|
    
        config.vm.box = "opscode-ubuntu-14.04"
        config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.04_chef-provisionerless.box"
    
        config.omnibus.chef_version = :latest
    
        config.vm.provision "shell", inline: "echo 'set nocp' > /home/vagrant/.vimrc"
    
        config.vm.define "nginx" do |nginx|
    
            nginx.vm.network "private_network", ip: "192.168.33.14"
    
            nginx.vm.provision :chef_solo do |chef|
                chef.cookbooks_path = "cookbooks"
                chef.add_recipe "nginx"
    
                chef.json = {
                    :nginx => {
                        dir: '/etc/nginx'  # this is the default value, sample only
                    }
                }
            end
    
            nginx.vm.provision "shell",
                inline: "echo -e $1 > /etc/nginx/conf.d/nginx.conf",
                args: [<<-EOS
                    server {
                        listen *:80;
    
                        location ~ ^/ {
                            proxy_pass http://192.168.33.11:8080;
                        }
                    }
                EOS
                ]
    
        end
    

    请注意,在我编写 nginx.config 的地方,我可以编写其他每个站点的配置(domain1.conf、domain2.conf),它们都会被加载。

    我最终需要把很多食谱拿下来:

    https://github.com/opscode-cookbooks/nginx
        https://github.com/opscode-cookbooks/build-essential
        https://github.com/opscode-cookbooks/ohai
        https://github.com/opscode-cookbooks/bluepill       
            https://github.com/opscode-cookbooks/rsyslog
        https://github.com/hw-cookbooks/runit
        ??
            https://github.com/opscode-cookbooks/yum
    

    【讨论】:

    • 请注意,我仍然需要重新加载 vagrant 才能重新加载 nginx.conf 配置。