AWS Amazon Linux 2 にnginxをインストールする

# 概要

- Amazon Linux2インスタンスにnginxをインストールする方法をまとめる

# 前提

- 若干古いが下記の方法を応用してAmazon Linux2インスタンスを立てた
    - [AWS EC2 をMacで使ってみよう!](https://qiita.com/miriwo/items/a1ab84c098008e43d042)
- コマンドは特筆しない限り前のコマンドと同じディレクトリで実行しているものとする

# 方法

1. インスタンス起動後ssh接続し、そのままのディレクトリで下記コマンドを実行してyumを最新状態にする。

    ```terminal
    $ sudo yum update
    ```

1. 下記コマンドを実行してAmazon Linux Extrasが入っているか確認する。（エラーがでなければ入っている）

    ```terminal
    $ which amazon-linux-extras
    ```

1. 入っていなかった場合、下記を実行して導入する。

    ```terminal
    $ sudo yum install amazon-linux-extras
    ```

1. 下記を実行してnginxのパッケージが含まれている事を確認する。

    ```terminal
    $ amazon-linux-extras | grep "nginx"
    > 38  nginx1                   available    [ =stable ]
    ```

1. 下記コマンドを実行してnginxを導入するのに必要なコマンドを出力する。

    ```terminal
    $ sudo amazon-linux-extras enable nginx1
    ```

1. 下記のように出力される。

    ```terminal
    [ec2-user@ip-10-0-0-106 ~]$ sudo amazon-linux-extras enable nginx1
      0  ansible2                 available    \
            [ =2.4.2  =2.4.6  =2.8  =stable ]
      2  httpd_modules            available    [ =1.0  =stable ]
      3  memcached1.5             available    \
            [ =1.5.1  =1.5.16  =1.5.17 ]
      5  postgresql9.6            available    \
            [ =9.6.6  =9.6.8  =stable ]
      6  postgresql10             available    [ =10  =stable ]
      9  R3.4                     available    [ =3.4.3  =stable ]
     10  rust1                    available    \
            [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0  =1.38.0
              =stable ]
     11  vim                      available    [ =8.0  =stable ]
     15  php7.2                   available    \
            [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
              =7.2.16  =7.2.17  =7.2.19  =7.2.21  =7.2.22  =7.2.23
              =7.2.24  =7.2.26  =stable ]
     17  lamp-mariadb10.2-php7.2  available    \
            [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
              =10.2.10_7.2.8  =10.2.10_7.2.11  =10.2.10_7.2.13
              =10.2.10_7.2.14  =10.2.10_7.2.16  =10.2.10_7.2.17
              =10.2.10_7.2.19  =10.2.10_7.2.22  =10.2.10_7.2.23
              =10.2.10_7.2.24  =stable ]
     18  libreoffice              available    \
            [ =5.0.6.2_15  =5.3.6.1  =stable ]
     19  gimp                     available    [ =2.8.22 ]
     20  docker=latest            enabled      \
            [ =17.12.1  =18.03.1  =18.06.1  =18.09.9  =stable ]
     21  mate-desktop1.x          available    \
            [ =1.19.0  =1.20.0  =stable ]
     22  GraphicsMagick1.3        available    \
            [ =1.3.29  =1.3.32  =1.3.34  =stable ]
     23  tomcat8.5                available    \
            [ =8.5.31  =8.5.32  =8.5.38  =8.5.40  =8.5.42  =8.5.50
              =stable ]
     24  epel                     available    [ =7.11  =stable ]
     25  testing                  available    [ =1.0  =stable ]
     26  ecs                      available    [ =stable ]
     27  corretto8                available    \
            [ =1.8.0_192  =1.8.0_202  =1.8.0_212  =1.8.0_222  =1.8.0_232
              =1.8.0_242  =stable ]
     28  firecracker              available    [ =0.11  =stable ]
     29  golang1.11               available    \
            [ =1.11.3  =1.11.11  =1.11.13  =stable ]
     30  squid4                   available    [ =4  =stable ]
     31  php7.3                   available    \
            [ =7.3.2  =7.3.3  =7.3.4  =7.3.6  =7.3.8  =7.3.9  =7.3.10
              =7.3.11  =7.3.13  =stable ]
     32  lustre2.10               available    \
            [ =2.10.5  =2.10.8  =stable ]
     33  java-openjdk11           available    [ =11  =stable ]
     34  lynis                    available    [ =stable ]
     35  kernel-ng                available    [ =stable ]
     36  BCC                      available    [ =0.x  =stable ]
     37  mono                     available    [ =5.x  =stable ]
     38  nginx1=latest            enabled      [ =stable ]
     39  ruby2.6                  available    [ =2.6  =stable ]
     40  mock                     available    [ =stable ]
     41  postgresql11             available    [ =11  =stable ]
     42  php7.4                   available    [ =stable ]
     43  livepatch                available    [ =stable ]
     44  python3.8                available    [ =stable ]
     45  haproxy2                 available    [ =stable ]
     46  collectd                 available    [ =stable ]
     47  aws-nitro-enclaves-cli   available    [ =stable ]
     48  R4                       available    [ =stable ]
      _  kernel-5.4               available    [ =stable ]
     50  selinux-ng               available    [ =stable ]
     51  php8.0                   available    [ =stable ]
     52  tomcat9                  available    [ =stable ]
     53  unbound1.13              available    [ =stable ]
     54  mariadb10.5              available    [ =stable ]
     55  kernel-5.10=latest       enabled      [ =stable ]
     56  redis6                   available    [ =stable ]
     57  ruby3.0                  available    [ =stable ]
     58  postgresql12             available    [ =stable ]
     59  postgresql13             available    [ =stable ]
     60  mock2                    available    [ =stable ]
     61  dnsmasq2.85              available    [ =stable ]
    
    Now you can install:
     # yum clean metadata
     # yum install nginx
    ```

1. 下記の部分がインストールに必要なコマンドなので実行する。（必要に応じて頭にsudoをつけたりする必要がある。）

    ```terminal
    Now you can install:
     # yum clean metadata
     # yum install nginx
    ```

1. 筆者は下記コマンドを実行する。

    ```terminal
    $ sudo yum clean metadata
    $ sudo yum install nginx
    ```

1. 下記のようにインストール可否を問われたのでyを入力してEnterを押下する。

    ```
    =======================================================================================================================================================
     Package                              アーキテクチャー           バージョン                                リポジトリー                           容量
    =======================================================================================================================================================
    インストール中:
     nginx                                x86_64                     1:1.20.0-2.amzn2.0.4                      amzn2extra-nginx1                     579 k
    依存性関連でのインストールをします:
     gperftools-libs                      x86_64                     2.6.1-1.amzn2                             amzn2-core                            274 k
     nginx-filesystem                     noarch                     1:1.20.0-2.amzn2.0.4                      amzn2extra-nginx1                      23 k
     openssl11-libs                       x86_64                     1:1.1.1g-12.amzn2.0.4                     amzn2-core                            1.4 M
     openssl11-pkcs11                     x86_64                     0.4.10-6.amzn2.0.1                        amzn2-core                             61 k
    
    トランザクションの要約
    =======================================================================================================================================================
    インストール  1 パッケージ (+4 個の依存関係のパッケージ)
    
    総ダウンロード容量: 2.3 M
    インストール容量: 6.6 M
    Is this ok [y/d/N]: y
    ```

1. インストール後、下記コマンドを実行してインストールされたものを確認する。

    ```terminal
    $ yum list installed | grep nginx
    nginx.x86_64                          1:1.20.0-2.amzn2.0.4           @amzn2extra-nginx1
    nginx-filesystem.noarch               1:1.20.0-2.amzn2.0.4           @amzn2extra-nginx1
    ```

1. 下記コマンドを実行してnginxを起動する。

    ```terminal
    $ sudo systemctl start nginx
    ```

1. 下記コマンドを実行して問題なくnginxが起動している事を確認する。

    ```terminal
    $ sudo systemctl status nginx
    ● nginx.service - The nginx HTTP and reverse proxy server
       Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
       Active: active (running) since 月 2022-02-21 13:44:03 UTC; 6s ago
      Process: 3642 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
      Process: 3637 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
      Process: 3636 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
     Main PID: 3644 (nginx)
       CGroup: /system.slice/nginx.service
               ├─3644 nginx: master process /usr/sbin/nginx
               └─3645 nginx: worker process
    
     2月 21 13:44:03 ip-10-0-0-106.ap-northeast-1.compute.internal systemd[1]: Starting The nginx HTTP and reverse proxy server...
     2月 21 13:44:03 ip-10-0-0-106.ap-northeast-1.compute.internal nginx[3637]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
     2月 21 13:44:03 ip-10-0-0-106.ap-northeast-1.compute.internal nginx[3637]: nginx: configuration file /etc/nginx/nginx.conf test is successful
     2月 21 13:44:03 ip-10-0-0-106.ap-northeast-1.compute.internal systemd[1]: Started The nginx HTTP and reverse proxy server.
    ```

1. 次回当該のAmazon Linux2 インスタンスが起動したときに自動でnginxが起動するように下記コマンドを実行する。

    ```terminal
    $ sudo systemctl enable nginx
    ```

1. ブラウザからAWSにログイン → EC2 → 当該のインスタンスの詳細と進み、パブリックIPv4アドレスをコピーする。
1. `http://コピーしたIPv4アドレス`を任意のブラウザで入力して下記の画面が表示されればインストールと起動が成功している。

    ![Test_Page_for_the_Nginx_HTTP_Server_on_Amazon_Linux.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/87819153-83a2-60be-ab6a-01448ac5096e.png)


# 参考文献

- [https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-install-extras-library-software/](https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-install-extras-library-software/)