もふもふ技術部

Chef + VagrantでCentOS 6.5 + rbenv + Nginx + Passenger + Rails4 環境を構築する


自作cookbooksは最小限にしてなるべくcommunity cookbookを使う方針で。

けっこうハマりました。特にNginx + Passengerあたりがcommunity cookbookではうまくいかず(rbenvだからいけなかったか?)、仕方なく自前でソースコードをコンパイルするレシピを書いたりした。

環境はMac 10.9 marvericksで。

お料理するよ!

Vagrant, Chef, knife-solo, Berkshelfなどのインストールは過去にやっているので参照されたし。

Vagrant
Vagrantで簡単にUbuntu 12.04を動かしてみるところまで。

Chef, knife-solo
CentOS 6.4でchef soloとknife soloを使ってphp実行環境を構築

berkshelfとpluginのインストール

vagrant-berkshelfはvagrantのエコシステムから外れてしまったらしく将来的にどうなるかわからないので使わずに行きます。

作業用ディレクトリを作成。

Berksfileを準備します。

Vagrantfileを作成します。

ちなみに CentOS-6.5-x86_64-minimal という名前でbox addされている必要があります。boxは自由に変えていただければと思います。

berkshelfを使ってcommunity cookbookをダウンロードしておく。パスを指定しなければカレントディレクトリのberks-cookbooksにダウンロードされます。

以前はberks install –path /path/to/cookbooks だったんですが、新しいバージョンではエラーが出るようになってました。

あと、berks vendorで落としてきた場合、再度 berks vendor すると「既にディレクトリがあるよ!」って怒られるので、めんどうなんですが rm -rf berks-cookbooks してから berks vendor してました。こうじゃない感があるのですが正しいやり方が見つけられなかった。

自作のcookbookを作成するためにknifeでcookbook一式を生成します。自作cookbookはsite-cookbooks下に置くのが一般的。

iptables設定のためのテンプレートファイルと、自作レシピを書いて行きます。

site-cookbooks/rails-chef/recipes/default.rb

site-cookbooks/rails-chef/templates/default/http.erb

site-cookbooks/rails-chef/templates/default/ssh.erb

続いて、nginxとpassenger用のレシピ。こちらを参考にさせていただいた!
https://gist.github.com/philwo/3051666

site-cookbooks/rails-chef/recipes/nginx_passenger.rb

設定ファイル類はあらかじめfilesに用意しておく。今回は決めうちでやってしまったが、この辺は汎用性を高めた方がよい気がする。

nginx共通設定ファイル
site-cookbooks/rails-chef/files/default/nginx.conf

railsアプリケーションの設定ファイル
site-cookbooks/rails-chef/files/default/sample_rails.conf

nginxの起動スクリプト
site-cookbooks/rails-chef/files/default/nginx

起動スクリプトはこちらを参考にさせていただいた。
http://www.happytrap.jp/blogs/2012/02/23/8243/

ソースコード取得はcapistranoでやる予定なので、今回は手作業でやってしまえ。ごめんなさい。

git cloneするとき、githubなどを使う場合は公開鍵認証が必要になるので、ssh-agentに鍵登録して、Vagrantfileで config.ssh.forward_agent = true の設定をしておくと楽。ゲストOS側で鍵の設定がいらないです。

あとは gem install bundler, bundle installなどなどRailsに関わる操作を行いますが、そこらへんは割愛しちゃいますね。

最後に

自作cookbookにcommity cookbookに依存するレシピを書いてしまっていたり、アプリケーション個別のレシピがnginx_passengerのレシピに入っていたり、ちょっと保守性アレでイケてないのでのちのち改善していきたい。

今回のブログを書くために書いたものはGithubにアップしてます。十分に検証出来てませんが、少しでも参考になれば幸い。
https://github.com/harada4atsushi/rails_chef

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。