Rocky Linux 9にPHP 8.3をRemi Repositoryからインストールする

# What's？

以前、CentOS 8向けにこういう記事を書きました。

https://qiita.com/charon/items/5727966a98609a0b71ed

これからCentOSからAlmaLinuxやRocky Linuxを使うようになったので、あらためて書いておこうかなということで。

# Remi Repositoryについて

Remi Repository自体については、こちらを参照。

https://qiita.com/charon/items/6d34ae798e9b05e8bd0a

[Which are the goals of this repository?](https://blog.remirepo.net/pages/English-FAQ#goal)

# Remi RepositoryからのPHPのインストール方法

Remi RepositoryからのPHPのインストール方法は、このあたりを参考に。

https://blog.remirepo.net/post/2024/05/17/Install-PHP-8.3-on-Fedora-RHEL-CentOS-Alma-Rocky-or-other-clone

https://blog.remirepo.net/post/2022/06/10/PHP-version-7.4.30-8.0.20-and-8.1.7

# 環境

今回の環境はこちら。Rocky Linux 9.4です。

```shell
$ cat /etc/redhat-release
Rocky Linux release 9.4 (Blue Onyx)


$ uname -srvmpio
Linux 5.14.0-427.40.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Oct 16 14:57:47 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
```

# 標準のリポジトリからインストールできるPHPのバージョンを確認する

まずはRocky Linuxの標準のリポジトリからインストールできるPHPのバージョンを確認してみましょう。

```shell
$ dnf info php
メタデータの期限切れの最終確認: 0:00:21 前の 2024年10月31日 04時06分15秒 に実施しました。
利用可能なパッケージ
名前         : php
バージョン   : 8.0.30
リリース     : 1.el9_2
Arch         : x86_64
サイズ       : 7.7 k
ソース       : php-8.0.30-1.el9_2.src.rpm
リポジトリー : appstream
概要         : PHP scripting language for creating dynamic web sites
URL          : http://www.php.net/
ライセンス   : PHP and Zend and BSD and MIT and ASL 1.0 and NCSA
説明         : PHP is an HTML-embedded scripting language. PHP attempts to make it
             : easy for developers to write dynamically generated web pages. PHP also
             : offers built-in database integration for several commercial and
             : non-commercial database management systems, so writing a
             : database-enabled webpage with PHP is fairly simple. The most common
             : use of PHP coding is probably as a replacement for CGI scripts.

```

PHP 8.0ですね。

PHPのサポートバージョンを考えると、現時点でちょっと古いです。

https://www.php.net/supported-versions.php

# Remi Repositoryを有効にして、PHP 8.3をインストールする

まずはRemi Repositoryを有効にします。

https://blog.remirepo.net/pages/Config-en

```shell
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
```

PHPモジュールをリセットします。

```shell
$ sudo dnf module reset php
```

Remi RepositoryからPHP 8.3をインストールします。

```shell
$ sudo dnf module install php:remi-8.3
```

一緒にインストールされるモジュールはこちら。

```shell
==================================================================================================================================================================================================================================================================
 パッケージ                                                       アーキテクチャー                                       バージョン                                                            リポジトリー                                                 サイズ
==================================================================================================================================================================================================================================================================
group/moduleパッケージをインストール:
 php-cli                                                          x86_64                                                 8.3.13-1.el9.remi                                                     remi-modular                                                 5.6 M
 php-common                                                       x86_64                                                 8.3.13-1.el9.remi                                                     remi-modular                                                 1.2 M
 php-fpm                                                          x86_64                                                 8.3.13-1.el9.remi                                                     remi-modular                                                 1.9 M
 php-mbstring                                                     x86_64                                                 8.3.13-1.el9.remi                                                     remi-modular                                                 581 k
 php-xml                                                          x86_64                                                 8.3.13-1.el9.remi                                                     remi-modular                                                 224 k
依存関係のインストール:
 httpd-filesystem                                                 noarch                                                 2.4.57-11.el9_4.1                                                     appstream                                                     11 k
 libxslt                                                          x86_64                                                 1.1.34-9.el9                                                          appstream                                                    240 k
 oniguruma5php                                                    x86_64                                                 6.9.9-1.el9.remi                                                      remi-safe                                                    219 k
弱い依存関係のインストール:
 nginx-filesystem                                                 noarch                                                 1:1.20.1-16.el9_4.1                                                   appstream                                                    8.1 k
モジュールプロファイルのインストール中:
 php/common
モジュールストリームの有効化中:
 php                                                                                                                     remi-8.3

```

PHP 8.3がインストールされました。

```shell
$ php --version
PHP 8.3.13 (cli) (built: Oct 22 2024 18:39:14) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.13, Copyright (c) Zend Technologies
```

Apacheやnginx向けの設定ファイルも含まれています。

```shell
$ find /etc/httpd /etc/nginx -type f
/etc/httpd/conf.d/README
/etc/httpd/conf.d/php.conf
/etc/nginx/conf.d/php-fpm.conf
/etc/nginx/default.d/php.conf
```

なお、この時点でインストールできるPHPモジュールはこちらですね。

```shell
$ dnf module list php
メタデータの期限切れの最終確認: 0:00:06 前の 2024年10月31日 04時14分21秒 に実施しました。
Rocky Linux 9 - AppStream
Name                                                  Stream                                                    Profiles                                                                    Summary
php                                                   8.1                                                       common [d], devel, minimal                                                  PHP scripting language
php                                                   8.2                                                       common [d], devel, minimal                                                  PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                                                  Stream                                                    Profiles                                                                    Summary
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
php                                                   remi-8.3                                                  common [d], devel, minimal                                                  PHP scripting language
php                                                   remi-8.4                                                  common [d], devel, minimal                                                  PHP scripting language

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

# Apacheをインストールして動作確認する

Remi RepositoryからPHPをインストールした時に、Apacheの設定ファイルが含まれていました。

```shell
$ grep -v '^ *#' /etc/httpd/conf.d/php.conf
<Files ".user.ini">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
        Satisfy All
    </IfModule>
</Files>

AddType text/html .php

DirectoryIndex index.php

<IfModule  mod_php.c>
    <FilesMatch \.(php|phar)$>
        SetHandler application/x-httpd-php
    </FilesMatch>


    php_value session.save_handler "files"
    php_value session.save_path    "/var/lib/php/session"
    php_value soap.wsdl_cache_dir  "/var/lib/php/wsdlcache"

</IfModule>

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <IfModule !mod_php.c>
      SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

      <FilesMatch \.(php|phar)$>
          SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
      </FilesMatch>
    </IfModule>
  </IfModule>
</IfModule>
```

こちらがそのまま使えそうなので、Apacheをインストールして動作確認をしてみましょう。

```shell
$ sudo dnf install httpd
```

バージョン。

```shell
$ httpd -V
Server version: Apache/2.4.57 (Rocky Linux)
Server built:   Aug  5 2024 00:00:00
Server's Module Magic Number: 20120211:127
Server loaded:  APR 1.7.0, APR-UTIL 1.6.1, PCRE 8.44 2020-02-12
Compiled using: APR 1.7.0, APR-UTIL 1.6.1, PCRE 8.44 2020-02-12
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_PROC_PTHREAD_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"
```

動作確認用のファイルを作成。

```php:/var/www/html/index.php
<?php

phpinfo();
```

PHP-FPMとApacheを起動。

```shell
$ sudo systemctl start php-fpm
$ sudo systemctl start httpd
```

あとは`http://localhost`にアクセスして、結果を確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309669/1328a01a-18fd-eca2-f724-6dbdb34d20c1.png)

OKですね。

PHP-FPMとApacheの自動起動の有効化は必要に応じて。

```shell
$ sudo systemctl enable php-fpm
$ sudo systemctl enable httpd
```