vagrant + chef-solo + berkshelf で php と mysql な環境(x2台)を作る

2014年11月5日 at 8:44 AM

どもです。
前書いてたブログからこのブログに移った時に、“もうプログラミング系は書かないぞ” と思ったんだけど、今から考えるとなんでだったんだろ・・。
はてさて・・。
ヨガグラマを名乗ってるものとしては書かないといけないだろ、と今更思いついたんで、今日はプログラミングのお話でブログ更新します。

とある案件で使用したもの。
今やなくてはならないほどの便利な vagrant を使って php と mysql のサーバーを2台立ち上げちゃうぞ!と。

スポンサーリンク



vagrant について

vagrant は仮想マシンの作成や環境構築、仮想マシンの破棄までを自動化するツール。
前の会社に居た頃、とある先輩から言われた一言。
“開発環境は仮想化した環境がオススメよ♪” の一言から、iphone やスマホの開発以外はほぼすべて仮想環境を立ち上げて開発するスタイルで落ち着いてます。
(ありがとう!先輩!!)
なので、仮想環境をコマンドで自動に同じ環境をサクっと立ち上げてくれるvagrant のような存在は重宝するとです。

[vagrant]
https://www.vagrantup.com/

詳しい使い方は、グーグルさんに譲るとします。
ほんっとザックリとだけ。。
お使いのプラットフォームに合わせインストーラをダウンロードします。

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

インストール後、コマンドで下記のコマンド叩きます。

$ vagrant init hashicorp/precise32
$ vagrant up


これだけで仮想のサーバが立ち上がります!


berkshelfについて

立ち上げた仮想のサーバーに対して、サーバー管理ツールの chef を使って必要なソフトウェアをインストールします。
chef は、設定内容に応じて自動的にユーザーの作成やパッケージのインストール、設定ファイルの編集などを行うツールです。
chef にはサーバーとスタンドアローンな solo があり、サーバーはちょいちょい面倒くさいので solo を使います

[chef]
https://www.getchef.com/chef/

本題に戻って、今回使う berkshelf
berkshelfchef が使う cookbook の依存性を管理してくれるソフト。
要は、定義ファイルに使用する cookbook を定義するだけで、リポジトリから勝手に依存関係を解消して落としてきてくれるらしい。
なんと便利!

[berkshelf]
http://berkshelf.com/

やはり、詳しい使い方はグーグルさんに譲るとします。
そして、これまたほんのりザックリとだけ。。

お使いのプラットフォームに ruby をセットアップします。
その後、gem で chef と berkshelf 入れてあげます。

$ gem install chef –no-ri –no-rdoc
$ gem install berkshelf –no-ri –no-rdoc


init してあげて、中身を書いてあげます。

$ berks init .
$ vim Berksfile
site :opscode
cookbook “yum”


後は、インストールコマンドするだけです(たぶん。

$ berks install


たぶん、、、というのは、ここからもう試さずに実際に vagrant で動かしたからです。
早速行きましょう!


その前にもう少し環境周り

vagrant-omnibus とは vagrant のプラグインで、構築する仮想化のサーバに chef が入ってなくても vagrant up 時にインストールしてくれます。
なんて便利なんだ〜!!
vagrant-berkshelf は vagrant と berkshelf をステキに繋げてくれるプラギン。
あと、Guest Additions 周りでエラーが出てたので、vagrant-vbguest も入れちゃいます。

$ vagrant plugin install vagrant-omnibus
$ vagrant plugin install vagrant-berkshelf
$ vagrant plugin install vagrant-vbguest


vagrant ファイルに下記を追加することで利用可能です。

$ vim Vagrantfile
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

config.omnibus.chef_version = :latest
config.berkshelf.enabled = true

end



vagrant + chef-solo + berkshelf で超便利

ここまで出来たらいよいよ vagrant up コマンドを放つのみです。

Vagrantfile:

$ vim Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = “2”

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = “centos”
config.vm.box_url = “https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box”

config.vm.define “test1” do |node|
config.vm.box = “centos”
node.vm.hostname = “test1”
node.vm.network :private_network, ip: “192.168.33.55”
end

config.vm.define “test2” do |node|
config.vm.box = “centos”
node.vm.hostname = “test2”
node.vm.network :private_network, ip: “192.168.33.56”
end

config.vm.provision :chef_solo do |chef|
chef.log_level = :debug
chef.run_list = [
“recipe[yum]”,
“recipe[yum-epel]”,
“recipe[apache2]”,
“recipe[apache2::mod_php5]”,
“recipe[apache2::mod_rewrite]”,
“recipe[php]”,
“recipe[mysql::server]”,
“recipe[mysql::client]”,
“recipe[vim]”,
“recipe[git]”
]

chef.json = {
:apache => {
:default_site_enabled => true
},
mysql: {
server_root_password: “password”,
bind_address: “127.0.0.1”
}
}
end
config.omnibus.chef_version = :latest
config.berkshelf.enabled = true
end


Berksfile:

$ vim Berksfile
site :opscode
cookbook “yum”
cookbook “git”
cookbook “vim”
cookbook “apache2”
cookbook “php”
cookbook “mysql”


$ vagrant up


使用したファイルは github にもアップしました。

[github]
https://github.com/sora0513/vagrant-chef-solo-berkshelf


終わりに

ざーっと駆け足でしたが、サクりと動いて仮想サーバーが2台起動したのではないでしょうか。
環境さえ一度作って動かしてしまえば、次から新しい開発プロジェクトが来ても応用でどうとでもできると思いますので、ぜひ頑張って構築してみてください。
かけただけの時間はすぐに取り戻せるはずです。

久しぶりの開発記事はなかなか長くなってしまい、少し疲れました。。。
今後もちょこちょこ更新していきます。
ヨガグラマ、今日もガンバリマス。

ではでは。

あわせてお読みください