Chefでnginxを導入してみる
移転しました →
ウェブサーバーnginxをChefで入れてみました。
cookbookを用意する
knifeでcookbookを生成します。自分で管理するcookbookはsite_cookbooksに置くのが慣例のようです。
$ cd chef-repo $ knife cookbook create nginx -o site_cookbooks
インストールや起動、設定ファイルについてレシピに追記します。説明はコード内のコメントで。
# パッケージ管理ツールを使ってnginxをインストールします。 package "nginx" do action :install end service "nginx" do # nginx がサポートしている機能を教えてあげます。 # restartとかできるよーという意味らしい。 supports status: true, restart: true, reload: true # サーバーを有効にした上で、スタートします。 # 有効にしておけばマシン再起動時にも勝手にサーバーが起動します。 action [:enable, :start] end # ./site_cookbooks/templates/default/nginx.conf.erbを元にして # nginxの設定ファイルを決まったところに置くよという指示 # Chefの規約にのおかげで置き場所のパスやテンプレートファイルは省略できている template "nginx.conf" do # ownerとgroupはrootユーザーでパーミッションは644 owner "root" group "root" mode 0644 # この動作のあとでnginxを再起動してねという指示 notifies :reload, "service[nginx]" end
また、設定ファイルの元となるテンプレートはこちらで用意してあげないといけません。内容は入門Chef Soloを参考にしています。
user nginx; worker_process 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mim.types; default_type application/octet-stream; server { listen <%= node["nginx"]["port"] %> server_name centos-one; location / { root /usr/share/nginx/html; index index.html index.htm; } } }
設定ファイル内部に一箇所だけ変数のようなものがあります。確かChefではAttributeというはず、、、
これはjsonファイルで設定してあげないといけません。
{ "nginx": { "port":80 }, "run_list":[ "iptables", "nginx", ] }
このファイルのjsonがハッシュとなってerbファイルで使うことができるようですね。なので上のように書いておけば、さきほどの設定ファイルテンプレートでnode["nginx"]["port"]のようにして使うことができる、というわけ。今回はポートを80番にしています。
そのぐらいならAttributeを使うまでもないですが、IPやホスト名を環境によってに変更したいときなどに使えそうです。
Chefを実行
$ cd chef-repo $ knife solo cook vagrant@192.168.33.10
ところが失敗するはずです。これはcookbookに問題があったわけではなく、CentOSで使われているパッケージ管理yumのリポジトリの設定不足が原因です。nginxは初期設定に入っているリポジトリには含まれないです。
yumの設定
yumのリポジトリを追加するのもChefを使ってやります。手動設定はダメです。yumのcookbookはOPSCODEのものを使うことにします。
$ cd chef-repo $ knife cookbook site vendor yum
これによりいくつかのレシピが導入されます。あとはjsonファイルを次のように変更して…
{ "nginx": { "post":80 }, "run_list":[ "yum::epel", // ←追加 "iptables", "nginx", ] }
さきほどと同じようにChefを流してみるとnginxのインストールが無事完了すると思います。
nginxの動作確認
動作確認のためホストOS側のブラウザでアクセスしてみましょう。http://192.168.33.10/ にアクセスしてnginxのデモページが表示されていれば完了です。