LoginSignup
77
77

More than 5 years have passed since last update.

VagrantにRuby/Rails開発環境を整えるChef+Berkshelf構築メモ

Last updated at Posted at 2014-09-02

なんかいろんな方法があって、迷いまくった結果こんな感じで構築してみているメモです。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
Gemfile
# 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。

yum-pkg/metadata.rb
# もし依存cookbookがあるなら dependsで指定する
# depends 'hoge'
yum-pkg/recipes/default.rb
%w[openssl openssl-devel sqlite sqlite-devel].each do |pkg|
    package pkg do
        action :install
    end
end

Berkshelfの設定

自前のレシピ+サードパーティのを書き連ねる。

rbenvは、Berkshelfで配布されているものではなくて、GitHubに上がっている別のものを使用します。こっちのほうが良さげだったので。

Berkshelf
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の修正

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
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です。

77
77
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77
77