VagrantでLaravel開発環境を構築する

# はじめに
Laravelでの開発にあたり、自PC上にvagrantで仮想環境を構築します。
既に世の中にたくさん情報がありますが、途中でエラーが発生したり、
複数の情報を合わせて見なければならなかったりだったので、自分用のメモです。

### 環境
<img width="336" alt="スクリーンショット 2017-07-06 15.18.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/116449/dcba5dbc-15cc-67a9-7e36-94eba24cb5c1.png">

### インストールするもの

- CentOS 6.7
- Apache2
- MySQL5.7
- PHP7
- Composer1.4

### Vagrantfileについて
`Vagrantfile` と `shell` は以下のURLに登録しているものを使用します。
https://gist.github.com/ayayan-z/e09730a3cb4ef54ff4016f54a9a6d4fc

- `Vagrantfile` 内のbox名は、必要に応じて書き換えてください。 `config.vm.box = "centos6.7"`
- 基本的に上記以外の書き換えは不要です。
- `lamp.sh` によって、上記の「インストールするもの」 全てがインストールされます。


# 手順

### 1. vagrantを起動する

```
$ vagrant up
```

### 2. vagrantにssh接続する

```
$ vagrant ssh
```

### 3. local と vagrant 間でファイル共有できるようにする

#### 3-1. `Vagrantfile` の 以下の部分のコメントアウトを外す

```:Vagrantfile
  config.vm.synced_folder "./", "/var/www/html",
    :owner => "apache",
    :group => "apache",
    :mount_options => ["dmode=777,fmode=775"]
```

※ Laravelプロジェクト作成後に 権限関連をごにょごにょしなくて良いように、上記のように設定しました。


#### 3-2. vagrantを再起動する

```
$ vagrant halt
$ vagrant up
```

#### 3-X. 再起動でエラーが発生した場合...

```
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u apache`,gid=`getent group apache | cut -d: -f3`,dmode=777,fmode=775 vagrant /vagrant
mount -t vboxsf -o uid=`id -u apache`,gid=`id -g apache`,dmode=777,fmode=775 vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device
```

下記の記事で解決できました。
http://qiita.com/osamu1203/items/10e19c74c912d303ca0b


####  3-4. 確認

以下のようにインストールされました。（2017.07.06 現在）

```
$ vagrant ssh

[vagrant@localhost vagrant]$ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Mar 22 2017 06:52:55

[vagrant@localhost vagrant]$ mysqld --version
mysqld  Ver 5.7.18 for Linux on x86_64 (MySQL Community Server (GPL))

[vagrant@localhost vagrant]$ php -v
PHP 7.0.21 (cli) (built: Jul  5 2017 14:45:27) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.21, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans

[vagrant@localhost vagrant]$ composer --version
Composer version 1.4.2 2017-05-17 08:17:52
```


### 4. Laravelインストール ＆ プロジェクト作成

インストール、プロジェクト作成、一気にやります。

```
[vagrant@localhost vagrant]$ cd /vagrant
[vagrant@localhost vagrant]$ composer create-project --prefer-dist laravel/laravel laravel_app
```

`/var/www/html` ではなく、 `/vagrant` で実行するのがポイント
（ `/var/www/html` だとエラーになる。なぜ。。。）


以下のバージョンがインストールされました。（2017.07.06 現在）

```
[vagrant@localhost laravel_app]$ cd /vagrant/laravel_app/
[vagrant@localhost laravel_app]$ php artisan --version
Laravel Framework 5.4.28
```

### 5. Apacheの設定

#### 5-1. `httpd.conf` を編集する

```
[vagrant@localhost vagrant]$ sudo vi /etc/httpd/conf/httpd.conf
```

この部分を...

```/etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"
# ... 
# ... 
<Directory "/var/www/html">
```
↓以下のように書き換える

```/etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html/laravel_app/public"
# ... 
# ... 
<Directory "/var/www/html/laravel_app/public">
```

#### 5-2. apahce再起動

```
[vagrant@localhost vagrant]$ sudo service httpd restart
```

### 6. 動作確認
http://192.168.33.10

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116449/4c647dd4-d823-2a6c-f338-522e072fe478.png)

でけた。

### 7. ついでに

MySQLのパスワードを簡単なものに変えておきます。


初期パスワードを確認します。

```
[vagrant@localhost vagrant]$ grep -e 'A temporary password is generated for root@localhost' /var/log/mysqld.log
```

初期パスワードで、mysqlに接続します。

```
[vagrant@localhost vagrant]$ mysql -u root -p
```

パスワードを変更します。

```
mysql> SET GLOBAL validate_password_length=4;
mysql> SET GLOBAL validate_password_policy=LOW;
mysql> set password for root@localhost=password('root');
```