Laravel9 Sail インストール

# 検証環境
* Windows 10 Pro
* Docker Desktop for Windows  　　　　

# １.Docker Desktop for Windowsのインストール
https://docs.docker.jp/docker-for-windows/install.html

Docker Desktop for Windowsをインストールします。
   
# ２. Windows Subsystem for Linux 2（WSL2）がインストールされ、有効になっていることを確認する。
### 2-1 wslを確認する。

Windows Terminalを使用して、以下のコマンドにより、確認します。

```terminal:terminal
wsl --status
```

WSL 2 カーネル ファイルが見つかりません。カーネルを更新または復元するには、'wsl.exe --update' を実行してください。
上記メッセージが表示された場合、カーネルを更新します。

```terminal:terminal
wsl --update
```

```terminal:terminal
wsl -l -v
```

以下のメッセージが表示された場合は、インストールされていません。

```
Linux 用 Windows サブシステムには、ディストリビューションがインストールされていません。
ディストリビューションは Microsoft Store にアクセスしてインストールすることができます:
https://aka.ms/wslstore
```

インストールされていない場合は、wsl2をインストールします。

参考サイト

https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

### 2-2 wslを最新に更新する。 
```terminal:terminal
wsl --update
```

### 2-3 インストールするバージョンをWSL 2とする。 

```terminal:terminal
wsl --setdefault 2
```

### 2-4 インストールできるディストリビューションを確認する。

```terminal:terminal
wsl -l -o
```

```
インストールできる有効なディストリビューションの一覧を次に示します。
wsl --install -d <Distro>' を使用してインストールします。

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS
```

### 2-5 ディストリビューションを指定してインストールする。
今回は、Ubuntuを指定します。

```terminal:terminal
wsl --install -d Ubuntu 
```

インストールの最後にディストリビューションのユーザーとパスワードの設定があります。
ユーザーとパスワードは忘れないように控えておきます。

### 2-6 インストールを確認する。

```terminal:terminal
wsl -l -v
```

以下のメッセージが表示されれば、インストールが完了しています。

```
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
```

# ３． wsl環境でCurlを実行し、プロジェクトを作成する
### 3-1 Windowsターミナルを起動します。wslコマンドによりlinux環境に入ります。

```terminal:terminal
wsl
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64)
```

### 3-2 プロジェクトを格納するディレクトリを作成し、ディレクトリを移動します。

linux環境より
```terminal:terminal
mkdir Laravel
cd Laravel 
```

### 3-3 curlコマンドによりプロジェクトを作成します。
今回はexample-appという名前のプロジェクトを作成します。

```terminal:terminal
curl -s https://laravel.build/example-app | bash
 _                               _
| |                             | |
| |     __ _ _ __ __ ___   _____| |
| |    / _` | '__/ _` \ \ / / _ \ |
| |___| (_| | | | (_| |\ V /  __/ |
|______\__,_|_|  \__,_| \_/ \___|_|

Warning: TTY mode requires /dev/tty to be read/writable.
    Creating a "laravel/laravel" project at "./example-app"
    Installing laravel/laravel (v8.5.16)
      - Downloading laravel/laravel (v8.5.16)
      - Downloading laravel/laravel (v8.5.16)
      - Downloading laravel/laravel (v8.5.16)
      - Installing laravel/laravel (v8.5.16): Extracting archive
    Created project in /opt/example-app
.
.
.

Application ready! Build something amazing.
Sail scaffolding installed successfully.

Please provide your password so we can make some final adjustments to your application's permissions.

[sudo] password for user:

Thank you! We hope you build something incredible. Dive in with: cd example-app && ./vendor/bin/sail up
```

linuxディストリビューションのパスワード入力を求められますので、2-5で設定したパスワードを入力します。

# ４. ポート番号を設定する
### 4-1 example-app/docker-compose.ymlファイルを確認します。

```docker-compose.yml
# For more information: https://laravel.com/docs/sail
version: '3'
services:
    laravel.test:
        build:
            context: ./docker/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/app
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
            - redis
            - selenium
    mysql:
        image: 'mysql:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql'
        networks:
            - sail
        healthcheck:
          test: ["CMD", "mysqladmin", "ping"]
.
.
.
networks:
    sail:
        driver: bridge
volumes:
    sailmysql:
        driver: local
    sailredis:
        driver: local
    sailmeilisearch:
        driver: local
```

laravel.testコンテナとmysqlコンテナのポート番号が環境変数となっています。

### 4-2　.envファイルにポート番号を設定する。

example-app/.envファイルにホストOSの環境に合わせてポート番号を設定します。
今回は、ホストOSのポート番号3306と80が使用中であったため、設定します。
以下の記述をexample-app/.envファイルの最後に設定します。

```.env
.
.
.

FORWARD_DB_PORT=3305
APP_PORT=81
```
 
# ５．sail upによりSailを起動する

sail up により起動します。
```terminal:terminal
cd ./example-app
./vendor/bin/sail up -d
...
Creating example-app_redis_1       ... done
Creating example-app_mysql_1       ... done
Creating example-app_selenium_1    ... done
Creating example-app_mailhog_1     ... done
Creating example-app_meilisearch_1 ... done
Creating example-app_laravel.test_1 ... done
```
コンテナが起動できたことを確認します。

# ６.ブラウザよりアクセス

http://localhost:81
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1393249/10002a05-84e1-ace4-4652-0c20f6fbdf24.png)

画面が表示されます。