Rails
Vagrant
chef-solo
Berkshelf

Chef-Solo + Berkshelf で Rails 4 の開発環境を構築

More than 3 years have passed since last update.


はじめに


今までの流れ

この記事は以下の2つの記事の内容の続きです。


今回やること

Chef-Solo + Berkshelf による自動環境構築

自動環境構築の Hello, World! 的なことをやったので、

今度はもう少し実用的なものをインストールしてみる。

具体的には Vagrant で Ruby on Rails 4 の環境構築 で作った環境を

Chef-Solo + Berkshelf を使って構築してみる。


インストール先 (Node)

Chef-Solo + Berkshelf による自動環境構築 で Emacs をインストールした環境をそのまま流用する。


各種設定


仮想環境の設定

Chef-Solo + Berkshelf による自動環境構築 の Vagrantfile の内容に、

config.vm.network :"forwarded_port", guest: 3000, host: 3000

を追記。Rails で使用するポートにローカルからアクセスできるようにする。


Vagrantfile

# -*- mode: ruby -*-

# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos6.5"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"
config.vm.network :"forwarded_port", guest: 3000, host: 3000
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "4096"]
end
end


上記設定で新規作成 or 既存の仮想マシンを起動。

$ cd ~/vagrant/hoge_machine # 仮想マシンの設定保存先

$ vagrant up

既に仮想マシンが起動中の場合は以下のコマンドをで設定ファイルを再読み込み。

$ cd ~/vagrant/hoge_machine # 仮想マシンの設定保存先

$ vagrant reload


Berkshelf の設定

Berksfile を下記のように書き換える。


chef_repo/Berksfile

source "https://api.berkshelf.com"

cookbook 'emacs'
cookbook 'rvm', '~> 0.9.2'
cookbook 'sqlite', '~> 1.1.0'
cookbook 'mysql', '~> 5.3.6'
cookbook 'git'
cookbook 'build-essential'
cookbook 'nginx', '~> 2.7.4'
cookbook 'openssl', '~> 2.0.0'


これで以下のCookbookを取得できる。


  • Ruby 関係


    • RVM



  • DB 関係


    • SQLite

    • MySQL



  • Webサーバー関係


    • Nginx

    • build-essential

    • openssl



  • その他開発関係


    • Git

    • Emacs



※ CentOS 6.5 の場合、mysql の部分に '~> 5.3.6' と指定してやらないと、インストール時にコケた。


Node の json ファイル設定

下記のように使用する Cookbook を指定する。

また、RVM と MySQL の初期設定も記述する。

これで Ruby 2.1.x がデフォルトのRubyとしてインストールされ、

MySQL 5.6 がポート 3306、root パスワードが vagrant の設定でインストールされる。


chef_repo/nodes/192.168.33.10.json

{

"run_list": [
"recipe[emacs]",
"recipe[rvm::system]",
"recipe[sqlite]",
"recipe[mysql::server]",
"recipe[mysql::client]",
"recipe[git]",
"recipe[build-essential]",
"recipe[openssl]",
"recipe[nginx]"
],
"automatic": {
"ipaddress": "192.168.33.10"
},
"rvm": {
"user": "root",
"default_ruby": "ruby-2.1",
"user_default_ruby": "ruby-2.1",
"rubies": ["ruby-2.1"]
},
"mysql":{
"version":"5.6",
"port":"3306",
"server_root_password":"vagrant",
"remove_anonymous_users":true
}
}


設定反映

下記のコマンドを実行。

$ bundle exec berks vendor cookbooks

$ bundle exec knife solo prepare vagrant@192.168.33.10 -i ~/.vagrant.d/insecure_private_key
$ bundle exec knife solo cook vagrant@192.168.33.10 -i ~/.vagrant.d/insecure_private_key


確認

試しに Rails のプロジェクトを作ってみる。

仮想環境に vagrant ssh でログイン後に下記コマンドを実行。

$ mkdir ~/projects

$ mkdir ~/projects/sample_rails_project
$ cd ~/projects/sample_rails_project
$ bundle init

作成された Gemfile を以下のように編集。


Gemfile

# A sample Gemfile

source "https://rubygems.org"

gem "rails"


下記コマンドを実行。

$ bundle install --path vendor/bundle

$ bundle exec rails new .
...
conflict Gemfile
Overwrite /home/vagrant/projects/sample_rails_project/Gemfile? (enter "h" for help) [Ynaqdh] Y
...

上書きされたGemfileを開き、下記行のコメントアウトを解除。


Gemfile

gem 'therubyracer', platforms: :ruby


その後下記コマンドを実行

$ bundle install --path vendor/bundle

$ bundle exec rails server -b 0.0.0.0

ローカルマシンのブラウザから http://192.168.33.10:3000 にアクセス。

以下のような画面が見えれば成功。

50bd0f15-797f-d591-29a4-bde835968abf.png


おわりに


  • Berkshelf のおかげで自分で Cookbook を書くことなく楽に環境構築できた。

  • ポートフォワーディングの設定をしたが、ローカルから http://192.168.33.10:3000 でアクセスするならVagrantfileのこの部分の設定いらなかったかも。

  • 実験用環境作る際には、 Chef-Solo + Berkshelf + Vagrant で構築手順作っといて、Github 等に必要なファイル一式上げとくと、将来的楽できそう。