EC2のAmazonLinux2でLaravel8環境を構築する

自分のための備忘録。

# 先に書いておくハマりどころ

- Laravel8 には php7.3 以上が必要!!
- yum で必要なバージョンが入ってくれるとは限らない!!

ちゃんと確認しておきましょう(自戒)


# (前準備)EC2インスタンス立ち上げ
今自分がどこのリージョンにいるかを確認しつつ、「EC2」->「インスタンスを起動」。
AMI は Amazon Linux 2 AMI (HVM), SSD Volume Type を選択。
セキュリティグループには http(80) と https(443) を追加しておく。

起動したら適当な term でログイン。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411870/9af72842-66f8-335d-a760-27df36dff9d9.png)
ここでは作業ユーザは ec2-user で進めます。

# いろいろインストール
#### まずは今の状態で yum update。

```bash:
$ sudo yum update
```
#### php7.3 のインストール
何も考えずに yum install php とかすると5系が入るので論外。
remi を使う手もあるが、AmazonLinux2 なので Amazon Linux Extras を使う。

https://aws.amazon.com/jp/amazon-linux-2/faqs/#Amazon_Linux_Extras

```bash:
$ sudo amazon-linux-extras install php7.3
$ sudo yum install php-mbstring php-dom    # 追加で必要なものは yum でOK
```



#### httpd2.4 のインストールと設定変更
こっちは yum で素直に入ってくれる。

```bash:
$ sudo yum install httpd
$ sudo systemctl start httpd                        # httpd 起動
$ sudo systemctl enable httpd                       # 以後システム起動とともに httpd も起動
$ sudo usermod -a -G apache ec2-user                # ec2-user を apache グループに追加
$ exit                                              # usermod 反映のため一旦ログアウト(ログインしなおす)
$ sudo chown -R ec2-user:apache /var/www            # /var/www 以下のオーナー、グループを ec2-user:apache に変更
$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \; # ディレクトリの許可設定を変更
$ find /var/www -type f -exec sudo chmod 0664 {} \; # ファイルの許可設定を変更
```
https の対応。

```bash:
$ sudo yum install mod_ssl             # mod_ssl をインストール
$ cd /etc/pki/tls/certs                # ディレクトリを移動して…
$ sudo ./make-dummy-cert localhost.crt # オレオレ証明書を作成
$ sudo vi /etc/httpd/conf.d/ssl.conf   # ssl.conf を開いて、下記の行をコメントアウト
          SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
$ sudo systemctl restart httpd         # httpd 再起動
```

ここまでできたら http://～ でも https://～ でも apache のテストページが表示されるはず。
もちろんオレオレなので https でのアクセスは警告が出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411870/ca30a167-e109-2884-7ef4-2473bd7b1cfb.png)


#### mariadb のインストール
mariadb も amazon-linux-extras からインストール。執筆時点の最新は10.5。
yum だと5系が入るので論外。

```bash:
$ sudo amazon-linux-extras install mariadb10.5  # mariadb をインストール
$ sudo systemctl start mariadb                  # mariadb を起動
$ sudo systemctl enable mariadb                 # mariadb をシステム起動時に起動
$ sudo mysql_secure_installation                # mariadb のルートパスワード設定。その他の項目も全てY
```
接続できたら成功。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411870/461d5a4b-6241-8d70-85e6-61af483c804c.png)
laravelで利用するDBを作っておく。

```bash:
MariaDB[(none)｣> create database laravel; 
```


# Laravel8 の準備

#### composer インストール

```bash:
$ sudo curl -sS https://getcomposer.org/installer | php  # composer をインストール
$ sudo mv composer.phar /usr/local/bin/composer        # composer.phar を "composer" で動かせるように bin 下へ
```

#### Laravel を クローン

https://github.com/laravel/laravel

8.x であることを確認。

```bash:
$ sudo yum install git       # git が入っていなかったらインストール
$ cd /var/www                # httpd のドキュメントルートへ移動
$ git clone https://github.com/laravel/laravel.git # クローン
```

#### httpd.conf の設定変更

```bash:
$ sudo vi /etc/httpd/conf/httpd.conf   # DocumentRoot変更、Directoryディレクティブ追加
        DocumentRoot "/var/www/laravel/public"

       <Directory /var/www/laravel/public>
           AllowOverride All
       </Directory>
$ sudo systemctl restart httpd         # 再起動
```
#### クローンしたLaravelの下でパッケージ取得
```bash:
$ cd /var/www/laravel
$ composer update
```

#### 必要な場所へパーミッションの変更
```bash:
$ sudo chmod -R 777 /var/www/laravel/storage
$ sudo chmod -R 777 /var/www/laravel/bootstrap/cache
```

#### .env ファイルの作成
```bash:
$ cp .env.example .env
$ vi .env
    APP_URL、DB_* を設定
```

#### アプリケーションキーの生成
```bash:
$ php artisan key:generate
```

#### マイグレーションとシーディングでDB構築
```bash:
$ php artisan migrate 
$ php artisan db:seed  
```

# 完成
アクセスできるはず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411870/04c4bf55-723f-71f5-c057-655850b0790f.png)



# 参考文献

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-2.html