Chef-Solo で Apache の VirtualHost を設定する
Vagrant 関連を一通りマスターしたところで、そろそろ Chef の調査を再開しようと思う。
以前、PHP をインストールするところまでやった。
http://d.hatena.ne.jp/okinaka/20110705/1309830735
今回は、Apache の VirtualHost の設定を行う。
Opscode の apache2 用 cookbook に仕組みが用意されているので、これを利用することにした。
VirtualHost の設定は、Webアプリケーション特有のものになるため、独自の cookbook を用意する。仮に myproj という名前で作成してみた。
$ cd /var/chef-solo $ rake new_cookbook COOKBOOK=myproj
apache2 の cookbook から VirtualHost のテンプレートファイルをコピーする。
$ cd cookbooks $ cp apache2/templates/default/web_app.conf.erb \ myproj/templates/default/myproj.conf.erb
複製した myproj.conf.erb を加工する。たとえば、RewriteRule などの設定が不要だったのでコメントアウトしておいた。テンプレートの中身はこんな感じ。
myproj/templates/default/myproj.conf.erb:
<VirtualHost *:80> ServerName <%= @params[:server_name] %> ServerAlias <% @params[:server_aliases].each do |a| %><%= "#{a}" %> <% end %> DocumentRoot <%= @params[:docroot] %> : : (省略) : </VirualHost>
次にレシピを作成する。
myproj/recipes/default.rb:
include_recipe "apache2" execute "a2dissite default" web_app "myproj" do docroot "/srv/myproj/public" template "myproj.conf.erb" server_name node[:fqdn] server_aliases [node[:hostname], "myproj"] end
include_recipe で apache2 のレシピを読み込んでいる。その後はデフォルトの VirtualHost を無効化し、web_app で VirtualHost の設定を行っている。環境ごとに変わる部分に関しては、attribute を参照するようにし、node.json で設定できるようにしておけばいいだろう。
最後に node.json を用意する。
{ "run_list":"recipe[myproj]" }
chef-solo を実行する。
$ chef-solo -j node.json -c solo.rb
以上。