wata.dev

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の正しい始め方 | tsuchikazu blog

入門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 がわかり易かった。

ブログの記事一覧