Amazon Linux 2023でLAMP環境を構築してみる


## パッケージを最新のバージョンに更新
インストールされているパッケージを最新のバージョンに更新します。
Amazon Linux 2023はFedoraベースのAMIなのでdnfコマンドでインストールを行います。
-y オプションを指定することで確認をスキップすることができます。
```
sudo dnf update -y
```
## ApacheとPHPパッケージをインストールします。
AL2023 用の最新バージョンの Apache ウェブサーバーと PHP パッケージをインストールします。
コマンドは以下になります。
```
sudo dnf install -y httpd wget php-fpm php-mysqli php-json php php-devel
```
wgetコマンドはコマンドラインからインターネットを通じてファイルをダウンロードできるツールです。

https://qiita.com/hirohiro77/items/b774908436ec032df719

## MySQLのインストール
AL2023へMySQLをインストールする場合は、公式のMySQLリポジトリを先にインストールする必要があります。RHEL9のリポジトリをインストールしましょう。
```
 sudo dnf localinstall  https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
```
GPG 公開鍵をインポート

```
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
```

MySQLの関連パッケージをインストール
```
dnf install mysql-community-server mysql-community-client mysql-community-devel
```

https://i2bskn.com/entry/mysql_install_to_amazon_linux_2023

## 自動起動設定

```
systemctl enable httpd.service
systemctl start httpd.service
systemctl status httpd.service

systemctl enable php-fpm.service
systemctl start php-fpm.service
systemctl status php-fpm.service

systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
```

### インストールしたミドルウェアの確認
Apache
```
$ dnf list installed | grep httpd
generic-logos-httpd.noarch             18.0.0-12.amzn2023.0.3             @amazonlinux
httpd.x86_64                           2.4.59-2.amzn2023                  @amazonlinux
httpd-core.x86_64                      2.4.59-2.amzn2023                  @amazonlinux
httpd-filesystem.noarch                2.4.59-2.amzn2023                  @amazonlinux
httpd-tools.x86_64                     2.4.59-2.amzn2023                  @amazonlinux
```
PHP
```
$ dnf list installed | grep php
php8.2.x86_64                          8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-cli.x86_64                      8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-common.x86_64                   8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-devel.x86_64                    8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-fpm.x86_64                      8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-mbstring.x86_64                 8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-mysqlnd.x86_64                  8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-opcache.x86_64                  8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-pdo.x86_64                      8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-process.x86_64                  8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-sodium.x86_64                   8.2.15-1.amzn2023.0.2              @amazonlinux
php8.2-xml.x86_64                      8.2.15-1.amzn2023.0.2              @amazonlinux
```
MYSQL

```
$ dnf list installed | grep mysql
mysql-community-client.x86_64          8.0.37-1.el9                       @mysql80-community
mysql-community-client-plugins.x86_64  8.0.37-1.el9                       @mysql80-community
mysql-community-common.x86_64          8.0.37-1.el9                       @mysql80-community
mysql-community-devel.x86_64           8.0.37-1.el9                       @mysql80-community
mysql-community-icu-data-files.x86_64  8.0.37-1.el9                       @mysql80-community
mysql-community-libs.x86_64            8.0.37-1.el9                       @mysql80-community
mysql-community-server.x86_64          8.0.37-1.el9                       @mysql80-community
mysql80-community-release.noarch       el9-1                              @@commandline
php8.2-mysqlnd.x86_64                  8.2.15-1.amzn2023.0.2              @amazonlinux
```

## ドキュメントルートの所有権の変更

Apacheの初期ドキュメントルートは/var/www/htmlです。デフォルトでは root が所有者になっています。EC2へセッションマネージャーで接続している為ssm-userをapacheグループに追加し、/var/www ディレクトリの所有権を apache グループに付与します。

apacheグループにssm-userを追加
```
sudo usermod -a -G apache ssm-user
```
以下コマンドでグループに追加で来たか確認します。

```
$groups
ssm-user apache ssm-user
```
/var/www ディレクトリおよびその中のすべてのファイルとサブディレクトリの所有者を ssm-user に、グループを apache に設定します。これにより、ec2-user ユーザーがこのディレクトリに対して管理作業を行えるようになり、apache グループに属するプロセス（例えば、Apache Webサーバー）もこれらのファイルにアクセスできるようになります。
```
sudo chown -R ssm-user:apache /var/www
```

sudo chmod 2775 コマンドの中で「2」が指定するのは「セットGID（Group ID）」ビットです。
ディレクトリに適用した場合には、そのディレクトリ内で新しく作成されるファイルやサブディレクトリが、作成者のグループではなく、ディレクトリのグループ所有権を継承するようになります。
```
sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
```


参考記事

https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/ec2-lamp-amazon-linux-2023.html#install-phpmyadmin-lamp-server-2023