Laravel5.4の環境構築

本記事では、CentOS7でLaravel5.4の環境構築方法を紹介する。
Laravelはバージョンアップの頻度が高く、マイナーアップデートでも仕様が大きく変わる。
現在の最新バージョンはLaravel5.4.9である。
この最新の環境でのLaravel環境構築の文献が非常に少ない。
またよく起こるエラーの回避法なども体系的にまとめられていない。
本記事は今回環境構築を行なったことを参考にエラーが出ず、コマンドをコピペするだけで環境構築ができることを目指す。


#はじめに
今回、ローカル環境からLaravel5.4.9の環境をサーバにデプロイしたいと友人に頼まれたので、一緒に環境構築を行なった時のコマンドを追いながらメモをとる。
環境構築をして気づいたのは、なかなか最新の環境での文献が少なく何が正解なのかわからないところだと思った。

#構成する実行環境・およびマシン環境
・CentOS7.3
・PHP7
・MySQL5.7
・apache2.4

上記の環境を構築する。
マシンはさくらVPSを利用しているが、環境はOS依存なので、
さくらのVPSに限らずCentOS7.3の環境なら基本的に再現できる。

#とりあえずやること
まず、いくつかやっておくべきことがある。

- yumをアップデートしてvimとgitを入れる

```vim-git.sh
yum update
yum install -y git vim
```

- SELinuxとfirewallの無効化

```SELinux-firewall.sh
setenforce 0
systemctl stop firewalld
```
SELinuxとfirewallの無効化はセキュリティレベルを下げる原因になるため、
環境構築が終了した場合には**どちらも有効にすることを**お勧めする。

#リポジトリの登録

```repository.sh
yum -y install epel-release.noarch
yum -y install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
vim /etc/yum.repos.d/epel.repo
```
上記のコマンドを打ったら、編集画面で[epel]の中身を"enable=1"を”enable=0”にする。

#apacheのインストール

```apache.sh
yum install -y httpd
httpd -v
systemctl enable httpd
systemctl start httpd.service
```

#MySQLのインストール

とりあえず、デフォルトmariaDBがインストールされているらしいのでアンインストールする。

```maria.sh
yum -y remove mariadb-libs
rm -Rf /var/lib/mysql/
```

```mysql.sh
yum install http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
yum-config-manager --enable mysql57-community-dmr
yum install -y --enablerepo=mysql57-community-dmr mysql-community-server
mysql --version
systemctl enable mysqld.service
systemctl start mysqld.service
grep password /var/log/mysqld.log
```
追記：この方法でmysqlがインストールできない場合があるようである。
以下のコマンドを実行することで改善することが確認できた。
```yum -y install mysql-community-server```


上記のコマンドを全て実行するとMySQLが起動し、初期パスワードを表示してくれる。

```mysql-setup.sh
/usr/bin/mysql_secure_installation
```

上記のコマンドを実行し、旧パスワードと新パスワードを登録することでパスワードを更新することができる。

#php7インストール

```php7.sh
yum install --enablerepo=remi,remi-php70 -y install php php-cli php-devel php-common php-mbstring php-mysql php-phpunit-PHPUnit php-pecl-xdebug php-fpm php-gd php-gmp php-mcrypt php-opcache php-pdo php-xml
````

上記のコマンドで必要なPHPのパケージをインストールできる。

追記：ここで```パッケージ install は利用できません。```といったエラーが表示された場合には以下の手順で回避することができる。

まず、php7.0のrepoファイルを開く```vim /etc/yum.repos.d/remi-php70.repo```

```php70.repo
[remi-php70]
   priority=1
```
このように設定を変更することで問題となる依存関係を回避してインストールできるようになる。

#php7に対応したapacheの設定
php7をapacheで利用する場合には、以下のモジュール設定を追加する必要がある。

```/etc/httpd/conf/httpd.conf
<IfModule prefork.c>
  #LoadModule php5_module modules/libphp5.so
  LoadModule php7_module modules/libphp7.so
</IfModule>
````

また、Laravelでは.htaccessを利用するための設定が必要である。
今回は、/etc/httpd/conf/httpd.confの中にある```<Directory "/var/www/html"></Directory>```を書き換える。

```/etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
    Options +FollowSymLinks
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    Require all granted
    AllowOverride All
</Directory>
````

これで編集は完了するので、再度```systemctl restart httpd.service```コマンドを実行する。

#composerのインストール

phpでパッケージの管理を行う際にはcomposerを利用する。
パッケージのバージョンがアップデートした時にアップデートの処理を裏側で担ってくれるとても重要なソフトウェア！！！
composerを入れるのは以下の2行のコマンドを実行する。

```composer.sh
curl -sS https://getcomposer.org/installer | php
mv ./composer.phar /usr/local/bin/composer
````

これで終了である。

#apacheのDocumentRootを変更する。

Laravelのプロジェクトでは```[project-name]/public/```配下をDocumentRootに設定する必要がある。

```/etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/[project-name]/public"
<Directory "/var/www/[project-name]/public">
・・・・・・省略・・・・・・・・
</Directory>
````
というように上記の箇所を```"/var/www/html"```から```"/var/www/[project-name]/public"```に変更する。

#Laravelプロジェクトの作成
"/var/www/"配下にプロジェクトを作成する。

```project-make.sh
composer create-project --prefer-dist laravel/laravel [project-name]
```
これでLaravelのプロジェクトが生成される。
あとは権限の設定を変更する。
Laravelは権限に非常にうるさく、権限が許可されていないと実行できないケースが多い。
最初はフルアクセスで実行し、うまく起動した後に設定を閉めて行った方が環境構築はが容易になるかもしれない。

```permission.sh
chown -R apache:apache [project-name]
chmod -R 777 [project-name]
```

#おわりに
今回は、Laravelの環境構築について最新の環境で構築を行なってみた。
あまり日本語の文献がなかったので記載したが、正直そこまで複雑な設定は存在しなく、慣れている人であれば、１時間もあれば構築できるレベルではある。
依存関係でphp7.0のリポジトリを参照させるのが少しつまるポイントだと思うので、そこだけ注意すればスムーズな構築が可能だろう・・・

#参考文献
[Laravel 5.4 インストール](https://readouble.com/laravel/5.4/ja/installation.html)
[CentOS7にApache2.4＋PHP7＋mysql5.7のLAMP環境構築](https://e-algorithm.xyz/centos7-lamp-apache2-4-php7-mysql5-7/)
[CentOS7へPHP7+MySQL5.7+Apache2.4のインストール＆設定](https://adan.jp.net/blog/program/1235)
[yumでCentOS6.7にPHP7をインストールする方法とハマった点](https://www.lancork.net/2016/05/yum-centos67-php7-install/)
[CentOS 7 に LAMP 環境を構築する手順 (Apache, MySQL, PHP)](http://weblabo.oscasierra.net/setup-lamp-rhel7/)
[nginx+php-fpmをyumでインストールして、WordPress/CakePHPを動かす設定](http://www.1x1.jp/blog/2011/05/yum_install_nginx_php-fpm.html)
[composer 導入をまじめに考える](http://qiita.com/notona/items/c5a087d8dd446d315e6e)
[Laravel5をDockerで動かす](http://blog.yucchiy.com/2015/01/16/dockerized-laravel5/)