vagrant にcentos7 + php7 + composer + apache + mysql5.7 + laravel5を導入する

vagrant にcentos7 + php7 + composer + apache の作業環境を作る方法はこちら
http://qiita.com/ShirakawaYoshimaru/items/97da2167039b3dc12536


#composerを使ってlaravel installerをinstall

```
$ composer global require "laravel/installer"
```

5分くらいかかった。ログもほとんどでなくてフリーズしているのかと思った。。。


#laravelコマンドがどこからでも使えるようにPATHを通す
vagrant環境のcomposerでは`/home/vagrant/.config/composer/vendor/bin`にinstallされるらしい。

```
$ export PATH="$PATH:/home/vagrant/.config/composer/vendor/bin"
```


#laravelコマンドを使って新規プロジェクトを作成する

```
$ laravel new blog
```

3~4分かかった。何やらDLしていた。

これでカレントディレクトリにblogディレクトリが作成され、その中にlaravel関連ファイルがごそっと作られた。



laravelのテストページを正常に表示させるためにいろいろ修正していきます。

#apacheのドキュメントルートを変更する
laravelのドキュメントルートは、`laravel newコマンド`を実行した時に作成されるプロジェクト名ディレクトリの中にあるpublicディレクトリになります。
今回、`/home/vagrant`で`laravel newコマンド`を実行したので、ドキュメントルートは以下になります。

```
/home/vagrant/blog/public
```

apacheのドキュメントルートは、初期設定だと`/var/www/html`になっているのでこれを変更します。


viで`/etc/httpd/conf/httpd.conf`ファイルを開きます。

```
$ sudo vi /etc/httpd/conf/httpd.conf
```


```lang:変更箇所その1
これを
DocumentRoot "/var/www/html"
こうじゃ
DocumentRoot "/home/vagrant/blog/public"
```

```lang:変更箇所その2
これを
<Directory "/var/www">
こうじゃ
<Directory "/home/vagrant/blog/public">
```

#apacheの再起動
httpd.confを反映させるためにapacheを再起動します。

```
$ sudo systemctl restart httpd
```

これでドキュメントルートがlaravelのドキュメントルートに切り替わりました。

#ブラウザから見てみる。

結果;失敗
<img width="641" alt="スクリーンショット 2017-05-03 15.33.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/c239f08a-d143-ca43-5bf2-463fc30a0151.png">

Forbidden。エラーが発生しました。


#apacheのエラーログを見てみる。
apacheのログを見る時はtail -Fコマンドを使うと便利。ログの更新があったらリアルタイムに出力してくれる。

```
$ sudo tail -F /etc/httpd/logs/error_log
```

tail -Fを実行し後にもう一度localhost:8080にアクセスするとログにエラーが流れました。

```lang:ログを読む
[Wed May 03 06:34:55.074878 2017] [core:error] [pid 16920] (13)Permission denied: [client 10.0.2.2:60741] AH00035: access to / denied (filesystem path '/home/vagrant/blog') because search permissions are missing on a component of the path
```

Permission deniedのようです。
`/home/vagrant/blog`へのアクセス権限がないのかな？・・・？


```lang:パーミッションを正しく変更
$ chmod 701 /home/vagrant
$ chmod 701 /home/blog
```

*710のほうがよい？
=>いや、701じゃないと動かなかった。(グループを作ってないから?)

```lang:やっちゃだめ
chmod -R 701 blog/
```

ディレクトリ以下すべてのパーミッションを変えるとクラッシュ？してlaravelが起動されなくなる。

```lang:chmod時にこんなエラーがでる
chmod: `blog/storage/framework/views/7a39a28791aba17c2aa3698c84d94c319c0d9baa.php' のパーミッションを変更しています: 許可されていない操作です
chmod: `blog/storage/framework/sessions/EC3JfcOR7mESQjKadqXDvdeQNsdUwqo72uddIjlw' のパーミッションを変更しています: 許可されていない操作です
```

でも

```
$ chmod -R 777 /home/blog
```

をやっても動いた。最後の一桁は1じゃなくて7でやったほうが良いのかも？

vagrantディレクトリとblogディレクトリのパーミッションを変更してブラウザからアクセスすると
画面にLaravelの文字が！
<img width="881" alt="スクリーンショット 2017-05-03 16.16.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/67575/7ad4f30e-124b-e747-3295-3b88c3472ed6.png">


こちらを参考に500エラーを解消する
http://ponkotsuengine.hatenablog.com/entry/2017/02/11/165507

```
 

●SELinuxをOFF

※これやっとかないと、インストール後のブラウザアクセスで500エラーになります。apacheのエラーログに

PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0

PHP Fatal error:  Unknown: Failed opening required '/home/laravel/project/public/index.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0

が出ます。

 

・とりあえずOFF
setenforce 0

・リブート後も反映されるように設定ファイル編集しておく。
vi /etc/selinux/config
disabledに変更し保存
SELINUX=disabled
```


#mysqlをインストール

mysqlのインストール
Laravel5系でmysqlを使用する場合はmysql5.7のほうが良い。5.6以下だとphp artisan migrateした時にuserテーブル作成時にエラーが出た。（5.6だと初期カラムの長さが足りない??短すぎる??らしい）

```
$ sudo yum -y install mysql-community-server
*これだけじゃダメかも？
```

エラーがが出てしまった。。。

```
$ sudo yum -y install mysql-community-server
...略...

パッケージ mysql-community-server は利用できません。
エラー: 何もしません
```

mysqlのリポジトリを入れる?

```
$ sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
```


もう一度mysqlをインストールしてみる

```
$ sudo yum -y install mysql-community-server
こっちのほうがいいかも↓
$ sudo yum --enablerepo='mysql57-community*' install -y mysql-community-server
5.7をインストール
インストール成功
```

mysqlコマンドをやるとエラー

```
$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
```

mysqlのステータスを確認してみる(mysqldじゃなくてmysql.serviceでも動くみたいだけど何が違うんだろう?)

```
$ sudo systemctl status mysqld
● mysqld.service - MySQL Community Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
```

mysql死んでた。ので起動させる

```
$ sudo systemctl start mysqld
$ sudo systemctl enable mysqld
```

ドライバを入れる。

```
$ sudo yum install --enablerepo=remi,remi-php70 php-mysqlnd
```

mysqlのrootのパスワードを変更しないと何もできないのでパスワード変更する
http://qiita.com/RyochanUedasan/items/9a49309019475536d22a
(パスワード変更が必須なのはmysql 5.7versionからかも)

アパッチ再起動

```
$ sudo systemctl restart httpd
```


確認

```
$ php -r "phpinfo();" | grep -i pdo
PDO
PDO support => enabled
PDO drivers => mysql, sqlite
pdo_mysql
PDO Driver for MySQL => enabled
pdo_mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
pdo_sqlite
PDO Driver for SQLite 3.x => enabled
```

pdoのdriverにmysqlが入っているのがわかる。これでphp artisan migrateとかできるようになった。


以上。