なんかいろんな方法があって、迷いまくった結果こんな感じで構築してみているメモです。Berkshelfでサードパーティなcookbookを使いつつ、オリジナルのも混ぜる感じで。このサードパーティを利用しつつ、自前で書きたいものの連携がなんかよく分からんかったです。
というわけで、できるまでの構築メモを書いてみました。
過程とかどうでもいいから、すぐ構築したい
構築できればよかろうなのだァァァァッ!!というカーズな人向けに、もろもろ揃ったものをGitHubにあげておきました。README通りにやればたぶん…いけるはず。
初期設定
環境
- CentOS 6.5
- Vagrant 1.6.3
- ruby 2.1.1(rbenv)
vagrant-omnibusのインストール
仮想環境内にサクッとChefを入れるために、Vagrantのプラグインomnibusを使用したいので、入ってない場合はインストールします。
$ vagrant plugin install vagrant-omnibus
Vagrant + Bundlerの初期化
これで、VagrantfileとGemfileが作成されます。とりあえずGemfileだけ修正します。
$ cd proj_dir
$ vagrant init
$ bundle init
# A sample Gemfile
source "https://rubygems.org"
ruby '2.1.1'
gem 'chef'
gem 'knife-solo', '~> 0.4.0'
gem 'berkshelf', '~> 3.0.0'
$ bundle install --path vendor/bundler
これで、bundle exec berks
コマンドが打てるようになりました。
オリジナルレシピ作成
今回は単純にyum
でopenssl, openssl-devel, sqlite3, sqlite3-develをインストールするレシピを作ります。openssl-develがないと、rbenvでRubyビルドするときにエラーになるので。sqlite3-develは、railsで使うので入れておきます。
$ bundle exec berks cookbook yum-pkg
単純に使うなら、下記2ファイルのみいじればOK。
# もし依存cookbookがあるなら dependsで指定する
# depends 'hoge'
%w[openssl openssl-devel sqlite sqlite-devel].each do |pkg|
package pkg do
action :install
end
end
Berkshelfの設定
自前のレシピ+サードパーティのを書き連ねる。
rbenvは、Berkshelfで配布されているものではなくて、GitHubに上がっている別のものを使用します。こっちのほうが良さげだったので。
source 'https://api.berkshelf.com'
cookbook 'yum-pkg', path: 'yum-pkg'
cookbook 'git'
cookbook 'build-essential'
cookbook 'yum', '~> 3.2.4'
cookbook 'vim', '~> 1.1.2'
cookbook 'openssl', '~> 2.0.0'
cookbook 'nginx', '~> 2.7.4'
cookbook 'unicorn', '~> 2.0.0'
cookbook 'rbenv', :git => 'git://github.com/fnichol/chef-rbenv.git', :branch => 'v0.7.2'
cookbook 'ruby_build', '~> 0.8.0'
cookbook 'mongodb', '~> 0.16.1'
cookbook 'nodejs'
$ bundle exec berks vendor cookbooks
Vagrantfileの修正
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos65"
# Chef最新版をインストール(omnibus)
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = "./cookbooks"
chef.run_list = [
'recipe[yum-pkg]'
]
chef.add_recipe 'yum'
chef.add_recipe 'build-essential'
chef.add_recipe 'ruby_build'
chef.add_recipe 'rbenv::system'
chef.add_recipe 'git'
chef.add_recipe 'vim'
chef.add_recipe 'nginx'
chef.add_recipe 'unicorn'
chef.add_recipe 'mongodb'
chef.add_recipe 'nodejs'
# Ruby2.1.2をインストール
chef.json = {
"rbenv" => {
"global" => "2.1.2",
"rubies" => [ "2.1.2" ],
"gems" => {
"2.1.2" => [
{ 'name' => 'bundler' }
]
}
}
}
end
end
$ vagrant up
かなり時間はかかるが、これでRubyもろもろの環境が整うはず…。
Railsの準備
次は、Railsのプロジェクトを作ってみます。Vagrantの仮想環境内に入って作業をします。
$ vagrant ssh
以下、仮想環境内のコンソールです。
$ cd /vagrant
$ mkdir rails
$ cd rails
$ bundle init
$ vi Gemfile
# A sample Gemfile
source "https://rubygems.org"
gem "rails"
$ bundle install --path vendor/bundle
$ bundle exec rails new sample --skip-bundle
$ cd sample
$ bundle install --path vendor/bundle
試しにRailsサーバを立ち上げてみます。
$ bundle exec rails s
これで無事起動すればOKです。