VagrantとChefでNode.jsの開発環境を構築する

『JS+Node.jsによるWebクローラー/ネットエージェント[開発テクニック]』のサンプルを試すためにNode.jsの開発環境を作った。本の紹介に従ってVagrantを使用し、CentOS6.5の環境を作った。ゲストOSの設定を手動でポチポチするのは面倒だったので、プロヴィジョニングにChefを使用した。

{% amazon text 4883379930 %}

{% amazon medium_image 4883379930 %}

基本的には以前に書いたVagrantとChefでRailsの開発環境を構築すると同じ。主な変更点は以下の通り。

  • knife soloを使わない。
  • Chef soloではなく、Chef zeroを使う。

利用したツールのバージョン

  • ゲストOS: OSX El Capitan 10.11.2
  • VirtualBox 5.0.10 r104061
  • Vagrant 1.7.4
  • Chef Development Kit Version: 0.10.0

事前準備

VagrantとVirtualBox、ChefDKをインストールする。

brew install vagrant
brew cask install virtualbox
brew cask install chefdk

Vagrantのプラグインをインストールする。

vagrant plugin install vagrant-omnibus

プロジェクトのディレクトリを作成する。

mkdir node_crawler
cd node_crawler

クックブックの配置

クックブックのリポジトリを作成する。

chef generate repo chef-repo
cd chef-repo

Berksfileを作成する。

# Berksfile
source "https://supermarket.chef.io"

cookbook 'nvm', '~> 0.1.7'
cookbook 'git', '~> 4.3.5'
cookbook 'vim', '~> 2.0.0'

berkshelfを実行する。

berks vendor cookbooks

カスタムクックブックを作成する。

knife cookbook create base -o site-cookbooks

metadata.rbにdepends 'nvm'を追加する。

default.rbを編集する。

nvm_install 'v0.12.4' do
  from_source false
  alias_as_default true
  action :create
end

vagrant up

Vagrantfileを作成する。

cd ../
vagrant init

Vagrantfileを編集する。

  • boxはpuphpet/centos65-x64を使用する。
  • provisionerにchef_zeroを指定する。
# Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "puphpet/centos65-x64"

  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "private_network", ip: "192.168.33.10"

  config.omnibus.chef_version = :latest

  config.vm.provision "chef_zero" do |chef|
      chef.cookbooks_path = ["chef-repo/cookbooks", "chef-repo/site-cookbooks"]

      chef.add_recipe 'nvm'
      chef.add_recipe 'git'
      chef.add_recipe 'vim'

      chef.add_recipe 'base'
  end
end

vagrant up。

vagrant up

しばらく待てばプロヴィジョニングと仮想マシンの起動が完了する。

動作確認

仮想マシンにログインしてnvmとnodeがインストールされていることを確認する。

vagrant ssh

$ nvm --version
0.30.1
$ node -v
v0.12.4

感想

  • Chef関連の手順は、あまり情報を追っていないこともあり、正直よくわからない。
  • Chef soloとChef zeroの違いがよくわからない。
  • chef/centos-6.5のboxがなくなっていて驚いた。