はじめに
前回は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/config
にssh
で接続できる情報が書き込まれます。
もし、~/.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
内容は前回と同じです。
{
"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.json
やknife solo prepare centos65
、knife solo cook centos65
などのcentos65
と書かれている部分はssh centos65
とマッチしてます。
なので、ssh 192.168.1.1
の場合はそれぞれがnodes/192.168.1.1.json
などになります。
また、鍵などの指定は~/.ssh/config
に記載しておく必要があります。
とりあえず、これでインストールは完了です。
が・・・
本当にこの方法でいいのだろうか・・・・?