EC2でLaravel9 × Reactアプリをデプロイする時メモ


```
sudo yum update -y
```

### nginxの導入
```
sudo amazon-linux-extras enable nginx1
sudo yum install nginx -y
```

### EPELの導入
通常、EC2でパッケージをインストールするときは```amazon-linux-extras```を使用するが、php8.1を導入することはできない。
そのため、epelを使用してphp8.1を導入していく。
```
sudo amazon-linux-extras install epel -y
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
```

### PHP8.1の導入
```
sudo yum install php81 php81-php-mbstring php81-php-mysqlnd php81-php-gd php81-php-xml php81-php-fpm -y
```
現時点ではphp81と打ち込まないと、phpコマンドを使用することはできないが、これだと面倒なので、修正する。
```
sudo alternatives --install /usr/bin/php php /usr/bin/php81 1
```
### composerの導入
```
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

sudo mv composer.phar /usr/local/bin/composer

```

### php-fpmの設定
```
sudo vim /etc/opt/remi/php81/php-fpm.d/www.conf
```
ファイル内の下記の記述を書き換える
```diff
- user = apache
+ user = nginx
- group = apache
+ group = nginx  
- listen = 127.0.0.1:9000
+ listen = /var/opt/remi/php81/run/php-fpm/www.sock
```
```diff
- ;listen.owner = nobody
- ;listen.group = nobody
- ;listen.mode = 0660
+ listen.owner = nginx
+ listen.group = nginx
+ listen.mode = 0660
```
```
sudo vim /etc/nginx/conf.d/laravel.conf
```
上記のコマンドで新しく設定ファイルを作成し、ファイルの中に下記の内容を記述する。

```
upstream php-fpm {
        server unix:/var/opt/remi/php81/run/php-fpm/www.sock;
}

server {
    listen 80 default_server;
    listen [::]:80;
    server_name example.com;
    root /var/www/[アプリ名]/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 php-fpm;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_hide_header X-Powered-By;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
```

### gitのインストール
```
sudo yum install git -y
```

### Laravelアプリをclone
まずはアプリ用ディレクトリを作成する
```
sudo mkdir /var/www
cd /var/www
```

書き込み権限を付与
```
sudo chown ec2-user /var/www
```

アプリをcloneしてくる
```
git clone https://github.com/[アカウント名]/[アプリ名].git
```
### Laravelアプリ初期設定
```
cd /var/www/[アプリ名]

composer install

cp .env.example .env

php artisan key:generate
```

storageフォルダへの書き込み権限を付与する
```
sudo chmod -R 777 storage/
```

### プロジェクトを起動
```
sudo systemctl start nginx
sudo systemctl start php81-php-fpm
```

### mysqlのインストール
```
sudo yum install mysql -y
```

### .envの編集
```
DB_CONNECTION=mysql
DB_HOST=[RDSのエンドポイント]
DB_PORT=3306
DB_DATABASE=[DB名]
DB_USERNAME=[RDSで設定したユーザー名]
DB_PASSWORD=[RDSで設定したパスワード]
```

### nodeの環境構築
```
curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
sudo yum install -y nodejs
```
### エラーログの見方

```
sudo tail -f /var/log/nginx/error.log
tail -f storage/logs/laravel.log
```