AlmaLinux 9.8 セットアップメモ Section 3 Apache + mariadb + PHP 構成
Section 2.3 Apache + PHP8.3
About
apache に PHP(https://www.php.net/) をセットアップしていきます。
環境は、Section 2.2を行った直後の状態からとなります。
AppStreamのバージョン等を調べる
AppStreamのモジュールの中から使うことができるバージョン情報から確認します。
[root@localhost ~]# dnf module list php
AlmaLinux 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
php 8.3 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]#
配信バージョンが確認出来たらどれを使うか決めてインストールします。
バージョンの切り替え
有効にするバージョンを切り替えます。
[root@localhost ~]# dnf -y module enable php:8.3
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Enabling module streams:
php 8.3
Transaction Summary
========================================================================================================================
Complete!
[root@localhost ~]#
インストール
php本体となにかと使うモジュールをインストールします。不要なモジュールは入れないのが基本です。DBを使う場合でも使うDBに関連するモジュール以外は入れないように気を付けてください。今回は、mariadb を使いたいのでそのモジュールを入れます。
php が入ってないんですが……という話になりそうなパッケージの指定となっています。 php パッケージは構成定期に飾りになっているので、指定する必要はありません。 php-fpm があれば足りるのと、コマンドライン実行はphp-cliがあれば足りるので外しています。
[root@localhost ~]# dnf -y install php-cli php-common php-fpm \
php-gd php-json php-mbstring php-xml php-intl \
php-pdo php-mysqlnd \
php-pecl-apcu php-opcache
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
php-cli x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 3.7 M
php-common x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 715 k
php-fpm x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 1.9 M
php-gd x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 41 k
php-intl x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 169 k
php-mbstring x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 524 k
php-mysqlnd x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 144 k
php-opcache x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 353 k
php-pdo x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 86 k
php-pecl-apcu x86_64 5.1.23-1.module_el9.8.0+287+a9a5bb73 appstream 60 k
php-xml x86_64 8.3.32-1.module_el9.8.0+287+a9a5bb73 appstream 150 k
Installing dependencies:
capstone x86_64 4.0.2-13.el9_8 appstream 755 k
dejavu-sans-fonts noarch 2.37-18.el9 baseos 1.3 M
fontconfig x86_64 2.14.0-2.el9_1 appstream 274 k
fonts-filesystem noarch 1:2.0.5-7.el9.1 baseos 9.0 k
freetype x86_64 2.10.4-10.el9_5 baseos 385 k
gd x86_64 2.3.2-3.el9 appstream 131 k
graphite2 x86_64 1.3.14-9.el9 baseos 94 k
harfbuzz x86_64 2.7.4-10.el9 baseos 623 k
jbigkit-libs x86_64 2.1-23.el9 appstream 52 k
langpacks-core-font-en noarch 3.0-16.el9 appstream 9.4 k
libX11 x86_64 1.8.12-1.el9 appstream 647 k
libX11-common noarch 1.8.12-1.el9 appstream 144 k
libXau x86_64 1.0.9-8.el9 appstream 30 k
libXpm x86_64 3.5.13-10.el9 appstream 57 k
libicu x86_64 67.1-10.el9_6 baseos 9.6 M
libjpeg-turbo x86_64 2.0.90-7.el9 appstream 174 k
libpng x86_64 2:1.6.37-15.el9_8.2 baseos 116 k
libtiff x86_64 4.4.0-18.el9_8.1 appstream 196 k
libwebp x86_64 1.2.0-8.el9_3 appstream 276 k
libxcb x86_64 1.13.1-9.el9 appstream 225 k
libxslt x86_64 1.1.34-14.el9_8.1 appstream 240 k
nginx-filesystem noarch 2:1.20.1-28.el9_8.4.alma.1 appstream 11 k
xml-common noarch 0.6.3-58.el9 appstream 31 k
Transaction Summary
========================================================================================================================
Install 34 Packages
(中略)
Complete!
[root@localhost ~]#
これでインストールできたので設定を変えます。
PHPの設定
そのままの設定では日本語などの扱いに問題が出るので設定を変更します。
主に変更する内容は下記の表の通り。
| オプション名 | uncomment | 元の内容 | 変更後の内容 |
|---|---|---|---|
| realpath_cache_size | 〇 | 4096k | 4096k |
| expose_php | On | Off | |
| memory_limit | 128M | 192M | |
| error_reporting | E_ALL & ~E_DEPRECATED & ~E_STRICT | E_ALL | |
| display_errors | Off | On | |
| post_max_size | 8M | 32M | |
| upload_max_filesize | 2M | 20M | |
| date.timezone | 〇 | ”Asia/Tokyo” | |
| mbstring.language | 〇 | Japanese |
説明も大変なのでsedコマンドを使って一気に書き換えます。
[root@localhost ~]# cp --preserve=contex /etc/php.ini /etc/php.ini.org
[root@localhost ~]# cat /etc/php.ini.org \
| sed -E "s/;(realpath_cache_size =)(.*$)/\1 4096k/" \
| sed -E "s/(expose_php =)(.*$)/\1 Off/" \
| sed -E "s/(memory_limit =)(.*$)/\1 192M/" \
| sed -E "s/^(error_reporting =)(.*$)/\1 E_ALL/" \
| sed -E "s/(display_errors =)(.*$)/\1 On/" \
| sed -E "s/(post_max_size =)(.*$)/\1 32M/" \
| sed -E "s/(upload_max_filesize =)(.*$)/\1 20M/" \
| sed -E "s/;(date.timezone =)(.*$)/\1 \"Asia\/Tokyo\"/" \
| sed -E "s/;(mbstring.language .*)$/\1/" \
> /etc/php.ini
どのように書き換わったかは、diffを見てください。
[root@localhost ~]# diff -cT /etc/php.ini.org /etc/php.ini
PHP-FPM の設定
このままだとphp-fpmが起動するプロセス数がここで使用している仮想マシンの使用用途から考えると多すぎるので設定を修正します。
主に変更する内容は下記の表の通り。
| オプション名 | uncomment | 元の内容 | 変更後の内容 |
|---|---|---|---|
| pm.max_children | 50 | 10 | |
| pm.max_requests | 〇 | 500 | 100 |
| pm.max_spare_servers | 35 | 10 |
上からプロセスの最大起動数、プロセスを再起動する処理リクエスト数、アイドル状態のプロセス最大起動数になります。「php-fpm 設定」とかで検索すれば、場面に応じた設定が出てくると思うのでそれはそれで参考にしてください。
これもsedコマンドを使って一気に書き換えます。
[root@localhost ~]# cp --preserve=contex /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org
[root@localhost ~]# cat /etc/php-fpm.d/www.conf.org \
| sed -E "s/(pm.max_children =)(.*$)/\1 10/" \
| sed -E "s/;(pm.max_requests =)(.*$)/\1 100/" \
| sed -E "s/(pm.max_spare_servers =)(.*$)/\1 10/" \
> /etc/php-fpm.d/www.conf
[root@localhost ~]# diff -cT /etc/php-fpm.d/www.conf.org /etc/php-fpm.d/www.conf
サービスの起動
php-fpmはサービスの一つとして常駐するようなものとなるので、サービスに登録して起動する必要があります。設定変更時にも、サービスを再起動する必要が出てくるので忘れずに。
まずは登録。
[root@localhost ~]# systemctl enable php-fpm
そのあとは、起動しつつ、Apacheも再起動します。
[root@localhost ~]# systemctl start php-fpm
[root@localhost ~]# systemctl restart httpd
動作確認
phpinfo() を表示するページを準備してアクセスしてみましょう。
[root@localhost ~]# echo "<?php phpinfo();" > /var/www/html/phpinfo.php
これで、ネットワーク的に問題が無ければブラウザでアクセスすれば、phpinfoが表示されます。