WSL2+WardenでMagento2の環境構築をする方法の備忘録

# 概要
<!-- 発端や概要を記載 -->
WSL2+WardenでMagento2の環境構築をする方法の備忘録
（2021年3月時点）
# 目次
<!-- タイトルとアンカー名を編集 -->
1. [WSL2のインストール](#wsl2のインストール)
2. [Wardenのインストール](#wardenのインストール)
    1. [2021年3月時点（バージョン0.10.1）のWSL2での環境構築方法](#2021年3月時点バージョン0101のwsl2での環境構築方法)
    2. [補足](#補足)

<!-- 各チャプター -->
# WSL2のインストール
WSL2(Windows Subsystem for Linux 2)とは、Windows内でLinuxを実行できる仕組みである。（[詳細はマイクロソフトのドキュメント](https://docs.microsoft.com/ja-jp/windows/wsl/about)）
[マイクロソフトのドキュメントにあるインストール方法](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)の通りに実行すれば、wsl2をインストールできる。

# Wardenのインストール
Wardenの仕組みやインストールの方法からMagento2の環境構築まで、[Yamashitaさんの記事](https://qiita.com/Taku2/items/f2a70046fc1ca7d2691c)に分かりやすく載っている。（macOSにおける2020年3月時点のもの）

<a id="#2-1"></a>
###2021年3月時点（バージョン0.10.1）のWSL2での環境構築方法
1.Homebrewをインストールする

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

2.wardenをインストールし、Global Serviceを起動する

```
brew install davidalger/warden/warden
warden svc up
```

3.起動に成功したら、以下のURLで確認できる。
・https://traefik.warden.test/
・https://portainer.warden.test/
・https://dnsmasq.warden.test/
・https://mailhog.warden.test/

接続できなかった場合は[補足の3を参照](#補足)

4.プロジェクトのルートディレクトリで下記コマンドを実行する。

```
warden env-init [projectname] [environment type]
```
[projectname]：プロジェクトの名前を自由に決める。
[environment type]：[ドキュメント](https://docs.warden.dev/environments/types.html)にあるタイプの中から一つ選ぶ。今回はmagento2の構築なのでmagento2とする。

.envというファイルが生成されるので、PHPのバージョンなどを変更したいときはここに記述する。

5.SSL証明書の作成

```
warden sign-certificate [projectname].test
```

6.プロジェクトの環境を立ち上げる

```
warden env up -d
```

7.php-fpmコンテナに入る

```
warden shell
```

8.composerでMagento2をダウンロードする

```
META_PACKAGE=magento/project-community-edition META_VERSION=2.4.x

composer create-project --repository-url=https://repo.magento.com/ \
    "${META_PACKAGE}" /tmp/exampleproject "${META_VERSION}"

rsync -a /tmp/exampleproject/ /var/www/html/
rm -rf /tmp/exampleproject/
```

META_VERSION＝2.4.xにMagentoのバージョンを入れる。
（一度/tmpにダウンロードしてから/var/www/html/に移すのは、create-projectはカレントディレクトリにダウンロードすることができないから。）

9.Magento2をインストールする(2.4.x)

```
bin/magento setup:install \
    --backend-frontname=backend \
    --amqp-host=rabbitmq \
    --amqp-port=5672 \
    --amqp-user=guest \
    --amqp-password=guest \
    --db-host=db \
    --db-name=magento \
    --db-user=magento \
    --db-password=magento \
    --search-engine=elasticsearch7 \
    --elasticsearch-host=elasticsearch \
    --elasticsearch-port=9200 \
    --elasticsearch-index-prefix=magento2 \
    --elasticsearch-enable-auth=0 \
    --elasticsearch-timeout=15 \
    --http-cache-hosts=varnish:80 \
    --session-save=redis \
    --session-save-redis-host=redis \
    --session-save-redis-port=6379 \
    --session-save-redis-db=2 \
    --session-save-redis-max-concurrency=20 \
    --cache-backend=redis \
    --cache-backend-redis-server=redis \
    --cache-backend-redis-db=0 \
    --cache-backend-redis-port=6379 \
    --page-cache=redis \
    --page-cache-redis-server=redis \
    --page-cache-redis-db=1 \
    --page-cache-redis-port=6379

## Configure Application
bin/magento config:set --lock-env web/unsecure/base_url \
    "https://${TRAEFIK_SUBDOMAIN}.${TRAEFIK_DOMAIN}/"

bin/magento config:set --lock-env web/secure/base_url \
    "https://${TRAEFIK_SUBDOMAIN}.${TRAEFIK_DOMAIN}/"

bin/magento config:set --lock-env web/secure/offloader_header X-Forwarded-Proto

bin/magento config:set --lock-env web/secure/use_in_frontend 1
bin/magento config:set --lock-env web/secure/use_in_adminhtml 1
bin/magento config:set --lock-env web/seo/use_rewrites 1

bin/magento config:set --lock-env system/full_page_cache/caching_application 2
bin/magento config:set --lock-env system/full_page_cache/ttl 604800

bin/magento config:set --lock-env catalog/search/enable_eav_indexer 1

bin/magento config:set --lock-env dev/static/sign 0

bin/magento deploy:mode:set -s developer
bin/magento cache:disable block_html full_page

bin/magento indexer:reindex
bin/magento cache:flush
```

※バージョン2.4.x以前の場合、以下のElasticsearchのパラメータは省略する。

```
--search-engine=elasticsearch7 \
--elasticsearch-host=elasticsearch \
--elasticsearch-port=9200 \
--elasticsearch-index-prefix=magento2 \
--elasticsearch-enable-auth=0 \
--elasticsearch-timeout=15 \
```

代わりに以下のElasticsearchの設定コマンドを打つ。

```
bin/magento config:set --lock-env catalog/search/elasticsearch7_server_hostname elasticsearch
bin/magento config:set --lock-env catalog/search/elasticsearch7_server_port 9200
bin/magento config:set --lock-env catalog/search/elasticsearch7_index_prefix magento2
bin/magento config:set --lock-env catalog/search/elasticsearch7_enable_auth 0
bin/magento config:set --lock-env catalog/search/elasticsearch7_server_timeout 15
```

これでMagento2のインストールは完了。

以下のURLでアプリケーションにアクセスできる。
・https://app.[projectname].test/
・https://app.[projectname].test/backend/
・https://rabbitmq.[projectname].test/
・https://elasticsearch.[projectname].test/

### 補足

1. <font color="Red"> wardenのGlobal Serviceの起動方法は、2021年3月時点で```warden svc up```に変更されている
</font>

2. ```warden sync start```はmacOSで且つバージョン0.3.0以前に必要なコマンドである。(```warden sync stop```も同様)


3. [Wardenのドキュメント](https://docs.warden.dev/configuration/dns-resolver.html)にもあるように、<font color="Red">dnsmasqサービスによるDNSの自動解決には、DNSリクエストがローカルネットワークを経由する必要がある。</font>
Windowsの設定方法は、[このサイト](https://www.tipsfound.com/windows10/11014)に分かりやすく載っている。
インターネットプロトコル バージョン 4 (TCP/IPv4)の優先DNSを127.0.0.1に設定する。