vagrant + chef-solo で LAMP(PHP)の仮想環境を作成

# 目標
- vagrant + chef-solo で LAMP(PHP)の仮想環境を作成
- 簡単な動作確認

# 環境
## ローカル
- Windows 7(64bit)
- VirtualBox 4.3.6
- Vagrant 1.4.3
- ruby 1.9.3
- chef 11.8.2
- Berkshelf 2.0.13

## 仮想環境
- CentOS 6.5
- apache 2.2.15
- MySQL 5.1.71
- php 5.3.3


# 手順

## VirtualBoxのインストール
https://www.virtualbox.org/

## Vagrantのインストール
http://www.vagrantup.com/

## rubyのインストール
RubyInstallerとDEVELOPMENT KITの両方が必要
http://rubyinstaller.org/
**Windowsで2.0を使おうとすると問題が多発するので、1.9を強くお勧めします！**

### RubyInstaller実行
インストール先は`c:\Ruby`にしました。

### DEVELOPMENT KITのインストール
アーカイブを実行すると、解凍先を聞かれるので、好きな場所（インストール先になります）に解凍
`c:\RubyDevKit`にしました

```bat
$ cd c:\RubyDevKit
$ ruby dk.rb init
$ ruby dk.rb install
```

## chefのインストール

```bat
$ gem install -V chef --no-ri --no-rdoc
```

## Berkshelfのインストール

```bat
$ gem install -V berkshelf --no-ri --no-rdoc
```

## 仮想環境イメージファイル選択
仮想環境の初期状態となるイメージファイル(box)を選択
http://www.vagrantbox.es/
VirtualBox用の最新版ということで`CentOS 6.5 x86_64`にしました。

## Vagrant初期設定

```bat
:: vagrantの作業フォルダを作成
$ mkdir c:\vagrant
$ cd c:\vagrant

:: boxを設定
$ vagrant box add centos https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box

:: Vagrantfileを作成
$ vagrant init centos

:: 起動だけなら既に出来る状態です。簡単ですね！
$ vagrant up

:: 仮想環境を停止するコマンド
$ vagrant halt

:: 仮想環境を削除するコマンド(VirtualBoxのインスタンスが消えるだけです)
$ vagrant destroy
```

## vagrantにchef用のプラグインを入れる
`vagrant-omnibus`は、仮想環境にchefをインストールするプラグイン。
`vagrant-berkshelf`は、vagrantとberkshelfを連携させるプラグイン。

```
$ vagrant plugin install vagrant-omnibus
$ vagrant plugin install vagrant-berkshelf
```


## Berkshelfの設定

opscodeからダウンロードするcookbookを設定

```:Berksfile
site :opscode
cookbook 'apache2'
cookbook "mysql"
cookbook 'php'
cookbook 'vim'
```

## Vagrantの設定

```rb:Vagrantfile
VAGRANTFILE_API_VERSION = "2"

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

  # host(127.0.0.1)の8082番を、guest(仮想環境)の80番にポートフォワードする
  config.vm.network :forwarded_port, guest: 80, host: 8082

  # chefの設定
  config.vm.provision :chef_solo do |chef|
    chef.add_recipe     "apache2"
    chef.add_recipe     "apache2::mod_php5"
    chef.add_recipe     "mysql"
    chef.add_recipe     "mysql::client"
    chef.add_recipe     "mysql::server"
    chef.add_recipe     "php"
    chef.add_recipe     "vim"

    chef.json = {
      :apache => {
        :default_site_enabled => true
      },
      :mysql => {
        :server_root_password => "123456",
        :server_repl_password => "123456",
        :server_debian_password => "123456"
      }
    }
  end

  # 仮想環境にインストールするchefのバージョン
  config.omnibus.chef_version = :latest

  # berkshelfを有効にする
  config.berkshelf.enabled = true
end
```

## 仮想環境を起動する

```bat
::仮想環境の立ち上げからchef-solo実行まで行ってくれる。
$ vagrant up
```

## 仮想環境に接続

```bat
:: sshコマンド発行まで自動でやってくれる。
:: しかし、windowsはsshが入っていないので、接続情報が出力されて終わる。
$ vagrant ssh

:: 接続情報を出力するコマンド
$ vagrant ssh-config
```

好きな手段で接続してください。
teratermを使う場合は次のどちらかがオススメです。

### （１）TTLファイルで接続
https://gist.github.com/sampleb3/8631817#file-gistfile1-txt

ttlファイルを読み込ませるのは`ttpmacro.exe`です。（`ttermpro.exe`ではない）

### （２）sshコマンドを代替するバッチファイルでteratermを起動
`ssh.bat`を作成し、パスを通す。
https://gist.github.com/sampleb3/8631514#file-ssh-bat

こうしておけば、`$ vagrant ssh`でteratermによる接続まで一気にやってくれる。

※こちらを参考にさせて頂きました。
[vagrant ssh を Windows でもできるように ssh コマンド作った（teraterm 編） / 虫けらロック ](http://bugsrock.com/blog/2013/04/11/vagrant-ssh-%E3%82%92-Windows-%E3%81%A6%E3%82%99%E3%82%82%E3%81%A6%E3%82%99%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB-ssh-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%88%E3%82%99%E4%BD%9C%E3%81%A3%E3%81%9F%EF%BC%88teraterm-%E7%B7%A8%EF%BC%89/)


# 簡単な動作確認

## mysql
`Vagrantfile`で指定した通り、`root`のパスワードが設定されている。

```shell-session
$ mysql -uroot -p123456
$ exit
```

## apache + php
デフォルトのDocumentRoot`/var/www/html`で起動しているので、`phpinfo.php`を作成してアクセスしてみる。

```shell-session
$ sudo vim /var/www/html/phpinfo.php
```

```php:phpinfo.php
<?php
  phpinfo();
?>
```

ブラウザで http://127.0.0.1:8082/phpinfo.php にアクセス。
phpinfoが表示される。


# 後始末

## 仮想環境を止める

```bat
$ vagrant halt
```

## 仮想環境を削除する
```bat
$ vagrant destroy
```

# GitHub
ローカルのvagrantフォルダのリポジトリを公開します。
https://github.com/sampleb3/vagrant-lamp