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