Vagrant1.8.4でcentos7 + php7 + composer + apacheの開発環境を作る

Vagrant1.8.4でcentos7 + php7 + composer + apacheの開発環境を作ります。

前提) vagrantはインストール済み

#centos7のboxを取得する

```
$ vagrant box add centos/7
```

centos/7を指定することでcentosのversion7をダウンロードしてboxに追加してくれる。
この時のbox名はcentos/7そのままになる。

#initする
作業用ディレクトリに移った後、これを実行

```
$ vagrant init centos/7
```

これでvagrantfileがつくられる。


#vagrantfileを編集してhttpアクセスできるようにする
vagrantfileを開いて編集

```lang:編集箇所その１
# config.vm.network "forwarded_port", guest: 80, host: 8080
この行の#を外して
config.vm.network "forwarded_port", guest: 80, host: 8080
にする
```


```lang:編集箇所その2
# config.vm.network "private_network", ip: "192.168.33.10"
この行の#を外して
config.vm.network "private_network", ip: "192.168.33.10"
にする
```

その１をやることでlocalhost:8080でアクセスできるようにする。(8080ポートがいやだったらhostで指定してあるポートを変えれば良い)
その２をやることで192.168.33.10でアクセスできるようにする


#centos/7を立ち上げ

```
$ vagrant up 
```

vagrant up に失敗してエラーが出た

```
Vagrant cannot forward the specified ports on this VM, since they
would collide with some other application that is already listening
on these ports. The forwarded port to 8080 is already in use
on the host machine.

To fix this, modify your current project's Vagrantfile to use another
port. Example, where '1234' would be replaced by a unique host port:

  config.vm.network :forwarded_port, guest: 80, host: 1234

Sometimes, Vagrant will attempt to auto-correct this for you. In this
case, Vagrant was unable to. This is usually because the guest machine
is in a state which doesn't allow modifying port forwarding. You could
try 'vagrant reload' (equivalent of running a halt followed by an up)
so vagrant can attempt to auto-correct this upon booting. Be warned
that any unsaved work might be lost.
```

以前立ち上げたvagrant環境とポートがバッティングしていたようだ。ポートを1234に変更したらいいよ、みたいなことを言われているけど、面倒なので昔使っていたvagrant環境を停止することにした。

```lang:じゃましているvagrant環境のディレクトリに行って、停止する
$ cd じゃましているvagrant環境
$ vagrant halt
```

もしくは

global-statusコマンドを実行して作成済みのvagrant環境すべてのステータスを確認し、runningになっている環境をすべてhalt(停止)する

```lang:一括halt
$ vagrant global-status
f1ca449  default virtualbox poweroff /Users/aaa/Documents/vagrant/laravelTest2   
8748a38  default virtualbox running  /Users/aaa/Documents/vagrant/laravelTest3   
40248e1  default virtualbox running  /Users/aaa/Documents/vagrant/laravelTest4   
329e424  default virtualbox poweroff /Users/aaa/Documents/vagrant/ssh_test     

8748a38と40248e1がrunningになっているのでこいつらを停止させたい。
vagrant halt に続けてハッシュ値?を指定してあげれば止められる。
$ vagrant halt 8748a38 40248e1

```

停止できたらもう一度vagrant up して起動チャレンジ
perlのDLやinstall等が始まってだいたい2分ほどでupが終わる。

upが完了したらsshログインする

```
$ vagrant ssh
```

#php7やapacheをインストール

ここを参考にした。
http://qiita.com/t114/items/c5b86043534cd069afdf

viでinit.shファイルを作成し以下を記述

```lang:
$ vi init.sh
```

```lang:init.shを作成してこれを書く
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum install -y --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-xml php-zip
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
```

```lang:init.shを実行
$ bash init.sh
```

だいたい5分弱で終わった


本当はvagrantfileのprovisionに書きたかったんだけど、シンタックスエラーが発生してvagrant upできなくなってしまった・・・

#php composerが入ったか確認

```
$ php -v
$ composer -v
```


#localhostにブラウザからアクセスしてみる
apacheが起動していればtestページが見れるはず

*ポート番号を変えていたら8080の部分をそのポート番号にすること
http://localhost:8080

結果
<img width="673" alt="スクリーンショット 2017-05-03 14.17.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/db5245a6-9169-6f7b-c4c0-d85429fd044f.png">

なるほど。

#apache(httpd)がそもそも動いているのか確認

centos7からhttpdの確認はsystemctlコマンドを使うようになったそうです。

```lang:apacheの動作確認
$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)
```

Active: inactive(dead)
死んどるやんけ

#apacheを起動する

```
$ sudo systemctl start httpd
```


結果
*ポート番号を変えていたら8080の部分をそのポート番号にすること
http://localhost:8080
<img width="1199" alt="スクリーンショット 2017-05-03 14.20.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/df484545-fda1-3071-28a5-c860091320f4.png">


apacheの起動確認できた。

#サーバー起動する度にapacheが起動するようにする

```
$ sudo systemctl enable httpd
```

*これであってるのかな？


#せっかくなのでphpページを表示させる。

ドキュメントルートは初期設定なら`/var/www/html/`になっているはず

ドキュメントルートとは?
> クライアントからコンテンツのリクエストに対して対応するコンテンツを返します。それらのコンテンツを配置しておく場所をドキュメントルートといいます。
https://www.adminweb.jp/apache/docroot/index1.html


```
$ cd /var/www/html
$ echo "<?php echo 'uwaaaaa' ?>" > index.php
```
echoの部分で`許可がありません`と言われた。sudo echoをしてもダメだった ・・・

これはsuコマンドでrootになると使用できるようになる。rootのパスワードは"vagrant"

なのでviでindex.phpを作ってphp文を書くことにする

```
$ sudo vi index.php
```

```lang:index.php中身
<?php 

$hoge = 'uwaaaa';
echo $hoge;

```

phpの閉じタグである`?>`は書かない。理由は?>を書くと、?>の後に何かあると思われてしまうから。


#ブラウザで確認
結果
*ポート番号を変えていたら8080の部分をそのポート番号にすること
http://localhost:8080

<img width="1010" alt="スクリーンショット 2017-05-03 14.32.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/859c1f56-f21b-2f84-01c5-d67840a463d1.png">

とりあえず動いてよかった。


以上。