ChefでSSL対応の仮想ホストを作成
資料がすくないなぁ。いろいろと試行錯誤してようやくちゃんと出来たので記録として残しときます。
DocumentRootを変更して、仮想ホスト名をつけています。
ssl_certificateクックブックを利用する
いろいろと調べていると、ssl_certificateってのがsupermarket.chef.ioにありました。berksでこれをインストール。
Berksfileに以下を追加。ssl_certificateはapache2クックブックが入っていることが前提となっているので、apache2もないなら入れときましょう。
site :opscode (中略) cookbook 'apache2' cookbook 'ssl_certificate'
berksで追加。
$ berks
独自クックブックを作成
デフォルトのインストールだけならapache2のレシピとnode値でなんとかなるのですが、ちょいと手の混んだことをするためには別のcookbookを作成したほうが苦労が少ないようです。作成したcookbookをapache2のdependにしておけばOK。
$ knife cookbook create apache22 -o site-cookbook
依存関係を記述
上記で作成したapache22 cookbook中のmetadata.rbにapache2とssl_certificateをdependする対象として追記。文法がわからなくて試行錯誤した結果、複数行かけばいいらしい。
site-cookbook/apache22/metadata.rb
depends "apache2" depends "ssl_certificate"
attributeを記述
サイトで共通になる値を記述。あ、DocumentRootもここにかけばよかったかな。
site-cookbook/apache22/attribute/default.rb
default['apache']['contact'] = "webmaster@example.com"
node.jsonにFQDNを記述
それぞれのマシンで仮想ホスト名が違うので、それをnode以下のhostnamne.jsonへ記述。
node/hostname.json
"apache22": { "site_fqdn": "sslsite.example.com" }
recipe作成
あとはrecipeを作成。
site-cookbook/apache22/recipes/default.rb
include_recipe 'apache2' include_recipe 'apache2::mod_ssl' my_key_path = '/usr/local/apache2/conf/ssl/server.key' my_cert_path = '/usr/local/apache2/conf/ssl/server.crt' my_chain_path = '/usr/local/apache2/conf/ssl/server.cer' web_app "ssl_site" do cookbook "apache2" server_name node['apache22']['site_fqdn'] allowoverride "all" docroot "/home/hoge/htdocs" end ssl_certificate "ssl_site" do key_path my_key_path cert_path my_cert_path chain_path my_chain_path end web_app "ssl_site" do cookbook "ssl_certificate" server_name node['apache22']['site_fqdn'] docroot "/home/hoge/htdocs" ssl_key my_key_path ssl_cert my_cert_path ssl_chain my_chain_path end
真ん中んのssl_certificateっていうリソースはいるのかなぁ。なんだか不要なきもするんだけど、exampleにそう書いてあったので入れときました。