VagrantでPHPの開発環境を作ってみる

## はじめに
やりたいことをザックリまとめると、
Windows環境にXAMPP入れてPHP5.3入れて開発してるけど、PHP7.1の開発環境も欲しいので、仮想環境に作る。
です。

## 環境
Windows10 64bit
[git-bash](https://git-scm.com/downloads)

※注
git-bashは、sshで繋ぎたいので利用しています。
PuTTYとか入っているならそっちでも良いはず。

## 準備
### 参考資料
[Windows上でVirtualBox+Vagrant+CentOSによる仮想環境構築](https://qiita.com/hiroyasu55/items/11a4c996b0c62450940f)
[Win10にVirtualBox+Vagrantを用いた環境構築する為の下準備](https://qiita.com/hein946/items/cc44aa8d4061eb00dc5d)

### BIOSの設定
PCの「仮想化支援機構(Virtualization Technology)」を有効にします。
設定方法はPCごとに異なるので、

`[メーカー名] [PC機種名] 仮想化支援機構`

や

`[メーカー名] [PC機種名] Virtualization`

で検索すると多分出てくるかと。

### Windowsの設定
`Hyper-V`を無効化します。

これは
[Hyper-V をオン/オフする方法](https://qiita.com/masoo/items/b73dadb0e99f9be528fe)
に詳しく書いてあるというか、その通りにやったらできました。

### 必要なものをインストール
+ [VirtualBox](https://www.virtualbox.org/wiki/Downloads)
  - バージョン：6.0.2(導入当時の最新)
  - ページ内に「Windows hosts」というリンクから入手。
  - 重いので、DL始まってからトイレ休憩くらいを挟むと良い。

+ [Vagrant](https://www.vagrantup.com/)
  - バージョン：2.2.3(導入当時の最新)
  - 「DOWNLOAD」ボタンがある。

それぞれにインストーラを起動し、画面の指示に従えばインストールは完了する。
基本的には、設定をいちいち変えたりせずに、Google翻訳の助けを借りながら書かれている内容を読みつつ進めれば良いと思う。
ある程度の理解ができたら、入れ直せばエエんちゃうかな、くらいに考えている。

## Vagrantを動かしてみる
入れてみたからには動かしたいので、とりあえずやってみる。

### Boxの入手
[vagrant boxリスト](http://www.vagrantbox.es) 
`Search`という項目があるので、入れたいOSを打ち込むと絞り込んでくれる。
Providerが`VirtualBox`の、希望のバージョンのURLをこの後使う。
`Copyボタン`があるので便利。

コマンドは`vagrant box add [名前(自由入力)] [URL]`です。
例えば、CentOS7を使いたい場合は、Windows PowerShellを起動し

```
vagrant box add CentOS7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
```

あとは、ちょっと待てば完了。

#### Boxって何よ？
乱暴に言うと「OSのisoイメージ」みたいなモノ。
CentOS7のBoxを使えば、CentOS7の仮想サーバを作れる。
当然ながら、環境構築したBoxを自分で作ることもできる。

### 作る
ここからは、作業ディレクトリを作ってからになる。
ご自由な場所に。
git-bush等を起動して、作業ディレクトリに`cd`します。
あとは`vagrant init [boxの名前]`です。

```
vagrant init CentOS7
```

完了すると`Vagrantfile`が作られるので、開いて編集します。
今回設定したのは以下。

```
Vagrant.configure("2") do |config|
# Box名
config.vm.box = "CentOS7"

# ここで指定したIPを叩いてブラウザに表示させたりする
config.vm.network "private_network", ip: "192.168.33.10"

# メモリ(数値は自分の環境と相談)
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
end

# Windows側のファイルを、仮想サーバに認識させる
# 直下(".")のファイルを、仮想サーバ内では`/vagrant`として扱う感じ
config.vm.synced_folder ".", "/vagrant", mount_options:['dmode=777','fmode=777']
end
```

### 起動
`vagrant up`で立ち上がります。
ちょっと時間かかりますが。

### サーバに接続
`vagrant ssh`で、普通のSSH接続同様に使えます。
つないだら、まずはyumの更新をしておきます。

```
sudo yum update
```

## WEBサーバとして動かしてみる
### 1. Webサーバの用意
ターミナルで以下のコマンドを実行して、httpdをインストールし、起動(自動起動も設定しておく)。
加えて、FireWallを止めておきます。

```
sudo yum -y install httpd
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
sudo systemctl stop firewalld
sudo systemctl disable firewalld
```

※FireWall止めるまでHTML見れんかった。

#### 2. HTMLを用意
Hello World用ファイルをWindows側で作る。
Windows(クライアント)側の作業ディレクトリ内に、`index.html`を作成。
中身は`Hello World!`だけで良い。

#### 3. Windows側で作ったファイルを仮想サーバ側で見えるようにする
DocumentRootを空にして、シンボリックリンクを設置する形。

```
sudo rm -rf /var/www/html
sudo ln -fs /vagrant /var/www/html
```

これで、[http://192.168.33.10/](http://192.168.33.10/)をブラウザで開くと`Hello World!`が表示される。

ひとまず、ここまでで「Vagrantで仮想サーバを作る」的なことまでができた。

## PHPの導入
[CentOS6／CentOS7にPHP5.6／PHP7をyumでインストール](https://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e)
sshで接続してから、以下のコマンドを実行。

```
sudo yum -y install epel-release
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum -y install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt
```

インストールが終わったら、httpdを再起動

```
sudo systemctl restart httpd.service
```

### 確認用PHPファイルを作る
test.htmlと同じ階層に、`test.php`を作る。
中身は、

```
<?php
phpinfo();
```

だけ。
[http://192.168.33.10/test.php](http://192.168.33.10/test.php)にアクセスすると、PHPの設定情報が表示される。

## 同期をリアルタイムにする
[Vagrantで共有フォルダの内容がリアルタイム同期されない件](https://qiita.com/sudachi808/items/edc304b3ee6c1436b0fd)