AlmaLinux9.3にPHP8.3.6をDNFでインストール
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
さくらのVPSにAlmaLinux9.3をインストールした覚書です。
今回は、PHPの最新版であるPHP8.3.6をインストールします。
ソースインストールではなく、 dnf インストールですので、ソースインストールをお探しの場合は下記をご覧ください。
AlmaLinux9.2にPHP8.2.10をソースインストールなお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。
環境
実施日 | 2024-04-24 |
サーバ | さくらのVPS 2G |
OS | AlmaLinux9.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