初めての AWS で Laravel API をデプロイしてみた！ - 第 5 弾：アプリケーション起動編

# 1. はじめに
私は2023年10月より、内定直結型エンジニア学習プログラム「アプレンティス」に2期生として参加しています。

https://apprentice.jp/

AWS について学んだので、Laravel API を AWS でデプロイする方法についてまとめました。
AWS に初めて触れる方の参考になれば幸いです。

### シリーズ一覧
長編になっているので、複数の記事に分けて公開しています。
本記事はその第 5 弾です。

1. [サーバー設置編](https://qiita.com/mosyaneko/items/0788e1011b792f137d5b)
2. [サーバー接続編](https://qiita.com/mosyaneko/items/55e75ee5a96920db5981)
3. [IP アドレス編](https://qiita.com/mosyaneko/items/0788e1011b792f137d5b)
4. [データベース編](https://qiita.com/mosyaneko/items/182438555c7d23e5a3e9)
5. アプリケーション起動編 ★本記事!!
6. [Webレイヤ冗長化編](https://qiita.com/mosyaneko/items/b85d0e7bb633a42eb9e4)
7. [SSL 化編](https://qiita.com/mosyaneko/items/d6c6b63c35f9868858be)

# 目次
[1.はじめに](#1-はじめに)
[2.Laravel プロジェクトのクローン](#2-Laravelプロジェクトのクローン)
[3.API へリクエスト送信](#3-APIへリクエスト送信)

# 16. Laravelプロジェクトのクローン
まずは、PHP 実行環境を整えます。
EC2 インスタンスにログインしましょう。

## PHP のインストール
Amazon Linux2 には extras ライブラリというパッケージ群が存在していて、今回はそのコマンドを使って PHP 8.2 をインストールします。
`sudo amazon-linux-extras install -y php8.2`

### PHP 関連の必要なライブラリをインストール
`sudo yum -y install php-devel php-pdo php-mbstring php-mcrypt php-mysqlnd php-xml php-gd php-opcache php-pecl-zip`

## Laravel プロジェクトのクローン
GitHub リポジトリからイメージをクローンしてくるためには、まず Git をインストールする必要があります。
`sudo yum -y install git`

クローンして来られるように、ディレクトリの権限を変更しておきます。
`sudo chmod 777 /var/www/html`

ここでようやく、作成済みの Laravel プロジェクトを GitHub からクローンしてきます。
`git clone <リポジトリ URL>`

`ls` コマンドで、リポジトリがクローンされていることを確認します。
![スクリーンショット 2024-02-15 3.39.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/9b35aa17-f419-8953-8be8-747c5d9871ab.png)
`cd <プロジェクト名>` で、プロジェクトルートに移動します。

### composer インストール
パッケージ管理ツールの composer をインストールします。
`curl -sS https://getcomposer.org/installer | php`

composer の実行ファイルを移動します。
`sudo mv composer.phar /usr/local/bin/composer`

プロジェクトディレクトリに存在する package.json に記載されたライブラリをインストールします。
`composer install`
![スクリーンショット 2024-02-15 3.52.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/129fbfcf-25c3-1a29-e6e9-d755966e1abb.png)
たくさんインストールされました。

### ディレクトリのコピー
Apache が参照しに行くディレクトリは`/var/www/html/`なので、クローンしてきたプロジェクトディレクトリを丸ごと`/var/www/html/`にコピーします。
`sudo cp -r * /var/www/html/`

コピーできたか確認します。
`ls -la /var/www/html`
![スクリーンショット 2024-02-15 4.35.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/4fbc5581-d454-77e0-a9c9-6f427693af6a.png)
コピーできてることが確認できました。

### storage, bootstrap ディレクトリの権限変更
`cd /var/www/html/` で移動する。

以下コマンドで、権限を変更する。
`sudo chmod 777 storage -R`
`sudo chmod 777 bootstrap/cache -R`

### .env ファイルの作成
`vi .env` で`.env`ファイルを新規作成する。
内容は、ローカルの Laravel プロジェクトの`.env`ファイルをコピペし、一部修正する。

修正箇所
- APP_URL：`<ドメイン名>:<ポート番号>`
- DB_HOST：`RDB インスタンスのエンドポイント`
- DB_DATABASE：`作成した MySQL データベース名`
- DB_USERNAME：`作成した MySQL ユーザー名`
- DB_PASSWORD：`作成した MySQL ユーザーのパスワード`

## Apache のドキュメントルート変更
この状態では、まだ パブリック IP アドレスにアクセスした時に、最初に見た Apache のページが表示されるだけです。
Laravel API に直接アクセスできるようにするには、ドキュメントルートを変更する必要があります。
Laravel はドキュメントルートを public ディレクトリにする必要があるので、そのように変更します。

vim を起動して、設定ファイルを編集します。
`sudo vim /etc/httpd/conf/httpd.conf`
- `DocumentRoot`をコメントアウトして、`/var/www/html/public`に変更
- `< Directory "/var/www/html" >` 以下の、`AllowOverride None`をコメントアウトして、`AllowOverride All`に変更
`AllowOverride`は、上位ディレクトリで設定した設定値を、下位ディレクトリで変更する許可を与えるかどうかの設定です。

![スクリーンショット 2024-02-15 4.09.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/adbc50a9-ba19-0d44-c125-2239b6f5f6fc.png)
![スクリーンショット 2024-02-15 4.09.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/349310cf-b634-b114-2c77-fc986239a16f.png)
保存して終了。

## マイグレーション実行
マイグレーションが実行できれば、データベースへの接続は成功です！
`php artisan migrate`

## 接続できるか確認
ドメイン名で Laravel API にアクセスできるか確認します。
![スクリーンショット 2024-02-15 5.20.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/5b6bec76-8228-b530-2268-d950070b0848.png)
無事、API の画面が表示されました！

# 17. APIへリクエスト送信
データベースにダミーデータを挿入して、Postman から Laravel API にリクエストを送信し、正しくレスポンスが返ってくるか確認します。
## ダミーデータ挿入
ダミーデータ挿入用の Factory, Seeder ファイルは既に作成済みです。

以下のコマンドでダミーデータを挿入します。
`php artisan migrate:refresh --seed`

## Postman で GET リクエストを送信
私の Laravel API は、`/api/articles`に対して GET リクエストを送信すると、掲示板サイトの投稿記事一覧を取得する仕様になっています。
正しくレスポンスが返ってくるか、Postman で確認してみます。
![スクリーンショット 2024-02-15 5.35.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/d4ef3c1f-fb53-8731-6592-9018bafef604.png)
成功です！！

本記事はここまでです。
次の記事はこちら↓
[初めての AWS で Laravel API をデプロイしてみた！ - 第 6 弾：Webレイヤ冗長化編](https://qiita.com/mosyaneko/items/b85d0e7bb633a42eb9e4)