humangas's blog

自分用のメモなので雑です。

入門Chef Solo:03-nginxをChef Soloで立ち上げたい

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

レシピ

nginx用のクックブックを作成

$ knife cookbook create nginx -o cookbooks

レシピを書く

レシピcookbooks/nginx/recipes/default.rb

package "nginx" do
    action :install
end

service "nginx" do
    action :status => true, :restart => true, :reload => true
    action [ :enable, :start ]
end

template "nginx" do
    path "/etc/nginx/nginx.conf"
    soruce "nginx.conf.erb"
    owner "root"
    group "root"
    mode 0644
    notifies :reload, 'service[nginx]'
end

テンプレートファイル

erbテンプレートの置き場所:cookbooks/nginsx/templates/default/nginx.conf.erb

テンプレートには変数展開用のタグ<%= ... %>を記述できる。

例)

listen  <%= node['nginx']['port'] %>;

nginxportのような変数をChefでは"Attribute"という。

JSONファイル(Node Object)

テンプレートファイルの変数の値はJSONファイルに指定する。

{
    "nginx": {
        "port" : 80
    },
    "run_list":[
        "nginx"
    ]
}

Chef Serverを使う場合はChef Serverに保存される。Chef SoloではローカルにJSONファイルとして書いておく。

Chefでは管理対象サーバーのことをノード(node)と呼ぶ。JSONファイルに書いてあるデータ構造はNode Objectという。Node ObjectつまりJSONファイルは、ノードごとにひとつ作ることになる。

クックブック内のディレクトリ

使用頻度の高いもの:

recipes

レシピファイルを格納するディレクトリ。

templates

テンプレートを格納するディレクトリ。
サブディレクトリにあるdefaultがある。defaultではないディレクトリは、クロスプラットフォームに対応する場合に作成する。つまり、異なるLinuxディストリビューションでも動作するレシピを作りたい場合に使う。

files

ファイルを格納するディレクトリ。
レシピから操作したいファイルのうち、変数を使う必要のないものを置く。

attributes

変数のデフォルト値を設定したい場合に、そのファイルを格納するディレクトリ。
テンプレートで使ったAttribute(変数)のデフォルト値を変更したい場合などに使う。

Chef Soloを実行する

対象サーバー上で以下を叩いて、ブラウザからURLを入れてアクセスしてみる。

$ sudo chef-solo -c solo.rb -j ./localhost.json

Vagrant + CentOSでの注意点

デフォルトでiptablesが有効になっており、ブラウザからnginxへアクセスできない。
Chefでiptablesをオフにすることもできるが、本番環境でそれを意図せずに実行しないように注意する。

広告を非表示にする