CentOS7にNginx1.9をインストールする方法
をChef化してみます。
Cookbook名はnginx
、置き場所は$repo/site-cookbooks/nginx
とます。
(ターゲットはCentOS7です。他のディストリビューションの場合は少し修正がいるかもしれません。)
Nginxをインストールするレシピ
ちょいちょいっとレシピを書きます。
recipes/default.rb
template "/etc/yum.repos.d/nginx.repo" do
owner "root"
group "root"
mode "0644"
end
package "nginx" do
action :install
options "--enablerepo=nginx"
end
service "nginx" do
action [:enable, :start]
supports :start => true, :status => true, :restart => true, :reload => true
end
templates/default/nginx.repo.erb
# nginx用のレポジトリ設定ファイル
# see http://nginx.org/en/linux_packages.html#stable
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=0
これをプロビジョン実行すると、インストール完了・サービス起動・自動起動設定までやってくれます。
sudo chef-solo -c solo.rb -j localhost.json -o nginx
ただこれだけだとNginxの設定ファイルの管理ができないので、設定ファイルの管理もやってしまいましょう。
設定ファイルもChefで管理するには
Nginxインストール後の/etc/nginx/ 以下をまるっとエクスポート
cp -ar /etc/nginx/ /vagrant/site-cookbooks/nginx/templates/default/
(私はVagrantを使っているのので) /vagrant/以下にコピーすることで、設定ファイルをホストマシンのレポジトリ管理下に置くことができます。
エクスポート後に、ホストマシン側で site-cookbooks/nginx/templates/default/
をまるっとコミットします。
設定ファイルをプロビジョンする
さっきのレシピにこのように追記します。
設定ファイルのリストは、ディストリビューションによって異なるかもしれません。
( conf.d
以下の設定ファイルは単なるサンプルっぽかったのではしょりました。)
recipes/default.rb
%w{
nginx.conf
fastcgi_params
koi-utf
koi-win
mime.types
scgi_params
uwsgi_params
win-utf
}.each do |file|
template "/etc/nginx/#{file}" do
source file
owner "root"
group "root"
mode "0644"
notifies :start, 'service[nginx]'
notifies :reload, 'service[nginx]'
end
end
完成したらエイっとプロビジョンして、差分がでなければ (Chef Client finished, 0 resources updated のような出力が出れば)OKです。