Ruby on Railsの環境構築は、RubyのインストールとRails のバージョンを指定してインストールするが必要でしたが、これらの作業をChef Soloで自動化してみました。
Chefを動かすにはCentOS6にChef Soloをインストールするが必要なので、まず先にやっておきます。
次にCookbookを作りますが、Opscode Communityに多くのCookbookが公開されているため、Cookbookを全て自作しなくてもある程度の環境構築はできてしまします。*1
公開されているCookbookを使うには、依存関係のあるCookbookをまとめてダウンロードしてくれるBerkshelfを使用します。
Berkshelfをインストールします。
$ gem install berkshelf
chef-repo配下にBerksfileを作成し、以下のようにCookbookを指定します。
Ruby on Railsの環境構築のため、今回はrbenvというCoookbookを使用します。
Opscode Community以外のCookbookを使用する場合は、以下のようにgit:~のように指定します。
$ cd chef-repo/ $ vi Berksfile site :opscode cookbook 'rbenv', git: 'https://github.com/fnichol/chef-rbenv'
berksコマンドを実行してCookbookをダウンロードします。
berksコマンドを実行するとBerksfile.lockが作成され、依存関係のあるCookbookが一覧で表示されます。
$ berks install
サーバにChefをインストールします。
$ knife solo prepare <ユーザ名>@<サーバのIPアドレス>
RubyのバージョンとRailsのバージョンを指定してインストールするには、下記のようにJSONファイルを作成します。*2*3
run_listには、実行するCookbookである、ruby_buildとrbenvを指定しています。
また、rbenvオブジェクトでAttributeのデフォルト値を上書きします。
今回は、インストール先のユーザ、Rubyのバージョン、rbenvのglobal設定、Railsのバージョンを指定しました。
$ vi nodes/<サーバのIPアドレス>.json { "rbenv": { "user_installs": [ { "user": "<ユーザ名>", "rubies": ["1.9.3-p545","2.0.0-p353"], "global": "1.9.3-p545", "gems": { "1.9.3-p545": [ { "name": "bundler" }, { "name": "rails", "version": "~>3.0" } ] } } ] }, "run_list":[ "recipe[ruby_build]", "recipe[rbenv::user]" ] }
サーバに対してchef-soloを実行します。
$ knife solo cook <ユーザ名>@<サーバのIPアドレス>
Ruby on Railsの環境構築ができたことを確認するため、サーバにログインし、Railsで新規アプリケーションを作成するの手順を実行し、「http://<サーバのIPアドレス>:3000」にアクセスできることを確認します。