ChefやVagrantの進歩で周辺のツールも便利になりました。
Windowsはssh
を追加するとKnife Zeroが使えます。
Chef Zeroの入門としてRuby(rbenv)の環境を自動構築する方法を紹介します。
(Chef Solo版はこちらです。)
Dependency
- VirtualBox: 4.3.20
- Vagrant: 1.7.2
- Cmder: 1.1.4.1
- Ubuntu: 14.04
- Chef: 11.18.0
- Ruby: 2.1.5
- Rails: 4.2.0
(Chef12は安定するまで見送りました。)
Usage
VirtualBox
仮想化のVirtualBoxをインストールします。
Vagrant
VirtualBoxを操作するVagrantをインストールします。
Cmder
Windowsはssh
やgit
のインストールが必要なのでCmderを使います。
Example
Rails Installation
Git
Vagrantfileとcookbook
をダウンロードします。
(OSが32bit
の場合はbox_url
をubuntu-14.04-i386_chef
に変更して下さい。)
$ git clone https://github.com/hommachirb/chef-recipe-rails.git
$ cd ./chef-recipe-rails
$ edit Vagrantfile
rbenv
のcookbook
をダウンロードします。
(berkshelfで収集する方法が便利ですね。)
$ git clone https://github.com/opscode-cookbooks/apt.git ./cookbooks/apt
$ git clone https://github.com/fnichol/chef-ruby_build.git ./cookbooks/ruby_build
$ git clone https://github.com/fnichol/chef-rbenv.git ./cookbooks/rbenv
Vagrant
マシンを構築するとChefのRecipeでRuby
の開発環境が構築されます。
$ vagrant up
ChefのRecipeを再実行するにはprovision
コマンドを利用します。
$ vagrant provision
Bundler
仮想マシンにログインします。
$ vagrant ssh
Railsをインストールして、アプリケーションを作りましょう。
vagrant@vagrant:~$ bundle config --global jobs 4
vagrant@vagrant:~$ gem install rails --no-rdoc --no-ri
vagrant@vagrant:~$ rails new rails-example
vagrant@vagrant:~$ cd rails-example
vagrant@vagrant:~$ rails server --binding 0.0.0.0
http://192.168.33.30:3000/
にアクセスするとWelcome
が表示されます。
Tips
Chef Zero
Vagrantで構築したマシンにChef Local Mode
で操作します。
Gem
Gem
を利用するのでWindowsやMacにRuby
のインストールが必要です。
$ gem install chef
$ gem install knife-zero
Local Mode
chef-recipe-rails
をローカルモードで利用する準備をします。
$ mkdir .chef
$ echo 'local_mode true' > .chef/knife.rb
Environment
development
を作ります。
$ knife environment create development
$ knife environment list
Role
レシピのrun_list
を作ります。
$ knife role create rails
$ knife role show rails
Node
vagrant.vm
のノードが作成されるので、run_list
を追加します。
$ knife zero bootstrap 192.168.33.30 -x vagrant -i .vagrant/machines/default/virtualbox/private_key --sudo
$ knife node list
$ knife node show vagrant.vm
$ knife node run_list add vagrant.vm 'role[rails]'
Chef Client
仮想マシンのChef Clientを実行します。
$ knife zero chef_client 'name:*' -x vagrant -i .vagrant/machines/default/virtualbox/private_key --sudo -p 2222
@sawanobolyさんのローカルモードチュートリアルが参考になります。