Vagrant+VirtualBox+centOS7.2を用いたPHP境構築(その2)


## はじめに

この記事は[Vagrant+VirtualBox+CentOS7.2を用いたCakePHP環境構築(その1)](http://qiita.com/ymt193/items/72348c07b2fb00addd8f)の続きになります。
まだ読んでいない方はそちらを先にご覧ください。

## 目標

#### ・複数サイトのドキュメントルートの設定

これまでの設定では、
http://AAA.com/
のようなサイトを運営しようと考えた時に、
http://192.168.33.10/AAA.com/
のように書かなければならない。
このように書くと、実際のサイト運営の際、ルートディレクトリが変わってしまう。
そのため、ローカルから表示する際は
http://local.AAA.com/
のように表示できるようにしたい。

AAA.com、BBB.com、CCC.comの3つのサイトを運営する想定で設定を行う。

#### ・CakePHP導入に伴うエラーの解決

CakePHPを導入した際に筆者が経験したエラーの解決方法をまとめました。

## 1. ホストOSとの同期

#### ・同期フォルダを確認

現在の設定では、新しいページを追加するためにいちいちゲストOSから/var/www/html/に書き込む必要がある。それでは面倒なので、ホスト側でページを作成/削除/変更できるようにする。
デフォルトの設定では、ゲスト側の/vagrant/が、ホスト側の(Vagrantfileを置いたディレクトリ)/と同期するようになっている。そのため、まずはVagrantfileがあるフォルダにホスト側から適当なファイルを作成して、ゲスト側のOSからそれを表示できることを確認する。
確認できたら次のステップへ。

#### ・ホームページに対応するディレクトリを作成

```
cd /Vagrant
mkdir AAA.com
mkdir BBB.com
mkdir CCC.com
```

それぞれに適当にindex.htmlを作成。ホスト側からでもゲスト側からでも編集できる。

## 2. バーチャルホストの設定

#### ・hostsupdaterのインストール

vagrant plugin install vagrant-hostsupdater
VMの起動/停止を行った時に、ホストOSの/etc/hostsへゲストOSの情報を追加/削除してくれるVagrantのプラグイン。
導入できたら、Vagrantfileの

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

の下に、以下を追記。

```
config.vm.hostname = “local.AAA.com”
config.hostsupdater.aliases = [“local.BBB.com”, “local.CCC.com"]
```


#### ・ゲスト側バーチャルホストの設定

ゲストOSにログインし、

```
cd /etc/httpd/conf.d/
sudo vi virtualhost.conf
```

を実行して、virtualhostの設定ファイルを作成。以下を記述。エラーログの設定は

``` virtualhost.conf
#好きなサーバーネームを入れる
ServerName AAA

<VirtualHost *:80>
DocumentRoot “/vagrant/AAA.com"
ServerName local.AAA.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot "/vagrant/BBB.com"
ServerName local.BBB.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot "/vagrant/CCC.com"
ServerName local.CCC.com
</VirtualHost>
```

#### ・httdの再起動

```
$ systemctl restart httpd
```

httpdのconfを変えた場合は、再起動して設定を反映させる。

#### ・表示できることを確認

ブラウザから

```
http://local.AAA.com/
```

にアクセスして、正しく表示できることを確認。BBB、CCCも同様。

ここまでで複数サイトに対するドキュメントルートの設定は完了です。
ドキュメントルートに設定した`/vagrant/AAA.com/`にCakePHPの雛形を導入すれば、導入は完了です。雛形のダウンロードについては当記事では扱わないため、他の記事を参照してください。

以下はCakePHP導入に伴うエラーの解決方法について。

## 3. タイムゾーンの設定

#### ・タイムゾーンの変更

この手順通りcentOS7.2をダウンロードしてきた場合、デフォルトの設定ではタイムゾーンがUTCになっているため、JSTに直す。

```
timedatectl set-timezone Asia/Tokyo 
```

#### ・デフォルトタイムゾーンの設定

手順通りの場合デフォルトのタイムゾーンが設定されていないため、phpプログラムにエラーが出るため、修正する。以下の記事の手順そのままです。
http://qiita.com/maximum80/items/d8c841ccdaf6f8106b3f


## 4. アクセス権の設定

`app/tmp`の書き込み権限をapacheに与えるための設定。
Vagrantfileに以下を追記。

```
config.vm.synced_folder "./", "/vagrant", owner: 'vagrant', group: 'apache', mount_options: ['dmode=777', 'fmode=666']
```

追記したら`vagrant reload`。
これでキャッシュ、ログを書き出せるようになり、CakePHPで作ったサイトの表示が可能になる。

## その他、つまづいたこと

#### ・さっきまでブラウザからページ表示できてたのに、`vagrant reload`してsshログインしたらアクセスできなくなってる……

→`systemctl status httpd`を確認する。
→`systemctl restart network`を試す。

#### ・`systemctl start(restart) httpd`がエラーになり、実行できない……

→rootでログインして、`systemctl -l status httpd`でエラーを確認
→google検索して対応
→どうしても解決しなければ`vagrant destroy`で破壊して最初から。インストールしたboxは消えません(boxを元に構築した環境が消える)。

#### ・アクセス権設定したのに、エラーが消えない……

→自分の場合、

```
app/tmp/cache/models
app/tmp/cache/persistent
app/tmp/logs/debug.log
app/tmp/logs/error.log
```

がそもそも存在してませんでした。このあたりも確認してみてください。

## 終わりに

僕自身Web開発の知識はほとんどありませんでしたが、Qiitaの記事やその他のサイトを参考になんとか環境構築することができました。素晴らしい記事を書いてくださったQiitaの皆様に感謝するとともに、この記事が僕のようにゼロから環境構築を始める方々の参考になれば幸いです。

`※その1の冒頭でも言いましたが、間違っている部分については是非コメントでご教示ください。`