AWSの開発環境構築手順：EC2インスタンス内で諸々設定編

# やること

現状、EC2インスタンス（サーバー）が存在するだけで、その中には何も無い空箱の状態です。
今回、DB以外は同一のサーバーに構築するので、下記3つを1つのインスタンスに構築していきます。
- Webサーバーアプリケーション：Nginx
- バックエンド：Python
- フロントエンド：Node

今回のインスタンスはAmazon Linux 2023（RedHat系）なので、dnfコマンドで作業します。

# 作業内容

## インスタンスにssh接続する

```
ssh -i <秘密鍵のパス> ec2-user@<Elastic IPアドレス>
```

下記みたいになればOK

```
shin-gee@workspace:~$ ssh -i .ssh/project-dev-ssh-key-pair.pem ec2-user@11.22.333.44
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Thu Oct 24 07:32:31 2024 from 555.66.77.88
[ec2-user@ip-11-2-3-444 ~]$
```

## Nginxをインストール

パッケージをアップデート
```
sudo dnf update
```

※WARNINGが出て、上記のコマンドでは更新できない場合がある
※その場合は案内通りに`--releasever=`を指定して`dnf upgrade`
参考：[【AWS】Amazon Linux 2023でパッケージを更新する時の注意点](https://qiita.com/messhii222/items/e1f6d7347fae6d9cc0e4)

Nginxをインストール
```
sudo dnf -y install nginx
```

バージョンが表示されるか確認
```
nginx -v
```

Nginxを起動
```
sudo systemctl start nginx
```

active (running) になっているか確認
※「ALB編」でヘルスチェックに失敗していたが、この段階で解消される
```
sudo systemctl status nginx
```

インスタンス起動時に自動でnginxが起動するように設定
```
sudo systemctl enable nginx
```

https://project.com を開いて、Nginxが表示されることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/fe1fbbfa-4207-bbd8-5181-20baf0fb9a30.png)
<br>

※以降の手順でPython等インストール後は、必要に応じて`/etc/nginx/nginx.conf` `/etc/nginx/conf/*`ファイルを設定し、Nginxを再起動する

## Pythonをインストール

※この項目は、私の担当（インフラ）外のバックエンドエンジニアの範疇も関わってくるため、
具体的な作業ではなく、大まかな作業内容を記載します。

- Pythonに必要なパッケージをインストールする

```
例
sudo dnf -y install pcre pcre-devel tree
sudo dnf clean all
```

- pyenvをインストールし、pythonをインストールする
  - [python 3.12 on Amazon Linux 2023](https://repost.aws/questions/QULIsYrNNAQoiy59gkn8h1jg/python-3-12-on-amazon-linux-2023)
  - [【AP Tech Blog Week】Amazon Linux 2023 でも Python 3.11.7 以上を使いたい](https://techblog.ap-com.co.jp/entry/2024/04/26/083000#Python-3117-%E4%BB%A5%E4%B8%8A%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
  - [Amazon Linux2023にpyenvを利用してpython3.12をインストール](https://qiita.com/YujiHamada3/items/e1124b78f7d89b53c498)
- requirements.txtを使用して、パッケージをインストールする
    - `pip install -r requirements.txt`

## Nodeをインストール

※この項目は、私の担当（インフラ）外のフロントエンドエンジニアの範疇も関わってくるため、
具体的な作業ではなく、大まかな作業内容を記載します。

- nodeをインストールする
    - [チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップ](https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)
- モジュールをインストール
    - `npm i`
- ビルド＆デプロイ
    ```
    npm run dev
    ```
- project.comで画面が表示されることを確認

# 参考記事

- [nginx.confの解説、書き方](https://qiita.com/ponponnsan/items/23e1aa6f7dd4eadde5df)
- [nginx.confの中身を理解したいので一つずつ調べました](https://zenn.dev/na0kia/articles/c68cfd65dcbdda)
- [nginxのrootディレクティブとaliasディレクティブの違い](https://qiita.com/oogaki_newmedia/items/749c855ad985c8258e66)
- [nginxでサーバ名が長いって怒られた](https://qiita.com/madaran0805/items/8a32b123fa94018284fa)
- [【AWS】Amazon Linux 2023でパッケージを更新する時の注意点](https://qiita.com/messhii222/items/e1f6d7347fae6d9cc0e4)
- [python 3.12 on Amazon Linux 2023](https://repost.aws/questions/QULIsYrNNAQoiy59gkn8h1jg/python-3-12-on-amazon-linux-2023)
- [【AP Tech Blog Week】Amazon Linux 2023 でも Python 3.11.7 以上を使いたい](https://techblog.ap-com.co.jp/entry/2024/04/26/083000#Python-3117-%E4%BB%A5%E4%B8%8A%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [Amazon Linux2023にpyenvを利用してpython3.12をインストール](https://qiita.com/YujiHamada3/items/e1124b78f7d89b53c498)
- [チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップ](https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)