Help us understand the problem. What is going on with this article?

Vagrant で作成した仮想マシンに chef-solo を使用して Rails 環境を構築

More than 5 years have passed since last update.

Vagrant (Ubuntu) に chef-solo を使用して Rails 環境の構築を実施

  • git, rbenv, ruby, rails をインストールするための chef の recipe を作成する
  • vagrant を使用して新規に仮想環境を作成
  • chef-solo を使用して作成した仮想環境に rails をインストールする

できていないこと(要改善)

  • chef を使用していながら bash コマンドを多用しているため、冪等性が保証できていない

前提条件

  • chef を使うために操作するマシン(workstation) に Mac を、環境を設定する対象のマシン(node) を Vagrand で作成する Ubuntu server 12.04 とする

  • VirtualBox, Vagrant, chef, knife-solo が Mac にインストールされていること

設定

vagrant

  • Vagrant の公式ページで公開している precise32 の box を取得
$ vagrant box add precise32 http://files.vagrantup.com/precise32.box
  • インストールをすると ~/.vagrant.d/boxes/precise32 ができる
  • 今回はホームディレクトリ下に Vagrant/CreateRailsEnvOnUbuntu/ を作成し、作業用ディレクトリとする
  • 設定ファイルの生成
$ vagrant init precise32
  • 実行後に Vagrantfile ができているいることを確認
  • Vagrantfile をエディタで開き、 config.vm.network :private_network, ip: "192.168.33.10" のコメントアウトを外し保存
  • 起動
$ vagrant up
  • ログイン
$ vagrant ssh
  • $ ifconfig で eth1 に 192.168.33.10 がふられていることを確認
  • ログイン設定を保存
    • $ exit で一度終了
    • 下記コマンドで設定を保存しておく
    • $ vagrant ssh-config --host “任意の名前” >> ~/.ssh/config
    • $ ssh “任意の名前” で先ほどの仮想環境にログイン出来るようになる(今回は ubuntu0321 とする)

Chef

  • chef のリポジトリポジトリを作成する
$ knife solo init railsenv
  • 作成したリポジトリに移動
$ cd railsenv
  • chef solo を使用し、node (ubuntu 側) に Chef をインストール
$ knife solo prepare ubuntu0321
  • 下記が出力されるとインストール完了

Thank you for installing Chef!

  • 同時に railsenv/nodes/ubuntu0321.json が作成される

Recipe の準備

git のインストール

  • まずは、git を導入
  • railsenv/ ディレクトリで下記コマンドを入力
$ knife cookbook create git -o site-cookbooks
  • site-cookbooks/git/ というディレクトリが出来る
  • site-cookbooks/git/recipes/default.rb を編集する
default.rb
%w{libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev}.each do |pkg|
  package pkg do
    action :install
  end
end

package "git-core" do
  action :install
end
  • package コマンドの install アクションで指定したパッケージをインストールできる

  • nodes/ubuntu0321.json を編集する

ubuntu0321.json
{
  "run_list":[
    "recipe[git]"
    ]
}
  • git/recipes/ 下のファイルを実行できるようにする

  • 下記コマンドで chef を実行

$ knife solo cook ubuntu0321

ruby, rails のインストール

  • railsenv/ ディレクトリ ruby 用の cookbook を作成する
$ knife cookbook create ruby -o site-cookbooks
  • site-cookbooks/ruby/recipes/default.rb を編集する
default.rb
# package コマンドでインストール
%w{build-essential curl zlib1g-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev sqlite3 libsqlite3-dev nodejs make gcc ncurses-dev libgdbm-dev libdb4.8-dev libffi-dev tk-dev}.each do |pkg|
  package pkg do
    action :install
  end
end

# git コマンド
# action sync は初回時は clone, 存在していたら pull をする
git "/home/vagrant/.rbenv" do
  repository "git://github.com/sstephenson/rbenv.git"
  reference "master"
  action :sync
  user "vagrant"
  group "vagrant"
end

# directory コマンドでディレクトリ作成
%w{/home/vagrant/.rbenv/plugins}.each do |dir|
  directory dir do
    action :create
    user "vagrant"
    group "vagrant"
  end
end

git "/home/vagrant/.rbenv/plugins/ruby-build" do
  repository "git://github.com/sstephenson/ruby-build.git"
  reference "master"
  action :sync
  user "vagrant"
  group "vagrant"
end

# bash コマンドが使えるが複数回繰り返すと冪等性が保証されない
# 処理の中で、source ~/.bashrc をしているが再読込されないため
# 以降の処理を実行するには、一度 vagrant から出て、再度 ssh ログインする必要がある
bash "insert_line_rbenvpath" do
  environment "HOME" => '/home/vagrant'
  code <<-EOS
    echo 'export PATH="/home/vagrant/.rbenv/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc
    chmod 777 ~/.bashrc
    source ~/.bashrc
  EOS
end


bash "install ruby" do
  user "vagrant"
  group "vagrant"
  environment "HOME" => '/home/vagrant'
  code <<-EOS
    /home/vagrant/.rbenv/bin/rbenv install 2.0.0-p0
    /home/vagrant/.rbenv/bin/rbenv rehash
    /home/vagrant/.rbenv/bin/rbenv global 2.0.0-p0
  EOS
end

bash "install rails" do
  code <<-EOC
    export PATH="/home/vagrant/.rbenv/bin:$PATH"
    eval "$(rbenv init -)"
    gem update --system
    gem install --no-ri --no-rdoc rails
  EOC
end

参考

kasaharu
ふろんとえんどえんじにあ
https://kasaharu-web.web.app/
classi
学校の先生・生徒・保護者向けのB2B2Cの学習支援Webサービス「Classi(クラッシー)」 を開発・運営している会社です。
https://classi.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした