（Amazon Linux 2023）AWS EC2にデプロイする② EC2サーバーの初期設定を行う〜mariaDBをインストールする

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

https://qiita.com/shunport/items/0baf41d91f059a892be7

# 前提
- インスタンス作成時に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回目以降のデプロイについて

# EC2サーバーの初期設定を行う

### ダウンロードした.pemファイルを移動する
起動したインスタンスにSSH接続をするためには、プライベートキーを使う必要があります。そのため、まずは、①でダウンロードされた.pemファイルを.sshフォルダに移動させます。ターミナルを開き下記のコマンドを入力します。

``` sh: ターミナル
# 1. .sshフォルダを作成（存在しない場合）
mkdir -p ~/.ssh

# 2. ダウンロードフォルダから.pemファイルを.sshフォルダに移動
mv ~/ダウンロード/your_file_name.pem ~/.ssh/
```

### SSH接続をする
下記のコマンドを入力することで、SSH接続することが可能です。
``` sh: ターミナル
ssh -i ~/.ssh/your_file_name.pem ec2-user@Elastic IPアドレス
```

:::note info
Elastic IPアドレスの調べ方

EC2のダッシュボードへ移動し、インスタンス（実行中）を開きます。
パブリック IPv4 DNSの部分が@以降にそのまま入ります。

![01_インスタンス-EC2-ap-southeast-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828050/75d645a5-e7ba-6a7f-17c6-9759b9c7aa33.png)

:::

SSH接続に成功すると、下記のような表示がでます。

``` sh: ターミナル
A newer release of "Amazon Linux" is available.
  Version 2023.5.20240701:
  Version 2023.5.20240708:
  Version 2023.5.20240722:
Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Sat Jul 20 09:58:20 2024 from 210.170.173.154
```

### システム及びパッケージのアップデート
下記のコマンドを入力します。

``` sh: ターミナル
sudo dnf -y update
```

### タイムゾーンの設定
まずはタイムゾーンの確認を行います。初期状態であれば基本的にUTCになっていると思います。

``` sh: ターミナル
timedatectl
```

下記のコマンドでタイムゾーンを変更します。

``` sh: ターミナル
sudo timedatectl set-timezone Asia/Tokyo
```

もう一度タイムゾーンの確認を行い、変更されているか確認してください。

### パッケージアップグレードの自動化
まずは、dnf-automatic パッケージをインストールします。

``` sh: ターミナル
sudo dnf install -y dnf-automatic
```

次に、設定ファイルを編集します。

``` sh: ターミナル
sudo vi /etc/dnf/automatic.conf
```

vimエディターで、編集画面に入るので、apply_updatesをyesに変更します。

``` sh: ターミナル
[commands]
#  What kind of upgrade to perform:
# default                            = all available upgrades
# security                           = only the security upgrades
upgrade_type = default
random_sleep = 0

# Maximum time in seconds to wait until the system is on-line and able to
# connect to remote repositories.
network_online_timeout = 60

# To just receive updates use dnf-automatic-notifyonly.timer

# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes

# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = yes
```

::: note info
vimエディターの操作方法がわからない場合は、下記の記事が参考になります。
https://zenn.dev/masatotezuka/articles/vim_command_220225
:::

これで初期設定は終わりです。

# PHPと拡張モジュールをインストールする

### フレームワークに必要な拡張モジュールを調べる
Laravelの公式ドキュメントから、必要な拡張モジュールを調べます。

https://readouble.com/laravel/11.x/ja/deployment.html

### PHPと拡張モジュールをインストールする
私の環境に必要な拡張モジュールをすべてまとめてインストールしたところ、下記のコマンドになりました。

``` sh: ターミナル
sudo dnf install php8.2 php-fpm php-ctype php-curl php-dom php-fileinfo php-filter php-hash php-mbstring php-openssl php-pcre php-pdo php-session php-tokenizer php-xml php-bcmath php-mysqlnd php-intl
```

### PHPのバージョンを確認する
指定したバージョンがインストールされていれば問題ありません。

``` sh: ターミナル
php -v
```

### どの拡張モジュールがインストールされているか確認する。
すべての拡張モジュールがインストールされているか確認してください。
``` sh: ターミナル
php -m
```

これで、PHPと拡張モジュールのインストールは完了です。

## Composerをインストールする
公式サイトを確認し、インストールします。

https://getcomposer.org/download/

``` sh: ターミナル
# 必ず公式サイトを確認してください。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```

### 移動＆リネーム（パスを通す）

``` sh: ターミナル
sudo mv composer.phar /usr/local/bin/composer
```

### バージョンを確認する
``` sh: ターミナル
composer -v
```

これで、Composerのインストールは終了です。

# mariaDBをインストールする

``` sh: ターミナル
sudo dnf install mariadb105
```

### バージョンを確認する
``` sh: ターミナル
mariadb --version
```

# おわりに
今回は、作成したEC2インスタンスにSSH接続し、初期設定を行った後に、PHP、拡張モジュール、Composer、mariaDBをインストールするところまで説明しました。次回は、Nginxをインストールするところから記事化したいと思います。

間違っている点や補足情報等ありましたら、ご教授いただけますと幸いです！