AlmaLinux9.3にPHP8.3.6をDNFでインストール

さくらのVPSにAlmaLinux9.3をインストールした覚書です。

今回は、PHPの最新版であるPHP8.3.6をインストールします。

ソースインストールではなく、 dnf インストールですので、ソースインストールをお探しの場合は下記をご覧ください。

AlmaLinux9.2にPHP8.2.10をソースインストール

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

環境

実施日2024-04-24
サーバさくらのVPS 2G
OSAlmaLinux9.3
cat /etc/redhat-release
AlmaLinux release 9.3 (Shamrock Pampas Cat)

PHP8.1のインストール

remiからインストールします。

さくらVPSにAlmaLinux9.3 をインストールして最初にすること

選択可能なバージョンを確認してみます。

dnf module list php
AlmaLinux 9 - AppStream
Name       Stream         Profiles                         Summary
php        8.1            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

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

7.4 から 8.3 までが選択できるようになっています。

ということで、PHP8.3 をインストールします。

dnf module install php:remi-8.3

ここでエラーが出る場合があります。
エラー内容で対応が変わりますので下記あてはまるところをご確認ください。

libonigのインストール

次のようなエラーが出るときは、mbstring なので oniguruma します。

エラー:
 問題: ジョブの最良アップデート候補をインストールできません
  - nothing provides libonig.so.105()(64bit) needed by php-mbstring-8.3.6-1.el9.remi.x86_64 from remi-modular
# 確認
dnf --enablerepo=remi list oniguruma*

# 鬼車をインストール
dnf --enablerepo=remi install oniguruma5php

# php をインストール
dnf module install php:remi-8.3

余談 (必要になったときに再確認します)
▼でバージョンの切り替え

dnf module reset php:remi-8.3
dnf module install php:remi-8.0

確認

バージョン

php -v

php.ini の場所

php -i | grep php.ini

php-fpm の場所

which php-fpm

php-fpm のバージョン

php-fpm -v

php-fpm の設定

現在の状態を確認

systemctl status php-fpm

起動

systemctl start php-fpm

終了

systemctl stop php-fpm

自動起動の有効化

systemctl enable php-fpm

自動起動の解除

systemctl disable php-fpm

追加モジュールのインストール

このあたりは必要に応じてインストールします
必要なければインストールしない方向がオススメです

php-zip

dnf --enablerepo=remi install php-zip

PHPを実行して、次のようなエラーが出た場合にインストールします。
zip機能を使わないPHPプログラムだとインストールしなくてもOKです。

PHP Fatal error:  Uncaught Error: Class 'ZipArchive' not found in ・・・

php-bcmath

dnf --enablerepo=remi install php-bcmath

# エラーになった場合はこちらを試す
# dnf --enablerepo=epel,remi install php-bcmath

PHPを実行して、次のようなエラーが出た場合にインストールします。
GA4を使うために composer から google/analytics-data を使う場合に必要になります。

PHP Fatal error:  Uncaught Error: Call to undefined function bccomp() in ・・・

mysql

dnf --enablerepo=remi install php-mysqlnd

gd

dnf --enablerepo=remi install php-gd

次のようなエラーが出た場合は必要なモジュールを足します

エラー:
 問題: package php-gd-8.3.6-1.el9.remi.x86_64 from remi-modular requires libgd.so.103()(64bit), but none of the providers can be installed
  - ジョブの最良アップデート候補をインストールできません
  - nothing provides libraqm.so.0()(64bit) needed by gd3php-2.3.3-8.el9.remi.x86_64 from remi
  - nothing provides libimagequant.so.0()(64bit) needed by gd3php-2.3.3-8.el9.remi.x86_64 from remi
  - nothing provides libavif.so.14()(64bit) needed by gd3php-2.3.3-8.el9.remi.x86_64 from remi
  - nothing provides libraqm.so.0()(64bit) needed by gd3php-2.3.3-9.el9.remi.x86_64 from remi
  - nothing provides libimagequant.so.0()(64bit) needed by gd3php-2.3.3-9.el9.remi.x86_64 from rem

次のように epel も付けます。

dnf --enablerepo=epel --enablerepo=remi install php-gd

image magick

dnf --enablerepo=epel install ImageMagick ImageMagick-devel

dnf install php-devel php-pear make

pecl install imagick
Please provide the prefix of Imagemagick installation [autodetect] : /usr/local/ImageMagick-6.9.12
Build process completed successfully
Installing '/usr/lib64/php/modules/imagick.so'
Installing '/usr/include/php/ext/imagick/php_imagick_shared.h'
install ok: channel://pecl.php.net/imagick-3.7.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini
vi /etc/php.ini
extension=imagick.so

アップデートでエラーが出る場合は下記を参考にしてください。

CentOS Stream 9 でImageMagickが原因でDNFのアップデートがエラーになったときの対処

その他

必要に応じて

dnf --enablerepo=remi install php-opcache
dnf --enablerepo=remi install php-pecl-apcu
dnf --enablerepo=remi install php-pear
dnf --enablerepo=remi install php-xmlrpc
dnf --enablerepo=remi install php-intl

mcrypt はPHP7.2以降で廃止されています

php.iniを設定

php.ini の変更はサーバ上で直接変更しても良いですがGit管理する方法もあります。

AlmaLinux9.3の設定管理をGitで行う

タイムゾーンを Asia/Tokyo にする

sed -i -e "s/^;date\.timezone =[^A-Za-z]*$/date.timezone =/g" /etc/php.ini
sed -i -e "s/^date\.timezone =[^A-Za-z]*$/date.timezone = Asia\/Tokyo/g" /etc/php.ini

MySQLの設定

dnf で入れた場合とソースインストールの場合で場所が変わります。
今回はDNSでインストールした場合です。

sed -i -e "s/^mysqli\.default_socket =$/mysqli.default_socket = \/var\/lib\/mysql\/mysql.sock/g" /etc/php.ini
sed -i -e "s/^pdo_mysql\.default_socket=$/pdo_mysql.default_socket = \/var\/lib\/mysql\/mysql.sock/g" /etc/php.ini

mysql.default_socket は無くなっている(mysqli でなく mysql)

php.ini の確認

grep -E 'date.timezone|default_socket' /etc/php.ini

OPcacheの設定

公式のデフォルトで設定します。
http://php.net/manual/ja/opcache.installation.php

vi /etc/php.d/10-opcache.ini

次の個所を探して ; を削除(コメントを解除)し、設定値を確認します。

;opcache.enable=・・・
;opcache.enable_cli=・・・
;opcache.memory_consumption=・・・
;opcache.interned_strings_buffer=・・・
;opcache.max_accelerated_files=・・・
;opcache.revalidate_freq=・・・

opcache.fast_shutdown はPHP7.2.0で削除

# サーバ上で直接変更する場合
sed -i -e "s/^;opcache.enable=/opcache.enable=/g" /etc/php.d/10-opcache.ini
sed -i -e "s/^;opcache.enable_cli=/opcache.enable_cli=/g" /etc/php.d/10-opcache.ini
sed -i -e "s/^;opcache.memory_consumption=/opcache.memory_consumption=/g" /etc/php.d/10-opcache.ini
sed -i -e "s/^;opcache.interned_strings_buffer=/opcache.interned_strings_buffer=/g" /etc/php.d/10-opcache.ini
sed -i -e "s/^;opcache.max_accelerated_files=/opcache.max_accelerated_files=/g" /etc/php.d/10-opcache.ini
sed -i -e "s/^;opcache.revalidate_freq=/opcache.revalidate_freq=/g" /etc/php.d/10-opcache.ini

確認

grep -E 'opcache\.enable|opcache\.enable_cli|opcache\.memory_consumption|opcache\.interned_strings_buffer|opcache\.max_accelerated_files|opcache\.revalidate_freq' /etc/php.d/10-opcache.ini

確認

php.ini

vi /etc/php.ini

バージョン

php -v
PHP 8.3.6 (cli) (built: Apr 10 2024 14:21:20) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies