Vagrant+CentOS6.5+Apache2+PHP5.3+PostgreSQL9.3 on Mac の環境を構築する


# ゴール
この環境が構築できると、Shell のプロビジョニングにて Vagrant 内に、いつでも次の状態を復元できます。Mac 上での構築となりますがご了承ください。

* CentOS 6.5
* Apache 2以上
* PHP 5.3 以上
* PostgreSQL 9.3

# 事前準備

これまで基本的な準備は下記の通り実施してきました。

* [Mac 上で Vagrant を使って CentOS + Apache をセットアップ](http://qiita.com/hmukaida/items/8836a96ce5cbe88019b7)

ここまで実行すると、Mac 上の vagrant に CentOS6.5 と Apache が導入できていると思います。ここからもう少し環境を整理してみます。

※ 上記を実施したと仮定して記載していきます。

# PHP インストールと確認

まずは Vagrant のトップディレクトリに移動します。Mac 上ですので下記の通りです。

```
$ cd /Users/your_username/CentOS65
$ ls
Vagrantfile httpd.conf index.html
```
ここで、PHP用のファイルを準備します。

```
$ echo "<?php phpinfo(); ?>" > info.php
$ ls
Vagrantfile httpd.conf index.html info.php
```
ブラウザでアクセスしてみます。

```
$ open http://192.168.33.10/info.php
```

![スクリーンショット 2014-06-04 16.21.37.png](https://qiita-image-store.s3.amazonaws.com/0/39380/ce948194-94fa-6a66-069c-b655cf18948e.png "スクリーンショット 2014-06-04 16.21.37.png")

まだファイルの内容がそのまま表示されます。

----

ここで、プロビジョニングにて PHP 環境構築します。
Vagrantfile に設定を追加します。

```
-*- mode: ruby -*-

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "CentOS65"

  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
  end

  config.vm.provision "shell", inline: <<-EOT
        # timezone
        cp -p /usr/share/zoneinfo/Japan /etc/localtime
        # iptables off
        /sbin/iptatbles -F
        /sbin/service iptables stop
        /sbin/chkconfig iptables off
        # PHP
        yum -y install php      # --- ここを追加
        # Apache
        yum -y install httpd
        cp -a /vagrant/httpd.conf /etc/httpd/conf/
        /sbin/service httpd restart
        /sbin/chkconfig httpd on
  EOT
end
```

設定後、ホスト側にてプロビジョニングします。

```
$ vagrant provision
```
エラーなく完了しましたら、仮想環境に接続します。

```
$ vagrant ssh
```

仮想環境内で PHP のバージョンを確認します。

```
[vagrant]$ php -v
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
```

今回はバージョン情報が確認できました。バージョンが確認できたらインストールは完了です。
さらにホスト側にてブラウザにアクセスして確認します。

```
$ open http://192.168.33.10/info.php
```

![スクリーンショット 2014-06-04 16.35.40.png](https://qiita-image-store.s3.amazonaws.com/0/39380/a1d77d3c-aa01-3ca3-a461-80a8de5c0977.png "スクリーンショット 2014-06-04 16.35.40.png")

PHP のバージョン情報などが掲載されたページが表示されれば確認完了です。


# PostgreSQL インストールと確認

2014年6月4日現在、下記公式サイトを確認すると、CentOS では、version 8.1 となります。今回は、最新の 9.3 を利用したいので、別の手法をとります。

* [http://www.postgresql.org/download/linux/redhat/](http://www.postgresql.org/download/linux/redhat/)

----

現状、インストールされているか仮想環境上で確認します。

```
[vagrant]$ psql --version
```
インストールされていないので、特に何も表示されません。
そして Vagrantfile を編集します。

```
-*- mode: ruby -*-

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "CentOS65"

  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
  end

  config.vm.provision "shell", inline: <<-EOT
        # timezone
        cp -p /usr/share/zoneinfo/Japan /etc/localtime
        # iptables off
        /sbin/iptatbles -F
        /sbin/service iptables stop
        /sbin/chkconfig iptables off
        # PHP
        yum -y install php
        # PostgreSQL
        yum -y install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm　      # --- ここを追加
        yum -y install postgresql93-server postgresql93-contrib　      # --- ここを追加
        /sbin/service postgresql-9.3 initdb　      # --- ここを追加
        /sbin/chkconfig postgresql-9.3 on　      # --- ここを追加
        # Apache
        yum -y install httpd
        cp -a /vagrant/httpd.conf /etc/httpd/conf/
        /sbin/service httpd restart
        /sbin/chkconfig httpd on
  EOT
end
```
ファイル編集後、ホスト側でプロビジョニングします。

```
vagrant provision
```
エラーなく完了しましたら、仮想環境に接続します。

```
vagrant ssh
```
仮想環境上で、PostgreSQL のバージョンを確認します。

```
[vagrant]$ psql --version
psql (PostgreSQL) 9.3.4
```
バージョン情報が表示されれば無事インストールが完了です。
また、postgres アカウントが生成されているか確認します。

```
[vagrant]$ id postgres
uid=26(postgres) gid=26(postgres) groups=26(postgres)
```

アカウントが生成されているのを確認しました。

----

補足として、timezone を確認しましたが、「Japan」になっていたので時刻設定は問題なさそうです。timezone は下記ファイル内にて確認できます。

```
[vagrant]$ /var/lib/pgsql/9.3/data/postgresql.conf
```

# メモ
ここまで、環境構築をしてきました。不備、不明点などありましたらご指摘いただければ幸いです。どうぞよろしくお願い致します。

ちなみに、これで box 作成してしまえばどうかという意見をいただきました。確かにそういうのもありですね。次回は box 設定してそれを利用するものを準備してみたいと思います。

# ...追記(2014/06/05)
box 設定について追記

```
$ vagrant package
```
で box 作成ができるそうですね。作成してみました。ファイルサイズが300Mを越えましたが、これを管理しておけば、他のライブラリバージョンなどもそのままに仮想環境が作れそうですね。