Vagrant + Chef + chef-wp-cli を使って WordPress サイトを構築してみる

とりあえず、画面が表示されるまでを目標に

## テスト環境

Mac: 10.8.5
Ruby: 1.9.3
Vagrant: 1.3.3
Chef: 11.4.4

## クックブック

クックブック自体は、既に海外の方が作られている。
https://github.com/francescolaffi/chef-wp-cli

ただ、このクックブックは元々 Chef 10 系の物の為、11 系で動かすにはレシピを修正する必要あり。

↓動かなくなった理由はこちら

Chef 11 In-Depth: Attributes Changes
http://www.opscode.com/blog/2013/02/05/chef-11-in-depth-attributes-changes/

↓修正してみたのがこちら
https://github.com/wakuworks/chef-wp-cli

## プロビジョニング

### ディレクトリ構造

<pre>
.
├── Vagrantfile
└── chef
    ├── Berksfile
    ├── cookbooks
    ├── data_bags
    ├── nodes
    ├── roles
    └── site-cookbooks
</pre>
多分こんな感じ

```ruby:chef/Berksfile
site :opscode
cookbook 'wp', git: 'https://github.com/wakuworks/chef-wp-cli.git'
```

```ruby:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "CentOS-6.4"
  config.vm.box_url = `uname -a`.index("x86_64") != nil ?
    "http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box" :
    "http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-i386-v20130427.box"
  config.vm.network :private_network, ip: "192.168.33.10"

  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "512"]
  end

  config.vm.provision :shell, :inline => <<-EOT
    sudo /sbin/iptables -F && sudo /etc/init.d/iptables save
    if ! type rsync >/dev/null 2>&1; then
      yum install -y rsync
    fi
  EOT

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "chef/cookbooks"
    chef.add_recipe "php::module_mysql"
    chef.add_recipe "apache2"
    chef.add_recipe "wp::apache" # 現在は wp::apache のレシピしかない
    chef.json = {
      "wp" => {
        "installs" => {
          "wptest1.com" => {
            "url" => "wptest1.com",
            "title" => "my theme test"
          },
          "wptest2.com" => {
            "url" => "wptest2.com",
            "title" => "my theme test",
            "locale" => "ja" # 日本語化
          }
        }
      },
      "mysql" => {
        "server_root_password"   => "iloverandompasswordsbutthiswilldo",
        "server_repl_password"   => "iloverandompasswordsbutthiswilldo",
        "server_debian_password" => "iloverandompasswordsbutthiswilldo"
      }
    }
  end

  # vagrant-berkshelf をインストールしている状態で、
  # 下記の二行のコメントアウトを外すと自動的にダウンロードしてくれるのだが、
  # Vagrant 1.3.3 + vagrant-berkshelf 1.3.3 の環境だとエラーになる。
  #
  # config.berkshelf.enabled = true
  # config.berkshelf.berksfile_path = "chef/Berksfile"
  #
  # CookbookNotFound error on Vagrant 1.3.3 with Git and GitHub location
  # https://github.com/RiotGames/vagrant-berkshelf/issues/93
  #
  # 仕方ないので、chef ディレクトリに移動して直接ダウンロードを実行する。
  # $ cd chef
  # $ berks install --path=cookbooks
end
```

プロビジョニングが成功すると、/var/www/wptest1.com, /var/www/wptest2.com が出来上がる。
ディレクトリのパーミッションは、出来上がった状態のままだとアクセス出来ないので、適切な物に変更する。
後は Mac 側の hosts を、下記の様に変更してからブラウザでアクセス。

```hosts
192.168.33.10 wptest1.com
192.168.33.10 wptest2.com
```

## 結果

![cap.png](https://qiita-image-store.s3.amazonaws.com/0/2987/2e940bbc-4919-35e1-7bae-0c17563bfbeb.png "cap.png")

## 参考

[Vagrantfile サンプル](https://github.com/francescolaffi/chef-wp-cli/blob/master/Vagrantfile.sample)