Laravelの環境構築(Vagrant、CentOS7、Apache2.4、PHP7.3、Laravel5.8)

# 前説
**Laravel Homestead**あるいは、**Laradock**を使用して手間をかからないでLaravelの環境構築が出来そうですが、今回はベーシックなOS、Webサーバーから一つずつを入れる方法を選びます。まだ手出したことがないLaravel HomesteadとLaradockではつまづくことがありそうですので…

# 環境
Vagrant 2.2.4
CentOS7
Apache 2.4
Composer 1.8.5
PHP 7.3.3
Laravel 5.8

# 参照
下記２つの記事を参照して構築しました。
つまずいた点を詳しく書きます。

VagrantでCentOS7+Apache2.4+PHP7.3+Laravel5.7環境構築
https://qiita.com/okdyy75/items/d3492e4ea7136d3b6ffc
CentOS7でLaravel5.4の環境構築
https://qiita.com/minechan1234/items/7e0cbe04bf5f3f405938

# VagrantでCentOSサーバー構築
**SELinuxを無効**

```ruby:
   sudo setenforce 0
```

SELinuxは有効だとセキュリティ関連で下記のエラー画面が出ます。
<img width="429" alt="スクリーンショット 2019-05-19 10.50.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91907/a2be48d2-5927-48b3-bc72-8dd6bb76fe9c.png">

## Vagrant初期設定

```ruby:
    # vagrant 初期化(Vagrantfileの作成)
    vagrant init centos/7
    # vagrant 起動
    vagrant up
    # vagrant ログイン
    vagrant ssh
```
```ruby:Vagrantfile
    ～
    config.vm.box = "centos/7"
    ～
    config.vm.network "private_network", ip: "192.168.33.10"
    ～
    config.vm.synced_folder "./html", "/var/www/html",
    owner: "root", group: "root",
    mount_options: ['dmode=777','fmode=777']
```
config.vm.synced_folderはホストとゲストの同期の設定ですが、ここについてownerと、mount_optionsでは所有者と、権限を指定しています。ここで指定しないとCentOSサーバー内で所有者と、権限を変えても効きません。


## CentOSサーバー環境設定
### Apacheインストール
```ruby:
   # apacheインストール
   sudo yum install -y httpd
   # Apache起動
   service httpd start
```
### PHPインストール
yumにRemiリポジトリを追加
・Remi
https://rpms.remirepo.net/enterprise/7/

```ruby:
sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
```

PHP本体 + PHP関連のモジュールをインストール

```ruby:
sudo yum install -y --enablerepo=remi,remi-php73 php php-zip php-devel php-mbstring php-pdo php-xml php-bcmath php-gd.x86_64
```

ここでphp-gd.x86_64を一緒にインストールしないと写真投稿の機能を実装した時GD Libraryが入っていないよーとおこられます！
<img width="656" alt="スクリーンショット 2019-05-19 13.24.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91907/9baaf680-0361-a78d-b88f-c8f15ef8ec4d.png">
一緒にインストールすると無事に成功
<img width="803" alt="スクリーンショット 2019-05-19 14.02.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91907/e18d5c2e-4228-9135-9f9b-0b6a81c50cc2.png">





### Composerインストール
```ruby:
    #composer.pharと取得
    curl -sS https://getcomposer.org/installer | php
    #パスが通っているディレクトリに持っていく
    mv composer.phar /usr/local/bin/composer
    #確認
    composer
```

### Laravelインストール
```ruby:
    cd /var/www/html
    composer create-project --prefer-dist laravel/laravel blog    
```

「パーミッションを変更」

```ruby:
    cd blog
    chmod -R 777 storage
    chmod -R 777 bootstrap/cache 
```

「DocumentRootの変更」
httpd.confファイルについて下記のように変更

「DocumentRoot "/var/www/html"」を
「DocumentRoot "/var/www/html/blog/public"」に変えます。

「Apacheを再起動」

```ruby:
   systemctl restart httpd
```

### 補足
filesystemを使って画像をアップしたあと、vagrantを再起動させたら下記のエラー出ました。
<img width="785" alt="スクリーンショット 2019-05-19 13.47.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91907/2b40a3af-caaf-370d-d965-9648af81caf3.png">
/public/storageは同期できない原因であるみたいでstorageを消すと無事に同期出来ました。<img width="819" alt="スクリーンショット 2019-05-19 13.55.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91907/9a3836ae-5711-5644-b035-e1fc881a7da9.png">