公開日:2024/7/21 0:00:00

AlmaLinux 9.4 セットアップメモ

Section 5.2 Webサーバー(nginx)構築編 AppStream PHP

About

nginx(https://nginx.org/) に PHP(https://www.php.net/) をセットアップしていきます。

環境は、Section 5.1を行った直後の状態からとなります。

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

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

配信バージョンが確認出来たらどれを使うか決めてインストールします。

バージョンの切り替え

有効にするバージョンを切り替えます。

[root@localhost ~]# dnf -y module enable php:8.2
Dependencies resolved.
========================================================================================================================
 Package                     Architecture               Version                       Repository                   Size
========================================================================================================================
Enabling module streams:
 php                                                    8.2

Transaction Summary
========================================================================================================================

Complete!
[root@localhost ~]# 

インストール

php本体となにかと使うモジュールをインストールします。不要なモジュールは入れないのが基本です。DBを使う場合でも使うDBに関連するモジュール以外は入れないように気を付けてください。今回は、PostgreSQL、mariadb を使いたいのでそのモジュールを入れます。

php が入ってないんですが……という話になりそうなパッケージの指定ですが、php入れると httpd がもれなく入ってくるのと、php-fpmがあればnginx的には足りるのと、コマンドライン実行は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-pgsql php-mysqlnd \
php-pecl-apcu php-opcache

Dependencies resolved.
========================================================================================================================
 Package                         Architecture    Version                                       Repository          Size
========================================================================================================================
Installing:
 php-cli                         x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream          3.6 M
 php-common                      x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream          682 k
 php-fpm                         x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream          1.8 M
 php-gd                          x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream           40 k
 php-intl                        x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream          167 k
 php-mbstring                    x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream          521 k
 php-mysqlnd                     x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream          144 k
 php-opcache                     x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream          374 k
 php-pdo                         x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream           85 k
 php-pecl-apcu                   x86_64          5.1.23-1.module_el9.4.0+65+49ff6472           appstream           60 k
 php-pgsql                       x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream           74 k
 php-xml                         x86_64          8.2.13-1.module_el9.4.0+65+49ff6472           appstream          144 k
Installing dependencies:
 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
 gd                              x86_64          2.3.2-3.el9                                   appstream          131 k
 httpd-filesystem                noarch          2.4.57-8.el9                                  appstream           12 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.7.0-9.el9                                   appstream          645 k
 libX11-common                   noarch          1.7.0-9.el9                                   appstream          151 k
 libXau                          x86_64          1.0.9-8.el9                                   appstream           30 k
 libXpm                          x86_64          3.5.13-10.el9                                 appstream           57 k
 libjpeg-turbo                   x86_64          2.0.90-7.el9                                  appstream          174 k
 libpq                           x86_64          13.11-1.el9                                   appstream          201 k
 libtiff                         x86_64          4.4.0-12.el9                                  appstream          197 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-9.el9                                  appstream          240 k
 xml-common                      noarch          0.6.3-58.el9                                  appstream           31 k

Transaction Summary
========================================================================================================================
Install  30 Packages

(中略)
Installed:
  dejavu-sans-fonts-2.37-18.el9.noarch                        fontconfig-2.14.0-2.el9_1.x86_64
  fonts-filesystem-1:2.0.5-7.el9.1.noarch                     gd-2.3.2-3.el9.x86_64
  httpd-filesystem-2.4.57-8.el9.noarch                        jbigkit-libs-2.1-23.el9.x86_64
  langpacks-core-font-en-3.0-16.el9.noarch                    libX11-1.7.0-9.el9.x86_64
  libX11-common-1.7.0-9.el9.noarch                            libXau-1.0.9-8.el9.x86_64
  libXpm-3.5.13-10.el9.x86_64                                 libjpeg-turbo-2.0.90-7.el9.x86_64
  libpq-13.11-1.el9.x86_64                                    libtiff-4.4.0-12.el9.x86_64
  libwebp-1.2.0-8.el9_3.x86_64                                libxcb-1.13.1-9.el9.x86_64
  libxslt-1.1.34-9.el9.x86_64                                 php-cli-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64
  php-common-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64       php-fpm-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64
  php-gd-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64           php-intl-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64
  php-mbstring-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64     php-mysqlnd-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64
  php-opcache-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64      php-pdo-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64
  php-pecl-apcu-5.1.23-1.module_el9.4.0+65+49ff6472.x86_64    php-pgsql-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64
  php-xml-8.2.13-1.module_el9.4.0+65+49ff6472.x86_64          xml-common-0.6.3-58.el9.noarch

Complete!
[root@localhost ~]#

これでインストールできたので設定を変えます。

PHPの設定

そのままの設定では日本語などの扱いに問題が出るので設定を変更します。

主に変更する内容は下記の表の通り。

オプション名uncomment元の内容変更後の内容
realpath_cache_size4096k4096k
expose_phpOnOff
memory_limit128M192M
error_reportingE_ALL & ~E_DEPRECATED & ~E_STRICTE_ALL
display_errorsOffOn
post_max_size8M32M
upload_max_filesize2M20M
date.timezone”Asia/Tokyo”
mbstring.languageJapanese

説明も大変なので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_children5010
pm.max_requests500100
pm.max_spare_servers3510

上からプロセスの最大起動数プロセスを再起動する処理リクエスト数アイドル状態のプロセス最大起動数になります。「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

nginx との連携設定

nginxからphp-fpmを使うことになるので、それ用の設定を行います。基本的に動作させるユーザーがapaheになっているで、nginxに書き換えるだけです。設定ファイルは先ほど書き換えたものと同じファイルを直します。

ここもsedコマンドを使って一気に書き換えます。

[root@localhost ~]# cp --preserve=contex /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org.1
[root@localhost ~]# cat /etc/php-fpm.d/www.conf.org.1 \
| sed -E "s/(user = )(.*$)/\1 nginx/" \
| sed -E "s/(owner = )(.*$)/\1 nginx/" \
| sed -E "s/(group = )(.*$)/\1 nginx/" \
| sed -E "s/;(listen\.owner*)/\1/" \
| sed -E "s/;(listen\.group*)/\1/" \
| sed -E "s/;(listen\.mode*)/\1/" \
> /etc/php-fpm.d/www.conf
[root@localhost ~]# diff -cT /etc/php-fpm.d/www.conf.org.1 /etc/php-fpm.d/www.conf
*** /etc/php-fpm.d/www.conf.org.1   YYYY-mm-dd hh:ii:ss.000000000 +0900
--- /etc/php-fpm.d/www.conf         YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 21,29 ****
        ; Note: The user is mandatory. If the group is not set, the default user's group
        ;       will be used.
        ; RPM: apache user chosen to provide access to the same directories as httpd
!       user = apache
        ; RPM: Keep a group allowed to write in log dir.
!       group = apache

        ; The address on which to accept FastCGI requests.
        ; Valid syntaxes are:
--- 21,29 ----
        ; Note: The user is mandatory. If the group is not set, the default user's group
        ;       will be used.
        ; RPM: apache user chosen to provide access to the same directories as httpd
!       user =  nginx
        ; RPM: Keep a group allowed to write in log dir.
!       group =  nginx

        ; The address on which to accept FastCGI requests.
        ; Valid syntaxes are:
***************
*** 45,53 ****
        ; permissions must be set in order to allow connections from a web server.
        ; Default Values: user and group are set as the running user
        ;                 mode is set to 0660
!       ;listen.owner = nobody
!       ;listen.group = nobody
!       ;listen.mode = 0660

        ; When POSIX Access Control Lists are supported you can set them using
        ; these options, value is a comma separated list of user/group names.
--- 45,53 ----
        ; permissions must be set in order to allow connections from a web server.
        ; Default Values: user and group are set as the running user
        ;                 mode is set to 0660
!       listen.owner =  nginx
!       listen.group =  nginx
!       listen.mode = 0660

        ; When POSIX Access Control Lists are supported you can set them using
        ; these options, value is a comma separated list of user/group names.

nginxとの連携設定について

webアクセスでphpが動作するように連携する設定がされているので、必要があれば変更しましょう。

主に、 /etc/nginx/default.d/php.conf/etc/nginx/conf.d/php-fpm.conf が対象となります。

サービスの起動

php-fpmはサービスの一つとして常駐するようなものとなるので、サービスに登録して起動する必要があります。設定変更時にも、サービスを再起動する必要が出てくるので忘れずに。

まずは登録。

[root@localhost ~]# systemctl enable php-fpm

そのあとは、起動しつつ、nginxも再起動します。

[root@localhost ~]# systemctl start php-fpm
[root@localhost ~]# systemctl restart nginx

動作確認

phpinfo() を表示するページを準備してアクセスしてみましょう。

[root@localhost ~]# echo "<?php phpinfo();" > /var/www/html/index.php

これで、ネットワーク的に問題が無ければブラウザでアクセスすれば、phpinfoが表示されます。

今回はここまで。