WSL2: UbuntuでPHP+MySQL+Laravelインストールの手順

## はじめに
WindowsでWSL2を使用し、PHP＋MySQL＋laravelのインストールや初期設定をしたので、その時のメモ。

## 前提
WSL2とUbuntuの環境設定

WSL2の環境設定の参考：

https://qiita.com/rubytomato@github/items/a290ecef2ea86ea8350f

- WSL2
- Ubuntu 20.04 LTS

```powershell:PowerShell
$ wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
```

## 手順
### ①phpをインストール

```bash:Ubuntu
$ sudo apt-get update
$ sudo apt install -y php

$ php -v
PHP 7.4.3
```


### ②MySQLのインストール
```bash:Ubuntu
$ sudo apt install -y mysql-server
```

- ステータスの確認/起動

```bash:Ubuntu
$ sudo service mysql status

$ sudo service mysql start
```

このスタートで、su: 警告: ディレクトリを /nonexistent・・・　といった警告がでるがいったんOK

- セットアップ

```bash:Ubuntu
$ sudo mysql_secure_installation
```

- ルートでのログイン

```bash:Ubuntu
$ sudo mysql -u root -p
```

- 起動時の警告対応

```bash:Ubuntu
$ sudo usermod -d /var/lib/mysql mysql

$ sudo service mysql restart
```

### ③ laravelのインストール

- laravelのインストールに必要なphpの拡張機能をインストールとモジュールの確認

```bash:Ubuntu
$ sudo apt install php7.4-bcmath php7.4-mbstring php7.4-xml php7.4-zip

$ php -m
```

- Composerのインストール

Composer公式サイト：https://getcomposer.org/download/
ダウンロード用ページ記載のコマンドをコピペして実行

```bash:Ubuntu
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```

- /user/local/bin/フォルダの下に移動とバージョン確認

```bash:Ubuntu
$ sudo mv  composer.phar /usr/local/bin/composer

$ composer -V
```

- laravel 6.xxx系のインストール

```bash:Ubuntu
$ composer create-project --prefer-dist laravel/laravel フォルダ名 "6.*"
```

最新のlaravelにて作成する場合は、最後の部分は何も指定しなければOK（下図は現在のバージョンのv8.44.0）

![Screenshot_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/a428f5c2-870f-0635-3760-c402df8276b4.png)

- 作成されたフォルダに移動して、起動

```bash:Ubuntu
$ php artisan serve
```

- http://localhost:8000/   にアクセス

![Screenshot_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/de8e7913-5254-ddbf-476f-05fe60d583cc.png)

### ④laravelのデバックツールのインストール

- デバックツールのインストール

```bash:Ubuntu
$ composer require barryvdh/laravel-debugbar
```

![Screenshot_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/9bf7b78c-0f6e-c16f-0ae0-79f7abf50426.png)

- デバックの表示・非表示は .envファイル(APP_DEBUG=true/false)にて決定することができる

```　.env
APP_DEBUG=true
```



### ⑤laravelからデータベースへの接続

- LaravelからMySQLに接続用のドライバーをインストール

```bash:Ubuntu
$ sudo apt install php7.4-mysql
```

- MySQLの起動

```bash:Ubuntu
$ sudo service mysql start
```

- 文字コードの確認

```bash:Ubuntu
mysql> show variables like '%char%';
```

/etc/mysql/mysql.confの下にあるmysqld.cnf に「character-set-server=utf8」を追記

- MySQLを再起動して、設定が反映されているかを確認する

```bash:Ubuntu
$ sudo service mysql restart
```

- laravelから接続するデータベースを作成する

```bash:Ubuntu
mysql> create database laravel6;

mysql> show databases;
```

- ポート番号の確認（3306であることを確認する）

```bash:Ubuntu
mysql> show variables like 'port';
```

- Laravelの.envファイルを開きデータベース接続に関するパラメータを設定

```　.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel6
DB_USERNAME=root
DB_PASSWORD=*******
```

- Laravelのテーブルを作成するためにmigrateコマンドを実行

```bash:Ubuntu
$ php artisan migrate
```

**ここでエラーが発生する（MySQLに接続する際にsudoを使ってアクセスしなければならないことと同じ問題）**
原因は、rootユーザの認証方式となる。MySQLに接続して、rootの認証方式を確認。

```bash:Ubuntu
mysql> SELECT user, host, plugin FROM mysql.user;
```

rootのpluginを確認するとauto_socketになっている。mysql_native_password へ認証方式を設定。

```bash:Ubuntu
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '********';
```

ユーザのpluginを確認し、認証方式が変更になっていることを確認。これを実施すると、sudo をつけなくても、mysql -u root -p でMySQLに接続可能になる。再度、下記を実行して、エラーにならずに問題なくテーブルが作成されればOK

```bash:Ubuntu
$ php artisan migrate
```

## 参考URL

https://qiita.com/Jazuma/items/61724ca5fa706d5617f3