LightsaillにMagentoをインストール

#はじめに
所属しているロボコンチームでECサイトが必要になったのですが、自動で伝票を作成できる機能などがあるMagentoをインストールすることにしました。
結構苦戦したので、備忘録的な意味も含めて、メモしておきます。
なお、一般的なものとあまり変わらない部分は、簡単に記載するだけになるので、追加でいろいろ調べながらやってみてください。

#インスタンスの作成
これは、簡単です。
AWSのアカウントを取得して、Ligsaillの管理画面からインスタンスを作成するだけです。
本来は、Magentoがセットになっているインスタンスもありますが、今回は何もセットになっていないインスタンスを作成します。
OSはAmazonLinux2で、メモリが4Gのプランです。
Lightsaillはインスタンスのアップグレードはできても、ダウングレードはできないので大きくしすぎないように気を付けましょう。
メモリは、最低でも2G無いとインストールできないと思うので、それ以上のプランを選ぶようにしましょう。
また、接続用のSSHキーペアを作成する場合は、なくさないようにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167678/e14330a4-01a2-baa6-bd94-bb7f9fb8f5ca.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167678/a3d15f96-09e7-286f-9d7b-79ec43577c87.png)

#Apacheのインストール
Apacheのインストールは特段難しくありません。

```bash
sudo yum -y update
sudo yum install -y httpd
```

起動及び自動起動設定

```bash
systemctl start httpd
systemctl enable httpd
```

#SSLの設定
今回は、手動インストールしましたが、yumでも大丈夫だと思います。

```bash
sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod 700 /usr/bin/certbot-auto
```

なお、そのまま使用するとエラーがでますので、こちらの記事を参考に実行ファイルを少し変更してください。

[Amazon Linux2でLet's Encrypt使おうとしたらコケた話](https://qiita.com/MysteriousMonkey/items/f26316447c1ff390ce21)

それが終わったら、通常通り証明書を発行すればよいです。

#MySQLのインストール
これも特段変わりません。
こちらに記載する必要もないので、リンクのみ。
[2.5.1 MySQLYumリポジトリを使用したLinuxへのMySQLのインストール](https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html)

#PHPのインストールについて
これで少し詰まりました。
初期状態でAmazonLinux2にPHPを入れると、7.4xがインストールされるのですが、動作はしたものの7.3が推奨されており、拡張機能がうまくインストールできなかったので、PHP7.3xをインストールします。
まずは、現在インストールされているものをアンインストールします。

```bash
yum remove php-* -y
```
そして、php7.4を無効にし、7.3をインストールします。

```bash
sudo amazon-linux-extras disable php7.4
sudo amazon-linux-extras install php7.3=7.3.13
```
終わったら、php-fpmの再起動を忘れずに

```bash
systemctl reload php-fpm
```

#Magentoのインストール
これも通常通り行えばよいです。
今回は、 /var/www/html にインストールします。

```bash
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition /var/www/html
```

/var/www/htmlに移動し、インストールコマンドを実行します。
必要なものは適宜置き換えてください。

```bash
bin/magento setup:install \
--base-url=http://localhost/magento2ee \
--db-host=localhost \
--db-name=magento \
--db-user=magento \
--db-password=magento \
--admin-firstname=admin \
--admin-lastname=admin \
--admin-email=admin@admin.com \
--admin-user=admin \
--admin-password=admin123 \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1
```
インストールが完了すると、管理画面のURLが発行されるので、そこにアクセスします。


#初期設定
スクショを取り忘れたので、言葉で説明します。

ログイン画面に移動したら、インストール時に設定したアカウント情報でログインします。
そうすると、メールに2段階認証の設定コードを送ったと書かれた画面になりますが、メールを設定していないので、送られてきません。
そこで、少しファイルを編集します。

```bash
 vi vendor/magento/module-two-factor-auth/Model/EmailUserNotifier.php
```
でファイルを開き、

```php

    /**
     * Send configuration related message to the admin user.
     *
     * @param User $user
     * @param string $token
     * @param string $emailTemplateId
     * @param string $url
     * @return void
     */
    private function sendConfigRequired(
        User $user,
        string $token,
        string $emailTemplateId,
        string $url
    ): void {
    try {
            $transport = $this->transportBuilder
                ->setTemplateIdentifier($emailTemplateId)
                ->setTemplateOptions([
                    'area' => 'adminhtml',
                    'store' => 0
                ])
                ->setTemplateVars(
```
この記載個所の

```php
try{
```

の前に、

```php
var_dump($url);
```

と入力します。
そして、先ほどの画面に戻ると、メールに送られるはずだったURLが出力されるので、アクセスして2段階認証の設定をします。
設定が終わったら、ファイルは元に戻しておいてください。

#日本語化
日本語化も簡単です。
以下をインストールすれば完了です。

```bash
composer require veriteworks/m2-japaneselocale
```

管理画面のアカウント設定で日本語を選択すれば、日本語になります。

#メモリ不足について
もし、メモリーが足りないと出たら、Swapファイルを作成します。
1024と書かれているところを変更すれば、容量も変更できます。

```bash
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
```
freeコマンドを実行して、認識されていれば、成功です。

```bash
free
              total        used        free      shared  buff/cache   available
Mem:        4037584     2441604      397488         740     1198492     1366768
Swap:       2097148           0     2097148
```

#まとめ
ECCubeを使ってきた人としては、結構大変でしたが、やはり越境ECや大規模サイトの場合の運営のしやすさ、他のツールとの連携性はシェア率からしても高いです。
最初は、CDNをかまそうかと思ったのですが、調べてもメディアファイルだけCDNを通す、という記事しか発見できなかったのであきらめました。
もし、間違えなどあったら指摘してください。