Edited at

Vagrant,chef-soloでRails開発環境の構築

More than 3 years have passed since last update.


はじめに

以下を参考

http://murayama.hatenablog.com/entry/2014/10/15/073819

翻訳サイトではありますが、vagrantとは的なところから丁寧に説明してくれています。

githubのurl名指しでとってきてるcookbookをchefが参照できなかったり、cookbook自体が非推奨になってたり、railsのaoutloadが効かなかったりしたので、少し変えてあります。


1. 各種インストール

$ brew cask install vagrant

$ brew cask install virtualbox
$ vagrant plugin install vagrant-vbguest
$ vagrant plugin install vagrant-librarian-chef


2. 使うcookbookをCheffileに定義

そして自分のrailsプロジェクトrootにて、

Cheffileを作ります。

$ vi Cheffile


Cheffile

site "http://community.opscode.com/api/v1"

cookbook 'apt'
cookbook 'build-essential'
cookbook 'mysql', '5.5'
cookbook 'ruby_build'
cookbook 'nodejs'
cookbook 'ruby_rbenv'
cookbook 'vim'
cookbook 'timezone_lwrp'


と書きます。

mysqlのバージョンは以下を参考に、欲しいOSに適したバージョンにするといいと思います。

https://supermarket.chef.io/cookbooks/mysql


3. vagrantファイル用意

続いて、自分のrailsプロジェクトrootにて、

$ vagrant init

とするとVagrantfileが出来上がります。

それ以下のように編集します。


Vagrantfile

# -*- mode: ruby -*-

# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# 欲しいOSを探して指定するといいと思う。
# https://atlas.hashicorp.com/boxes/search
config.vm.box = "ubuntu/precise64"

# virtual boxの設定
config.vm.provider :virtualbox do |vb|

# メモリとかcpuとか指定できる
# http://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvm
vb.customize [
"modifyvm", :id,
"--memory", "2048"]

# VMのシステム時刻がずれていく問題の対応
vb.customize [
"setextradata", :id,
"VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled", 0]
end

# nfs経由で接続
# うまくいかない場合はホスト側の /sbin へのpathを通してあげる
config.vm.network :private_network, ip: "192.168.33.10"
config.vm.network :forwarded_port, guest: 3000, host: 3000
config.vm.synced_folder ".", "/vagrant", type: "nfs"

# 仮想環境がhostの秘密キーを使えるようになる
config.ssh.forward_agent = true

# Chef Solo の設定
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["cookbooks", "site-cookbooks"]

# 使うrecipe
chef.add_recipe "apt"
chef.add_recipe "nodejs"
chef.add_recipe "ruby_build"
chef.add_recipe "ruby_rbenv::system"
chef.add_recipe "ruby_rbenv::user"
chef.add_recipe "vim"
chef.add_recipe "mysql::client"
chef.add_recipe "timezone_lwrp"

# recipeのnodeに渡したいことをここに書く
chef.json = {
rbenv: {
user_installs: [{
user: 'vagrant',
rubies: ["2.0.0-p195"],
global: "2.0.0-p195",
gems: {
"2.0.0-p195" => [
{ name: "bundler" }
]
}
}]
},
tz: "Asia/Tokyo"
}
end
end



4. vagrant実行

vagrant実行

$ vagrant up

中に入る

$ vagrant ssh

/vagrant にrailsプロジェクトの一式が入っているかと思います。

bundle install とか rails s をよしなに実行していただければ。