Amazon Linux 2023 Section 2 Apache + mariadb + PHP 構成
Section 2.3 Apache + PHP8.3
About
apache に PHP(https://www.php.net/) をセットアップしていきます。
環境は、Section 2.2を行った直後の状態からとなります。
バージョンの確認
リポジトリに登録されているものからパッケージ名とバージョンを指定してインストールすることになります。 まずは、提供されているかどうかを調べます。
[root@localhost ~]# dnf search php
================================================ 名前 & 概要 一致: php =================================================
php-pear.noarch : PHP Extension and Application Repository framework
php8.1.x86_64 : PHP scripting language for creating dynamic web sites
(略)
php8.5-tidy.x86_64 : Standard PHP 8.5 module provides tidy library support
php8.5-xml.x86_64 : A module for PHP 8.5 applications which use XML
sphinx-php.x86_64 : PHP API for Sphinx
==================================================== 名前 一致: php ====================================================
(略)
[root@localhost ~]#
PHP8.5 がリリースされていて配信されていることがわかりました。
すべての Amazon Linux 2023 パッケージ このページ内にある2023.12.YYYYMMDD リリースの Amazon Linux 2023 RPM パッケージ というところからサポート期間がわかるので、それを見てAmazon Linux 2023のサポート終了(2029 年 6 月)までサポートしてくれそうなものを選ぶのが良いでしょう。
現時点ではphp8.5がOSとしてのサポート期間を半年ほど超えてサポートしてくれるのと、Amazon Linux 2027でも入っていると思われるので、ここからサーバーを立てるとなると8.5を選択するのが無難ではないかと思います。2027年の間に予算取り、2028年に移行、2029年はPHPのアップデートという感じになるのでしょう……
インストール
php本体となにかと使うモジュールをインストールします。 不要なモジュールは入れないのが基本です。DBを使う場合でも使うDBに関連するモジュール以外は入れないように気を付けてください。今回は、mariadb を使いたいのでそのモジュールを入れます。
php が入ってないんですが……という話になりそうなパッケージの指定となっています。 php パッケージは構成定期に飾りになっているので、指定する必要はありません。 php-fpm があれば足りるのと、コマンドライン実行はphp-cliがあれば足りるので外しています。
[root@localhost ~]# dnf -y install php8.5-cli php8.5-common php8.5-fpm \
php8.5-gd php8.5-mbstring php8.5-xml php8.5-intl php8.5-zip \
php8.5-pdo php8.5-mysqlnd \
php8.5-pecl-apcu
依存関係が解決しました。
========================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
========================================================================================================================
インストール:
php8.5-cli x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 6.1 M
php8.5-fpm x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 3.1 M
php8.5-gd x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 53 k
php8.5-intl x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 194 k
php8.5-mbstring x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 539 k
php8.5-mysqlnd x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 154 k
php8.5-pdo x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 99 k
php8.5-pecl-apcu x86_64 5.1.28-1.amzn2023.0.1 amazonlinux 63 k
php8.5-xml x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 248 k
php8.5-zip x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 45 k
依存関係のインストール:
cairo x86_64 1.18.0-4.amzn2023.0.3 amazonlinux 717 k
fontconfig x86_64 2.13.94-2.amzn2023.0.2 amazonlinux 273 k
fonts-filesystem noarch 1:2.0.5-12.amzn2023.0.2 amazonlinux 9.5 k
freetype x86_64 2.13.2-5.amzn2023.0.2 amazonlinux 422 k
gd x86_64 2.3.3-5.amzn2023.0.5 amazonlinux 137 k
google-noto-fonts-common noarch 20240401-1.amzn2023.0.2 amazonlinux 17 k
google-noto-sans-vf-fonts noarch 20240401-1.amzn2023.0.2 amazonlinux 593 k
graphite2 x86_64 1.3.14-7.amzn2023.0.3 amazonlinux 97 k
harfbuzz x86_64 7.0.0-2.amzn2023.0.2 amazonlinux 873 k
jbigkit-libs x86_64 2.1-21.amzn2023.0.2 amazonlinux 54 k
langpacks-core-font-en noarch 3.0-21.amzn2023.0.4 amazonlinux 10 k
libX11 x86_64 1.8.10-2.amzn2023.0.1 amazonlinux 659 k
libX11-common noarch 1.8.10-2.amzn2023.0.1 amazonlinux 147 k
libXau x86_64 1.0.11-6.amzn2023.0.1 amazonlinux 33 k
libXext x86_64 1.3.6-1.amzn2023.0.1 amazonlinux 42 k
libXpm x86_64 3.5.17-3.amzn2023.0.2 amazonlinux 67 k
libXrender x86_64 0.9.11-6.amzn2023.0.1 amazonlinux 29 k
libicu x86_64 67.1-7.amzn2023.0.4 amazonlinux 9.6 M
libjpeg-turbo x86_64 2.1.4-2.amzn2023.0.5 amazonlinux 190 k
libpng x86_64 2:1.6.37-10.amzn2023.0.13 amazonlinux 128 k
libtiff x86_64 4.4.0-4.amzn2023.0.27 amazonlinux 211 k
libwebp x86_64 1.2.4-1.amzn2023.0.6 amazonlinux 341 k
libxcb x86_64 1.17.0-1.amzn2023.0.1 amazonlinux 235 k
libzip x86_64 1.7.3-4.amzn2023.0.3 amazonlinux 63 k
nginx-filesystem noarch 1:1.30.4-1.amzn2023.0.1 amazonlinux 10 k
oniguruma x86_64 6.9.7.1-1.amzn2023.0.2 amazonlinux 216 k
php8.5-common x86_64 8.5.9-1.amzn2023.0.1 amazonlinux 863 k
pixman x86_64 0.43.4-1.amzn2023.0.4 amazonlinux 296 k
xml-common noarch 0.6.3-56.amzn2023.0.2 amazonlinux 32 k
トランザクションの概要
========================================================================================================================
インストール 39 パッケージ
(中略)
完了しました!
[root@localhost ~]#
これでインストールできたので設定を変えます。
PHPの設定
そのままの設定では日本語などの扱いに問題が出るので設定を変更します。
主に変更する内容は下記の表の通り。
| オプション名 | uncomment | 元の内容 | 変更後の内容 |
|---|---|---|---|
| realpath_cache_size | 〇 | 4096K | 4096K |
| expose_php | On | Off | |
| memory_limit | 128M | 256M | |
| 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 256M/" \
| 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
また、PHP8.5からデフォルトから変更された設定を抜き出すコマンドができたのでそれも見ておくといいかもしれません。
[root@localhost ~]# php --ini=diff
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が表示されます。