Edited at

初心者によるchef-solo,vagrant,berkshelf等で作るrails+mysqlの環境 その2

More than 3 years have passed since last update.


はじめに

前回はvagrantに付属しているchefの機能で環境を構築しました。

しかし、この方法では実際のサーバーにセットアップすることができないので今回は実際のサーバーに設定するイメージでvagrantを使って環境構築をしていきます。

前回と重複するところもありますが、このページだけで完結させたいため重複内容もそのまま残しておきます。


Macに必要なものを入れる。

今回参考にさせていただいたページはこちらです。(というか、参考サイトを理解できる人は僕の記事を読む必要は無いです・・・)

ChefでRails環境を構築(Ruby+Nginx+Unicorn+PostgreSQL+Redis+Fluentd)


Vagrant

まずはこちらからVagrantをインストールする。

https://www.vagrantup.com/downloads.html


VirtualBox

こちらも同様にインストールする。

https://www.virtualbox.org/wiki/Downloads


vagrant-omnibusのインストール

今回は使用しません。


chefとknife-soloを入れる。

今回メインで使用するchefを入れます。

その際にknife-soloも一緒に入れておきます。

$ gem install chef

$ gem install knife-solo

以下のコマンドで設定ファイルを作成する。

$ knife configure

※全てエンターでOK。ってか、これがどのように使われているのだろうか・・・?


berkshelfを入れる。

berkshelfはクックブックの管理ツール。

$ gem install berkshelf


実際に実行してみる

ここまでが前段階です。

次からは実際に構築していきます。


chefリポジトリを作成

まずはchefリポジトリを作成します。

$ mkdir chef-rep-test

$ cd chef-rep-test
$ knife solo init .


使用するクックブックを取得します。

前回と同じ手順でクックブックを取得します。

$ vi Berksfile

ファイルに以下の記述を行います。

source "https://supermarket.chef.io"

cookbook 'git', '~>4.1.0'
cookbook 'rvm', '~>0.9.2'
cookbook 'mysql', "~> 5.3.6"

実際にクックブックを取得します。

$ berks vendor cookbooks

※berksは無くなるとか・・・。


Vagrantを立ち上げます。

今回はcentosを使ってみます。

上記のchef-rep-testとは別のディレクトリに立てます。

$ mkdir centos65

$ cd centos65
$ vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
$ vagrant init centos65

設定ファイルに以下のように設定します。

$ vi Vagrant

Vagrant.configure(2) do |config|

config.vm.box = "centos65"
config.vm.network "private_network", ip: "192.168.33.11"
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
end
end

とりあえず、最低限の設定だけ記載します。

$ vagrant up

Vagrantを立ち上げてsshでアクセスできるようにします。

$ vagrant ssh-config --host centos65 >> ~/.ssh/config

このコマンドを実行すると~/.ssh/configsshで接続できる情報が書き込まれます。

もし、~/.ssh/configがない場合は先に作成しておいてください。

実際にアクセスしてみます。

$ ssh centos65

まだrubyなどが入っていないことを確認します。

$ ruby -v

-bash: ruby: command not found


クックブックを適用します。

先ほどのchefリポジトリに移動します。

$ cd chef-rep-test/

落としてきたクックブックを適用するための設定ファイルを作成する。

ファイル名は先ほどvagrant ssh-config --host centos65 >> ~/.ssh/configでつけたcentos65で作成する。

(リモートに行う場合はipアドレスホスト名になる。)

$ vi nodes/centos65.json

内容は前回と同じです。


nodes/centos65.json

{

"run_list":[
"recipe[git]",
"recipe[mysql::server]",
"recipe[mysql::client]",
"recipe[rvm::system]"
],
"rvm": {
"user": "vagrant",
"default_ruby": "ruby-2.2",
"rubies": ["ruby-2.2"]
},
"mysql": {
"service_name": "default",
"version": "5.5",
"server_root_password": "root"
}
}

前回と同じ・・・つもりだったのですが以下の設定はcentosでは不要でした。

vagrantに組み込んだchefではうまく動作したのですがknife soloで流し込んだ場合はうまく動作しませんでした。

調べてみると、こちらはdebianで使用するパッケージのようでcentosでは使いませんでした。(はまった・・・)

      "recipe[build-essential]"

実際に実行する前にchef-soloを対象サーバーにインストールします。

(一度だけでOK)

$ knife solo prepare centos65

Bootstrapping Chef...
...
Thank you for installing Chef!

しばらく待つとインストールされます。

その後に実際のレシピをインストールします。

$ knife solo cook centos65


注意点

nodes/centos65.jsonknife solo prepare centos65knife solo cook centos65などのcentos65と書かれている部分はssh centos65とマッチしてます。

なので、ssh 192.168.1.1の場合はそれぞれがnodes/192.168.1.1.jsonなどになります。

また、鍵などの指定は~/.ssh/configに記載しておく必要があります。

とりあえず、これでインストールは完了です。

が・・・

本当にこの方法でいいのだろうか・・・・?