（Amazon Linux 2023）AWS EC2にデプロイする④　GitHubとSSH接続する〜Laravelの初期設定を行う

# はじめに
前回からの続きです。

https://qiita.com/shunport/items/fbe2daeb69343347ea97

# 前提
- インスタンス作成時にAmazon マシンイメージ (AMI)でAmazon Linux 2023を選択された方向けです
- Amazon Linux2を選択された方も手順は同じですが、Linuxコマンドが異なります
- AMIの調べ方は、EC2サーバーにSSH接続をし、下記のコマンドを入力すると確認できます

``` sh:ターミナル
cat /etc/os-release
```

### 環境
- PHP 8.2
- Laravel 11
- mariaDB 10.5.23
- Nginx 1.24.0
- GitHub

# おおまかな流れについて
おおまかな流れは下記のとおりです。

1. ~~AWSでEC2のインスタンスを起動する~~（①で説明済）
1. ~~起動したインスタンスにElastic IP（固定IP）を関連付ける~~（①で説明済）
1. ~~EC2サーバの初期設定を行う~~（②で説明済）
1. ~~PHPと拡張モジュールをインストールする~~（②で説明済）
1. ~~Composerをインストールする~~（②で説明済）
1. ~~mariaDBをインストールする~~（②で説明済）
1. ~~Nginxをインストールする~~（③で説明済）
1. ~~php-fpmとNginxを連携する~~（③で説明済）
1. GitHubとSSH接続する
1. GitHubからmainブランチのコードをクローンする
1. Laravelの初期設定を行う
1. RDSと連携する
1. 独自ドメインを設定する
1. 独自ドメインのSSL認証を行う
1. 2回目以降のデプロイについて

# GitHubとSSH接続する
まずは、Gitをインストールします。

``` sh: ターミナル
sudo yum install -y git
```

インストール完了後、Gitのバージョンを確認します。

``` sh: ターミナル
git --version
```

次に、GitHubとSSH接続するためのキーを作成します。

.sshディレクトリに移動します。
``` sh:ターミナル
cd ~/.ssh
```
キーを作成します。

``` sh:ターミナル
ssh-keygen -t rsa
```

:::note info
いくつか質問項目があります
```
Enter file in which to save the key
```
そのままエンターを押してください。

```
Enter passphrase (empty for no passphrase): 
```
上記については、適当なパスフレーズを入力してください

```
Enter same passphrase again:
```
再度パスフレーズの入力が求められるので、入力すると、.sshディレクトリに、id_rsaとid_rsa.pubというファイルが生成されます。
:::

次に公開鍵の中身をコピーします。
``` sh:ターミナル
cat id_rsa.pub
```
上記のコマンドでターミナル画面に公開鍵の内容が表示されるので、コピーします。

次に、ブラウザを開き、GitHubのトップページに移動します。

アイコンをクリックします。

![01_GitHub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828050/abddcd8f-d508-afb9-d117-9d48585c773d.png)

メニューバー表示されるので、Settingsをクリックします。

![02_GitHub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828050/0b1054cd-4b8c-b318-81c7-72cf017a715d.png)

AcsessカテゴリーのSSH and GPC keysをクリックします。

![03_Your-profile.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828050/5cf190eb-aace-ef62-63b1-252efa8dae15.png)

New SSH keyをクリックします。

![04_SSH-and-GPG-keys.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828050/b340ed3d-d049-324f-f0bc-4902f8ebfa8d.png)

Titleに識別しやすい任意の名前を入力し、Keyにさきほどid_rsa.pubファイルからコピーした内容をペーストし、Add SSh Keyをクリックすると、GitHubに接続用のSSH Keyが追加されます。

![05_Add-new-SSH-key.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828050/c1bf58e3-cbda-2e84-9f81-6fcff1e252b0.png)

次に、EC2インスタンスにSSH接続をしたターミナル画面に戻って、接続確認を行います。

まずは、ルートユーザーにスイッチします。
``` sh:ターミナル
sudo su -
```

次に、バックグラウンドでSSHエージェントを起動します。

``` sh:ターミナル
eval "$(ssh-agent -s)"
```

生成した秘密鍵をSSHエージェントに追加します。

``` sh:ターミナル
ssh-add ~/.ssh/id_rsa
```

接続確認をします。
``` sh:ターミナル
ssh -T git@github.com
```

下記のように表示されれば、接続設定は完了です。
```
Hi GitHubアカウント名! You've successfully authenticated, but GitHub does not provide shell access.
```

# GitHubからmainブランチのコードをクローンする

まずはルートディレクトリに移動します。
``` sh:ターミナル
cd /var/www/
```

SSH経由でクローンします。GitHubからSSH経由でのクローン用のアドレスをコピペしてください。
``` sh:ターミナル
git clone プロジェクトのアドレス
```
これで、メインブランチにあるコードがクローンされます。

# Laravelの初期設定を行う
まずは、Laravelプロジェクトのルートディレクトリに移動します。私の環境では下記のとおりです。
``` sh:ターミナル
cd /var/www/drinko-app/laravel
```
次に、プロジェクトの依存関係をComposer経由でインストールします。
``` sh:ターミナル
composer install
```

クローンしたファイルの中に.envファイルが存在しないので、.env.exampleを複製し、.envファイルを作成します。
``` sh:ターミナル
sudo cp .env.example .env
```

.envファイルをご自身の環境に合わせて設定してください。
``` sh:ターミナル
vim .env
```
:::note info
.envファイル設定時の注意事項
- vimに慣れておらず、行頭に#がついていてコメントアウトされている部分が有効だと思っていて、時間を無駄にしてしまったので、みなさんはお気をつけください、、、
- APP_DEBUGは必ずfalseに設定してください。trueのままだと、漏れてはいけない情報がユーザーに漏れてしまう場合があります
- LaravelSanctumを使用している場合は、SANCTUM_STATEFUL_DOMAINSに、通常のドメインと、API用のドメイン（サブドメインを切っている場合）を追加する必要があります
- DBの設定については、RDSの設定が終わった後でなければ入力できない部分があるので、以降の作業で追加します。
:::

次に、アプリケーションキー(APP_KEY)を生成します。以下のコマンドを実行することで、アプリケーションキー生成後、.envファイルのAPP_KEYに自動で値が入ります。
``` sh:ターミナル
php artisan key:generate
```

ストレージに書き込み権限を加えます。
``` sh:ターミナル
sudo chmod -R 777 storage
```

シンボリックリンクを作成します。
``` sh:ターミナル
php artisan storage:link
```

最後にキャッシュをクリアします。
``` sh :ターミナル
php artisan config:cache
```

これで、DB接続以外のLaravel上での設定が完了しました。