LoginSignup
45
44

More than 5 years have passed since last update.

vagrantとchefとdockerによるRails開発環境構築(vagrantの環境構築)

Last updated at Posted at 2014-08-11

vagrantの環境構築

 dockerで環境を作成する前にvagrantで環境を作成します。その際にchefのレシピを使用するので、必要なものをインストールしておきます。今回利用するものは、「chef」と「knife-solo」と「berkshelf」を入れておきます。

環境構築

chefのインストール

$ gem install chef

knife-soloのインストール

 knife-soloとはローカルで作成したクックブックをリモートで実行する流れを自動化してくるものです。

$ gem install knife-solo

Berkshelfのインストール

 Berkshelfとは、誰かが作成したクックブックの依存性を管理してくれるツールです。

$ gem install berkshelf

必要なgemをまとめる

 実際にchef等を利用する際には、純粋にgem installによってグローバルに割り当てることで、利用することはできます。しかし、バージョンによる動作の違いを解消するために、プロジェクト単位等でまとめて管理すると影響がすくなるので必要なgemは、budlerを用いて管理していきます。

bundlerのインストール

 bundlerはrubyのライブラリである、gemを依存関係を管理し導入するためのものです。

$ gem install bundler

Gemfileの作成

 Gemfileは、bundle installを実行した際に記述されているgemと依存関係にあるものをまとめてインストールしてくれます。また、Gemfile.lockというものが作成されますが、消さないようにしてください。Gemfile.lockはbundle installを行った際に参照するバージョンが記載されているからです。ただし、Gemfile.lockがない場合は、最新バージョンを参照にしにいきます。

###Gemfile

source 'https://rubygems.org'

gem 'chef'
gem 'knife-solo'
gem 'berkshelf'

bundle installの実行

 作成したGemfileの内容を取り込みます。

$ bundle install

bundle updateについて

 bundle updateを実行するさいには、注意が必要です。なぜなら、Gemfile.lockの内容に関係なく、最新版のgemを参照にしにいこうとすからです。なので、バージョンを固定したいものがあれば、Gemfileに記述します。

$ bundle update
###バージョンを固定する例
###Gemfile

#バージョンの指定なし
gem 'rails'

#バージョンの固定
gem 'rails', '4.1.0'

#4.0以降のバージョンに指定
gem 'rails', '>=4.0'

#4.1以降から5.0以前のバージョンに指定
gem 'rails', '~>4.1'

クックブックとレシピ

 今後、クックブックとレシピという言葉を頻繁に出てきますので、簡単に説明します。

レシピ

 レシピとは、chefの設定をまとめたものを言います。

クックブック

 クックブックとは、レシピをまとめたもので、管理する単位のことを言います。

nginx(エンジンエックス)の導入

 nginxとは、リバースプロキシ等の設定が簡単で、動作が軽いnginxを導入します。

nginxのクックブック作成

$ bundle exec knife cookbook create nginx -o ./site-cookbooks

nginxのレシピ作成

 クックブック作成時インポートされたファイルのdefault.rbを編集します。

###./site-cookbooks/nginx/recipes/default.rb

include_recipe 'yum-epel'

package 'nginx' do
  action :install
end

service 'nginx' do
  action [ :enable, :start ]
  supports :status => true, :restart => true, :reload => true
end

Berksfileの作成

$ vim Berksfile
###Berksfile

###berkshelf2.x系の場合
site :opscode

###berkshelf3.x系の場合
source "https://api.berkshelf.com"

###共通
cookbook 'yum-epel'
cookbook 'nginx', path: './site-cookbooks/nginx'

berks installの実行

###berkshelfが2.x系の場合
$ bundle exec berks install --path ./cookbooks

###berkshelfが3.x系の場合
$ bundle exec berks vendor ./cookbooks

vagrant-omnibusのインストール

 これは、vagrantのbox内にchefやchef-soloが含まれていないため、それを自動でインストールしてくれるものです。

$ vagrant plugin install vagrant-omnibus

またしてもエラーが。。。

Installing the 'vagrant-omnibus' plugin. This can take a few minutes...
Building nokogiri using packaged libraries.
Bundler, the underlying system Vagrant uses to install plugins,
reported an error. The error is shown below. These errors are usually
caused by misconfigured plugin installations or transient network
issues. The error from Bundler is:

An error occurred while installing nokogiri (1.6.3.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.3.1'` succeeds before bundling.

 いろいろと調べてみたら、原因はxcodeが足りなかったようでなので、コマンドを実行して、installしたら、成功するようになりました。

$ xcode-select --install

Vagrantファイルの編集

 最初に作成したVagrantファイルを編集します。ファイルの変更内容は、vmのbox名とbox名のurlを記述して、vagrant box addを行わずに済むようにします。また、IPアドレスやvagrant-omnibusについても設定します。

vm.box
###変更前
config.vm.box = "centos"

###変更後
config.vm.box = "centos-6.5"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"
IPアドレス
###変更前
# config.vm.network "private_network", ip: "192.168.33.10"

###変更後
config.vm.network "private_network", ip: "192.168.33.10"
vagrant-omnibus
###変更前
  # config.vm.provision "chef_solo" do |chef|
  #   chef.cookbooks_path = "../my-recipes/cookbooks"
  #   chef.roles_path = "../my-recipes/roles"
  #   chef.data_bags_path = "../my-recipes/data_bags"
  #   chef.add_recipe "mysql"
  #   chef.add_role "web"
  #
  #   # You may also specify custom JSON attributes:
  #   chef.json = { mysql_password: "foo" }
  # end

###変更後
  config.omnibus.chef_version = :latest

  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
    chef.run_list = %w[
      recipe[yum-epel]
      recipe[nginx]
    ]
  end

vagrantの起動とインストール確認

 nginxが導入されて、アクセス出来るか確認してみます。

起動コマンド

$ vagrant up --provision

アクセスURI(URLはURIに定義が変更されたようです)

http://192.168.33.10/

「Welcome to nginx on EPEL!」のタイトルページが表示されたら、成功です。

45
44
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
45
44