CentOS7.6にLaravel5.7の(LAMP)環境を作る

いろいろ変わってるみたいなので調べてメモ。

>以下、root権限かsudoで実行すること前提。

## 前提条件

* CentOS7はMinimalインストールでyum updateした状態
* インストールにフォーカスしているのでセキュリティ設定とは一旦置いておく
* 端折ります（忙しい向け）

## 主な流れ

* httpd(2.4)のインストール
* php(7.2)と拡張モジュールのインストール
* MySQL(8.0)のインストール
* composer(1.8)のインストール
* Laravel(5.7)のインストールと動作確認

## httpd(Apache)のインストール

何は無くともApacheのインストール。Apacheは標準リポジトリにある2.4.x系をインストール。

```bash
yum install -y httpd
```

サービスの開始と永続化。

```bash
systemctl start httpd.service
systemctl enable httpd.service
```

CentOS7は標準でFirewallが設定されているので、必要なポートを開けます。ここでは80と後々Laravelのビルトインサーバで利用する8000を開けておきます。

```bash
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --reload
```

>http://サーバのIP/ でApacheの標準画面が見えるか確認しておきましょう。

## PHPのインストール

続いてPHP。
標準のリポジトリにあるのは5.4.xと古いので、PHP7.2をインストールします。

>Laravelの最新版の要求はPHP7.x以上です。

remiリポジトリをインストールします。依存関係としてepelのインストールされます。

```bash
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

では。PHPのインストール。
Laravelが要求してくる拡張モジュールもインストールしておきます。

```bash
yum install -y --enablerepo=remi,remi-php72 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-mysqlnd
```

>上記ではremi-php72としてますが、remi-php73でもかまいません。

モジュールを読み込むためhttpdを再起動させておきます。

```bash
systemctl restart httpd.service
```

## MySQLのインストール

続いてMySQL。
標準でMariaDBのライブラリが入っているので消しておきます。

```bash
yum remove mariadb-libs
rm -rf /var/lib/mysql
```

MySQLも標準リポジトリには無いので最新のリポジトリをインストールします。

```bash
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
```

標準では8.0がインストールされます。

```bash
yum install -y mysql-community-server
```

サービスの起動と永続化を行います。

```bash
systemctl start mysqld.service
systemctl enable mysqld.service
```

rootのパスワードがlogに出力されるので確認しておきます。

>ここではV9djjjWFd_wf。

```bash
grep password /var/log/mysqld.log
2019-02-17T01:49:46.433912Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: V9djjjWFd_wf
```

標準のパスワードでは怒られるのでmysql_secure_installationコマンドを実行してrootのパスワードを変更しておきます。

```bash
mysql_secure_installation
```

MySQL8.0から認証方法が変更されたため、Laravelからアクセスできません（migrateコマンドでエラーが出ます）。
認証方法を従来の方法に変更しておきます。以下、rootの認証方法の変更です。

```
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'New_P@ssw0rd!';
```

変更されたか確認しておきます。

>select user, plugin from mysql.user;

今後createするユーザーの認証手法を変えたい場合は、my.cnfを変更します。

```:my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password
```

my.cnfをいじったら、systemctl restart mysqld.serviceしておきましょう。

## composerのインストール

LaravelのインストールのためにComposerをインストールしておきます。
ダウンロードして名称変更・移動を行います。

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

## Laravelのインストール

ここまで来たらいよいよLaravelのインストールですが、zipとunzipを先にインストールしておきます。
composer利用時に「zip unzipが無いぞ！」と怒られるのを防ぐためです。

```bash
yum install -y zip unzip
```

では、composerでcreate-projectします（ここではlaravelというフォルダが作成されるはず）。

```bash
composer create-project laravel/laravel laravel
```

では、Laravelのフォルダに入って、serveします。

```
php artisan serve --host 0.0.0.0
```

この時点でhttp://IPアドレス:8000/ でアクセスしてLaravel画面が見えるか確認しておきます。
見えればLaravelは動いています。

いちおうDB関連が正しく動いているかも確認します。
適当にLaravelからアクセスするDBを作成します。

```
mysql>create database testdb;
```

.evnを編集してDB情報を追加・更新します。

```
vi .env
```

migrateコマンドが実行できるか確認します。

```bash
php artisan migrate
```

うまく行っていればOKです。