chef-solo で ngx_pagespeed 組み込み nginx をインストール
目下 入門Chef Solo - Infrastructure as Code を読み進めつつ、vagrant で仮想サーバーを起ち上げながら試行錯誤しているんですが、サードパーティ製の nginx cookbook に ngx_pagespeed モジュールを追加、ngx_pagespeed を –add-module してインストールするようにフォークしてみました(*1)。
使い方
Berksfile に、
chef-repo/Berksfile
site :opscode
cookbook 'yum'
cookbook 'nginx', git: "https://github.com/wata/chef-nginx.git"
と、書いておき berks install 。
$ cd chef-repo
$ berks install
実行後、各 cookbooks が chef-repo/cookbooks 以下に配置される。
そしたら nodes/*.json の run_list に追加、nginx の設定書く。
chef-repo/nodes/*.json
{
"run_list": [
"yum::epel",
"iptables", // 80番ポート空けとく、もしくは確認だけなら off にしとく
"nginx"
],
"nginx": {
"install_method": "source", // デフォルトでパッケージインストールなので、source にする
"source": {
"modules": [
"http_ssl_module",
"http_gzip_static_module",
"ngx_pagespeed_module" // chef-nginx/recipies/ に ngx_pagespeed_module.rb を追加してあるので、ここに追加
]
},
"ngx_pagespeed": {
"pagespeed": { // ここに書いたものが nginx.conf (*2)に pagespeed RewriteLevel ... みたく列挙される
"RewriteLevel": "CoreFilters",
"FileCachePath": "/var/cache/nginx/ngx_pagespeed",
"EnableFilters": "collapse_whitespace,add_instrumentation,remove_comments"
},
"source_url": "https://github.com/pagespeed/ngx_pagespeed/archive/release-1.5.27.3-beta.zip",
"source_checksum": "90fd33e75b726109635c42d314aab98fa85cfcaac655bb2b98d7f58f1642cef3"
},
"psol": {
"source_url": "https://dl.google.com/dl/page-speed/psol/1.5.27.3.tar.gz",
"source_checksum": "2f93d394e9a1932d1287460563cdde078ac76f8163856d68088d170a38ab6901"
}
}
}
あとは適当に vagrant で centos とか起ち上げて、 knife solo cook centos すればいけるはず。
…と言いつつ、このままだと実行後、 ip でアクセスしても404ページになっちゃいますね。。nginx.conf で見てる root が /var/www/nginx-default になってるので、とりあえず mkdir -p /var/www/nginx-default 、vi /var/www/nginx-default/index.html してファイル&ディレクトリ作ったら見れるようになりました。
(*1)
Berkshelfやlibrarianで、サードパーティのcookbookを扱う場合、Bundler風に扱うのが目的なので、ダウンロードしたcookbookを編集しないのが自然です。なので、変更したくなった場合はgemと同様にforkして、forkしたものをinstallしていく形がいいらしいです。
入門Chef Soloにも「自分で書くかサードパーティのものを使うか」の話が出てくるんですが、「rubygems なんかのように、車輪の再発明を避けてどんどん既存のものを使っていくべき・・・という性格のものとは少し性格が違う …」と書いてあったりして、rubygems などとは性格が違うことを理解しつつ、自分で効率いい方を選べばいいのかなと思いました。とはいえ、opscode でみんなで共有出来る|するようになってるわけで。。
(*2)
nginx.conf.erb の中で以下のようにして展開してるだけなんで、ngx_pagespeed/test/pagespeed_test.conf.template at master · pagespeed/ngx_pagespeed · GitHub や PageSpeed Examples Directory を見ながら好きに書けます。
<% node['nginx']['ngx_pagespeed']['pagespeed'].each do |k, v| -%>
pagespeed <%= k %> <%= v %>;
<% end -%>
recipe の基本的な書き方は ChefでCookbookを作成するときのちょっとしたコツ 9選 - インフラエンジニアway - Powered by HEARTBEATS がわかり易かった。