【AWS】EC2にNginxを利用したLaravel環境構築(PHP,Composer,PHP-FPM)

<h2>はじめに</h2>

初めてのAWS,Laravel導入などが重なりに重なり、私は導入にかなり手こずりました。
最初はApacheをWebサーバーソフトとして利用する予定でしたが、なぜかLaravelを入れてもパス？が通らず<Not Foundエラー>から一向に進まず...(多分、今なら対処できるかも...)
まぁ、なんとかかんとかでNginxで導入する方法を見つけ導入成功したという背景です。

前記事でEC2のインスタンスを立ち上げ、SSH接続まで記述しました
今回は、EC2にSSHで接続し環境構築をPHP,Nginx,Composer,PHP-FPMなどで構築していきます。

<h2>手順</h2>
1.SSH接続<br>
2.PHPのインストール<br>
3.Nginxのインストール<br>
4.Composerのインストール<br>
5.PHP-FPMの設定<br>
6.Nginxの設定<br>
7.Laravelのインストール/プロジェクト作成<br>
8.NginxとPHP-FPMの起動<br>
9.Laravel確認/環境構築完了<br>
10.まとめ

<h2>1.SSH接続</h2>
【インスタンスに接続】の下部分にあるコマンドをターミナルにコピペしてEC2に接続

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/25af0479-cca6-d2ef-6106-cad04e793906.png)

この画面になったらSSH接続成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/fb63e117-be40-2587-9d54-43292c25f6a2.png)


<h2>2.PHPのインストール</h2>

以下のコマンドを実行して、EPELリポジトリをインストールします（EPELリポジトリにはPHPパッケージが含まれています）
```
sudo yum install epel-release
```
以下のコマンドを実行して、PHPをインストールします
```
sudo yum install php
```
インストールが完了すると、PHPが正常にインストールされます。バージョンを確認するには、以下のコマンドを実行します：
```
php -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/4aa07b0b-5b77-43e0-e0aa-e5eee9772cc4.png)
PHP 【バージョン】が表示されればPHPインストール完了！

<h2>3.Nginxのインストール</h2>
1.Nginxをyumでインストールします(-yオプションは、インストール時に聞かれる質問を全てyesで通してくれるおまじない)

```
sudo yum install -y nginx
```

2.Nginxが正しくインストールされているか確認
```
sudo systemctl status nginx
```
3.nginx.service〜って記載されているのでインストール成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/921cd7ff-532a-fb76-a9cf-a0c2fdea7341.png)


<h2>4.Composerのインストール</h2>


:::note
Composerは、PHPの依存関係管理ツール、パッケージ管理ツールです。PHPプロジェクトで外部のパッケージやライブラリを使用する際に、それらのパッケージやライブラリのインストールや更新、依存関係の解決を容易にするために使用されます。
:::

1.インスタンスに必要なパッケージをインストールします。以下のコマンドを順番に実行してください。
```
sudo yum update -y
sudo yum install php-cli php-zip wget unzip -y
```
2.Composerの公式インストールスクリプトをダウンロードします。以下のコマンドを実行してください。
```
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
```
3.Composerのインストールスクリプトの完全性を確認します。以下のコマンドを実行してください。
```
php -r "if (hash_file('sha384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
```
4.Composerのインストールスクリプトを実行して、Composerをインストールします。
```
php composer-setup.php
php -r "unlink('composer-setup.php');"
```
5.以下のコマンドを使用して、Composerのパスを/usr/local/binに追加します。

:::note
これにより、Composerが/usr/local/binディレクトリに配置され、グローバルなパスに追加されます。以後、composerコマンドを使用してComposerを実行できるようになります。
:::
```
sudo mv composer.phar /usr/local/bin/composer
```
6.インストールが正常に完了したかを確認するため、以下のコマンドを実行してComposerのバージョンを表示します。
```
composer --version
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/a2cf07dd-eff1-f10e-a85f-6145a391b544.png)
7.Composerのダウンロード完了！

8.足りない物をインストール(私は環境構築の際にエラーが発生、原因が下記の部品がインストールされていなかったとのこと。とりあえずここでは先にインストールして対処！)

```
sudo yum install php-mbstring
sudo yum install php-dom
composer install
```

<h2>5.PHP-FPMの設定</h2>
1.php-fpm/www.confをvimで大きく2箇所を編集します。

```
sudo vim /etc/php-fpm.d/www.conf
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/7d98cb5c-f5b6-c347-fe96-6d1a29d6f45a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/d286f857-c411-ad6e-78a6-aceb0d33340e.png)

編集が完了したら、Esc(エスケープキー)を押して```:wq```でvimから抜け出す。

<h2>6.Nginxの設定</h2>

1.conf.d/にlaravel.confという新しいファイルを作成する。
```
sudo vim /etc/nginx/conf.d/laravel.conf
```

2.Laravel公式サイトに、Nginxの設定例があるので利用
参照URL：https://laravel.com/docs/8.x/deployment#nginx
Nginx設定例をコピペして、laravel.confに貼り付け。
```
server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    root /srv/example.com/public;
 
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    index index.php;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    error_page 404 /index.php;
 
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}
```

3.少し内容を変更

:::note alert
```
listen 80 default_server;
root /var/www/【プロジェクト名】/public
```
プロジェクト名というのは、これから作成するLaravelプロジェクトの名前
今回の場合はasojobhiveがプロジェクト名
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/470ff362-2675-17d1-0bc6-dbda4e319b5a.png)
:::

:::note alert
fastcgi_passを変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/7e6b71d6-f36b-24de-b080-b63ff519eff7.png)
:::


<h2>7.Laravelのインストール/プロジェクト作成</h2>

:::note alert
プロジェクト名は、個人で決めてください。例(asojobhive)
:::
1.下記コマンドを実行して、www直下にLaravelプロジェクトを作成
```
cd /var/www/
composer create-project --prefer-dist laravel/laravel 【プロジェクト名】
```
2.Laravelプロジェクトが生成されているか確認
```
ls -a
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045856/9bfe9bed-141f-6690-ec8e-9f050b753d3d.png)
3.【プロジェクト名】が表示されていればプロジェクト作成成功！

4./プロジェクト名/storageの権限を変更
```
cd /var/www/【プロジェクト名】/
sudo chmod -R 777 storage/
```

5.暗号化キーの作成
```
cp .env.example .env
php artisan key
```
yesで次に進む

<h2>8.NginxとPHP-FPMの起動</h2>

```
sudo yum systemctl start nginx
sudo yum systemctl start php-fpm
```

<h2>9.Laravel確認/環境構築完了</h2>

AWS,EC2ダッシュボードに戻り、【パブリックIPアドレス】又は【パブリック IPv4 DNS】でURL検索しLaravelのデフォルトページが表示されれば、Laravel環境設定完了

<h2>10.まとめ</h2>
環境構築はやっぱり骨が折れますね...<br>
Qiitaでアウトプットを始めたばかりで、読みにくい記事かもしれませんが<br>
少しでも環境構築の参考にしていただけばありがたいです！<br>
もし、質問などがあればぜひコメントを残してください(可能な限りお答えいたします！)