AlmaLinux8のPHPを7.3／7.4／8.0／8.1／8.2系にバージョンアップする

# はじめに
AlmaLinux8でデフォルトでインストールできるPHPは、2022-10-04時点で```PHP7.2系```です。このほかにも7.x系のPHPや最近では8.x系のPHPも登場してきています。
ここでは、AlmaLinux8におけるPHPのバージョンアップ手順を備忘録としてまとめておきます。

# PHPのインストール元
ここでは、AlmaLinux8標準リポジトリ```AlmaLinux 8 - AppStream```ではなく、```epel```リポジトリ```remi```リポジトリを用います。たまに、PHPのモジュールが標準リポジトリでは提供されていない場合があり、これを吸収するために外部リポジトリを利用します

# アップデート手順
## 1. 外部リポジトリの追加
```bash
# epelリポジトリを追加します
dnf -y install epel-release

# remiリポジトリを追加します
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

# dnfのメタデータキャッシュを作成しておきます
dnf clean all && dnf -y makecache
```

## 2. 現在のPHPの削除
```bash
# 現在のiniファイルをバックアップしておきます
cp /etc/php.ini /etc/php.ini.bk

# phpパッケージをすべて削除します
# 削除されるパッケージを確認後 y で削除します
dnf remove php-*
```

## 3. インストールするPHPバージョンの指定
```dnf module list php```で、インストールできるPHPのモジュールリストを確認できます。
```bash
dnf module list php

#実行結果
AlmaLinux 8 - AppStream
Name                                     Stream                                      Profiles                                                      Summary                                                  
php                                      7.2 [d]                                     common [d], devel, minimal                                    PHP scripting language                                   
php                                      7.3                                         common [d], devel, minimal                                    PHP scripting language                                   
php                                      7.4                                         common [d], devel, minimal                                    PHP scripting language                                   
php                                      8.0                                         common [d], devel, minimal                                    PHP scripting language                                   

Remi s Modular repository for Enterprise Linux 8 - x86_64
Name                                     Stream                                      Profiles                                                      Summary                                                  
php                                      remi-7.2                                    common [d], devel, minimal                                    PHP scripting language                                   
php                                      remi-7.3                                    common [d], devel, minimal                                    PHP scripting language                                   
php                                      remi-7.4                                    common [d], devel, minimal                                    PHP scripting language                                   
php                                      remi-8.0                                    common [d], devel, minimal                                    PHP scripting language                                   
php                                      remi-8.1                                    common [d], devel, minimal                                    PHP scripting language                                   
php                                      remi-8.2                                    common [d], devel, minimal                                    PHP scripting language   
```
:::note info
デフォルトでは 7.2 が指定されていることがわかります。このデフォルトを指定することでインストールしたいPHPのバージョンとインストール元リポジトリを指定できます。
:::

以下のコマンドを用いてインストールするPHPバージョンとリポジトリを指定します
```bash
# remi-7.3を指定する場合
dnf -y module reset php && dnf -y module enable php:remi-7.3

# remi-7.4を指定する場合
dnf -y module reset php && dnf -y module enable php:remi-7.4

# remi-8.0を指定する場合
dnf -y module reset php && dnf -y module enable php:remi-8.0

# remi-8.1を指定する場合
dnf -y module reset php && dnf -y module enable php:remi-8.1

# remi-8.2を指定する場合
dnf -y module reset php && dnf -y module enable php:remi-8.2

# 指定したものをリセットしたい場合
dnf -y module reset php
```

## 4. PHPのインストール（バージョンアップ）
```bash
# phpをインストールします
dnf -y install php php-cli php-fpm php-devel php-pear php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml php-dom php-redis php-memcached php-memcache php-process
```
:::note info
主要なPHPモジュールを列挙していますが、不要なものは消してからインストールしてみてください
:::

## 5. インストールされたPHPバージョンの確認
```bash
php -v

#実行結果
PHP 7.4.32 (cli) (built: Sep 28 2022 09:09:55) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.32, Copyright (c), by Zend Technologies
```

## 6. php.iniの設定投入
```bash
vim /etc/php.ini

# 以下は例です
memory_limit = 2G                     #RAM容量にあわせて調整してください
error_log = /var/log/php_errors.log   #phpエラーログファイルパスを指定する
post_max_size = 300M                  #利用目的にあわせて調整してください
upload_max_filesize = 300M            #利用目的にあわせて調整してください
date.timezone = Asia/Tokyo            #コメントアウトを外して、Asia/Tokyoを指定してください
mbstring.language = Japanese　　　　　　　　　　　　　　　　　　　　#コメントアウトを外してください
```
:::note warn
バックアップしたphp.ini.bkを参考に設定を投入するようにしてください
:::

## 7. PHP-FPMの設定
```bash
# php-fpmを自動起動するようにしておきます
systemctl enable php-fpm
```

## 8. Apacheへの読み込み
```bash
# phpのバージョンが変わったのでApacheを再起動して反映させます
# あわせてphp-fpmも再起動（起動）させます
systemctl restart httpd && systemctl restart php-fpm
```

## 9. PHPの動作確認
```/var/www/html```のドキュメントルートに```phpinfo()```を表示させるphpファイルを作成します
```bash
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
```

ブラウザを開いて、動作確認用のphpファイルにアクセスします。指定したバージョンのPHPが表示されることを確認してください。

# おわりに
CentOS7ではリポジトリ名を指定しつつphpをインストールさせなくてはならなかったですが、```dnf module enable php:****```で、デフォルトのバージョンやリポジトリを指定できますので、少し楽になりそうな感触でした。
ただ、まだPHP8.x系に対応していないOSSもあるので、バージョンアップの際はPHPのバージョンに気をつけて行いましょう。