Amazon Linux 2でサーバ作成 (Apache2.4+PHP7.2+MariaDB)

## 概要
EC2インスタンスを起動して、Apache2.4とPHP7.2とMariaDBをインストールしてみたのでメモしておく。

## インスタンス起動
学習用の起動なので、スタンドアロンで起動してすべてインストールするので、インスタンスを１つ起動。

EC2 -> インスタンス -> インスタンスの作成
![step01.png](https://qiita-image-store.s3.amazonaws.com/0/142279/1d534576-1898-b27f-7269-a0c63a6501ac.png)
※ Amazon Linux 2 AMIを選択
※ セキュリティグループは、80ポートと22ポートを解放する。
 （22ポートは不要だが学習用なので簡略化のため設定）

## サーバへ接続する
ターミナルを使って起動したEC2インスタンスに接続する。
※ IAMユーザーにてssh接続。
※ アカウントは、多要素認証 (MFA) を設定し、利用しない。

```bash:ターミナル
$ ssh aws

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
Run "sudo yum update" to apply all updates.
```
とりあえず、yumを更新しておく。

```bash:ターミナル
$ sudo yum update -y
```

## Amazon Linux Extras リポジトリ
そのままインストールするとPHP５．x系のため、「amazon-linux-extras」を使うことにします。
「amazon-linux-extras」でインストールできる内容を確認する。

```bash:ターミナル
$ amazon-linux-extras list
 ...
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11 ]
 ...
 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 ]
 ...
```

インストールされる内容を確認してみる。

```bash:ターミナル
# PHP7
$ amazon-linux-extras info php7.2
php7.2 recommends php-cli                      # yum install php-cli
php7.2 recommends php-pdo                      # yum install php-pdo
php7.2 recommends php-fpm                      # yum install php-fpm
php7.2 recommends php-json                     # yum install php-json
php7.2 recommends php-mysqlnd                  # yum install php-mysqlnd

# PHP拡張モジュール(mariadb)
$ amazon-linux-extras info lamp-mariadb10.2-php7.2
lamp-mariadb10.2-php7.2 recommends php-cli     # yum install php-cli
lamp-mariadb10.2-php7.2 recommends php-pdo     # yum install php-pdo
lamp-mariadb10.2-php7.2 recommends php-fpm     # yum install php-fpm
lamp-mariadb10.2-php7.2 recommends php-json    # yum install php-json
lamp-mariadb10.2-php7.2 recommends php-mysqlnd # yum install php-mysqlnd
lamp-mariadb10.2-php7.2 recommends mariadb     # yum install mariadb
```

## PHP7.2.0 + 拡張モジュール
PHPをインストールしてみる。

```bash:ターミナル
$ sudo amazon-linux-extras install -y \
  lamp-mariadb10.2-php7.2=10.2.10_7.2.0 \
  php7.2=7.2.0
```

インストール状況を確認。

```bash:ターミナル
# PHP7
$ php -v
PHP 7.2.0 (cli) (built: Dec 13 2017 00:38:30) ( NTS )

# 拡張モジュール(mariadb)
$ yum list installed mariadb* | grep amzn2extra-lamp-mariadb10.2-php7.2
mariadb.x86_64        3:10.2.10-2.amzn2.0.1  @amzn2extra-lamp-mariadb10.2-php7.2
mariadb-common.x86_64 3:10.2.10-2.amzn2.0.1  @amzn2extra-lamp-mariadb10.2-php7.2
mariadb-config.x86_64 3:10.2.10-2.amzn2.0.1  @amzn2extra-lamp-mariadb10.2-php7.2
mariadb-libs.x86_64   3:10.2.10-2.amzn2.0.1  @amzn2extra-lamp-mariadb10.2-php7.2
```

## MariaDB (10.2.10)
yumコマンドでインストールする。

```bash:ターミナル
# インストール
$ sudo yum install -y mariadb-server

# 起動
$ sudo systemctl start mariadb

# 有効化
$ sudo systemctl enable mariadb
$ sudo systemctl is-enabled mariadb

# セキュリティ設定
$ sudo mysql_secure_installation
Set root password? [Y/n]
Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n] n
Reload privilege tables now? [Y/n]
 ...
Thanks for using MariaDB!

# バージョン確認
$ mysql -u root -e 'status' -p
mysql  Ver 15.1 Distrib 10.2.10-MariaDB, for Linux (x86_64) using ...
```

## Apache 2.4
yumコマンドでインストールする。

```bash:ターミナル
# インストール
$ sudo yum install -y httpd

# 環境設定
$ sudo vi /etc/httpd/conf/httpd.conf
--------------------------------------------------------
-「Forbidden」ページからOS,IP,Apacheなどの情報を非表示にする
ServerTokens Prod
ServerSignature Off

<Directory "/var/www/html">
  - ディレクトリ構造を表示しない
  Options -Indexes FollowSymLinks

  - htaccessを有効にする
  AllowOverride All
</Directory>
--------------------------------------------------------

# 環境設定ファイルのチェック
$ sudo httpd -t

# 起動
$ sudo systemctl start httpd

# 有効化
$ sudo systemctl enable httpd
$ sudo systemctl is-enabled httpd
enabled

# バージョン確認
$ httpd -v
Server version: Apache/2.4.34
```

ec2-userにapacheグループを追加する。

```bash:ターミナル
# グループ追加
$ sudo usermod -a -G apache ec2-user

# ssh再接続して、所属グループを確認
$ exit
$ ssh aws
$ groups
ec2-user adm wheel apache systemd-journal
```

所有権の変更。

```bash:ターミナル
$ sudo chown -R ec2-user:apache /var/www
$ sudo chmod 2775 /var/www
$ ls -la /var/
drwxrwsr-x  4 ec2-user apache   33 12月 12 13:46 www
```

パーミッションの変更。

```bash:ターミナル
$ find /var/www -type d -exec sudo chmod 2775 {} \;
$ find /var/www -type f -exec sudo chmod 0664 {} \;
$ ls -la /var/www
drwxrwsr-x  2 ec2-user apache   6  9月  1 05:32 cgi-bin
drwxrwsr-x  2 ec2-user apache   6  9月  1 05:32 html
```

index.phpファイルを配置

```php:/var/www/html/index.php
<html>
<body>
Hello World.<br>
<?php echo 'hoge'; ?>
</body>
</html>
```

## テスト
起動したインスタンスの「パブリック DNS (IPv4)」に記載されているIPアドレスにアクセスしてみる。
※ 今回のIPアドレス： IPv4 パブリック IP 54.92.29.7
![test.png](https://qiita-image-store.s3.amazonaws.com/0/142279/11392e55-43ec-a2ca-5a3d-5abbce71f5ac.png)

## AMI作成
再利用できるようAMI(Amazon Machine Image)を作成しておく。

対象のインスタンスを停止しておき、アクション->イメージ->イメージの作成を実行。
![ami1.png](https://qiita-image-store.s3.amazonaws.com/0/142279/e3f63367-2066-40dd-8284-56761f08fb37.png)

イメージ名と説明を入力して「イメージの作成」ボタンを押し、AMIを作成する。
![ami2.png](https://qiita-image-store.s3.amazonaws.com/0/142279/7728c555-4db1-5de0-c066-047ed0f33920.png)

## AMIからEC2インスタンス作成
EC2 -> インスタンス -> インスタンスの作成 -> マイ AMI から今回作成した「AmazonLinux2-httpd2.4-php7.2-mariadb10.2」を選択してインスタンスを作成する。
![my-ami.png](https://qiita-image-store.s3.amazonaws.com/0/142279/925d30f2-068b-ea21-d04d-d41b5f021630.png)

以上です。

## 参考サイト
- [AWS ドキュメント - Amazon Linux 2 に LAMP ウェブサーバーをインストールする](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html)
- [Amazon Linux 2のExtras Library(amazon-linux-extras)を使ってみた](https://dev.classmethod.jp/cloud/aws/how-to-work-with-amazon-linux2-amazon-linux-extras/)