nginx + PHPをバージョンを指定してインストールする

Raspberry Pi Web  サーバーの構築
nginx + WordPress
PHPをバージョンを指定してインストール
 
PHPの新しいバージョンには、新しい機能やパフォーマンスの向上が含まれている。WordPressや他のアプリケーションで新しいPHPのバージョンが推奨されることがあるが、Raspberry Pi OS の「デフォルトのパッケージリポジトリ」の下では最新バージョンのPHPをインストールする事が出来ない。
 
PHP公式サイトで、最新版のPHPを確認する
 
以下に、nginx で WordPress を稼働させるために必要な「最新のPHP」をインストールする方法とその注意点をまとめた。
 
 

 

スポンサー リンク

 

 
 
 
 
 
1. WordPressに必要なPHPモジュール
 
WordPressをNginxで稼働させるために必要なPHPモジュール。
 
①. php-fpm(PHP FastCGI Process Manager)
NginxはFastCGIを使用してPHPを処理するため、php-fpmが必要。
 
②. php-mysql
WordPressはデータベースとしてMySQL(またはMariaDB)を使用する。
 
③. php-curl
外部APIとの通信や更新チェックで使用される。
 
④. php-gd
画像の処理(サムネイル生成など)で必要。
 
⑤. php-xml
WordPressのXML関連機能やテーマ・プラグインのインストール時に使用される。
 
⑥. php-mbstring
マルチバイト文字列の処理(特に日本語環境)に必要。
 
⑦. php-zip
プラグインやテーマのインストール・更新でZIPファイルを扱うために必要。
 
⑧. php-soap
特定のプラグインでSOAP通信が必要な場合に使う。
 
⑨. php-intl
国際化機能や言語関連の機能を強化するために使用される。
 
⑩. php-bcmath
任意の精度で浮動小数点の計算を行うための関数群。
 
⑪. php-imagick
PHPからImageMagick APIを使って画像ファイルの作成・編集を行う。
 
※:php-json:WordPressのコア機能でJSONの処理が使用される。
は、依存関係で自動的にインストールされる。
 
 
 
2. sudo apt install php を実行してはならない
 
sudo apt install php を実行すると、Apacheも一緒にインストールされる
 
php パッケージは「メタパッケージ」であり、次のような役割を持つ。
・システムにインストールされるPHPのデフォルトバージョン(例:php8.2 や php8.3)を決定する。
・Apache用モジュール(libapache2-mod-php)を依存関係として持つ。
このため、sudo apt install php を実行すると、libapache2-mod-php がインストールされ、結果的にApacheもインストールされる。
 
apache2 がインストールされると、nginx の起動で次のエラーが出る。
sudo systemctl restart nginx
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.
 
エラーログを見ると、ポート80 が他のプロセスで使用中になっている。
sudo cat /var/log/nginx/error.log
[emerg] 2297#2297: bind() to 0.0.0.0:80 failed (98: Address already in use)
 
使用中のプロセスを確認すると、次のように表示される。
sudo netstat -tuln | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN
 
ポート80を使用しているプロセスを特定する。
sudo lsof -i :80
ポート80を使用しているプロセスを特定する
 
原因は apache2 がリッスンしていました。
 
以上のように、sudo apt install php を実行すると、Apacheも一緒にインストールされ、思わぬ問題が発生することがある。
 
 
■ Apache2を削除する方法
 
①. Apache2を停止する
sudo systemctl stop apache2
 
②. 自動起動を無効化する
sudo systemctl disable apache2
 
③. Apache2をアンインストールする
sudo apt-get remove --purge apache2 -y
sudo apt-get autoremove -y
sudo apt-get autoclean
 
④. 残存ファイルの削除
sudo rm -rf /etc/apache2
sudo rm -rf /var/www/html
 
 
 
3. php-fpm のインストールについて
 
Nginx環境でWordPressを動かす場合は、
php-fpmをインストールするだけで十分である。
 
sudo apt install php を実行するとApache用のモジュールも一緒にインストールされるため、Nginxだけを使う場合は不要なコンポーネントが含まれる。
 
php-fpm をインストールすると、PHP自体も同時にインストールされるが、php パッケージをインストールする場合とは内容が異なる。
 
php-fpm をインストールすると、以下がインストールされる。
 
①. PHP FastCGI Process Manager (FPM)
PHPをFastCGIとして実行するためのプロセスマネージャーで、主にNginx環境で使用され、リクエストごとにFastCGIを通じてPHPを実行する。
 
②. 共通モジュールと設定ファイル
基本的なPHPモジュール(php-common)が含まれる。
 
③. PHP自体(CLIも含む)
CLI版のPHPも一緒にインストールされる。これにより、php コマンドも利用可能となる。
 
php と php-fpm の違い。
php と php-fpm の違い
 
 
 
4. sudo apt install php8.3 の意味
 
PHPのバージョン【8.3】を明示して、
 sudo apt install php8.3
を実行した場合に、Apacheが自動的にインストールされることはない。
 
次のコンポーネントがインストールされる。
 
①. PHP CLI
PHPのコマンドラインインターフェース(CLI)が含まれ、php8.3 コマンドが利用可能になりる。
 
②. 共通モジュール
PHPの動作に必要な基本モジュール(php8.3-common)が含まれる。
 
③. Apache用のモジュール(libapache2-mod-php8.3)
デフォルトではApache用のモジュールもインストールされるが、Nginx環境では使われない。
 
異なるPHPバージョンを同時にインストールすることも可能。
例:sudo apt install php7.4 php8.3
 
 
 
5. リポジトリの追加とPHPのインストール
 
PHPの公式サイトで、最新のPHPバージョンを確認する。
PHP公式サイトで、最新版のPHPを確認する
 
Raspberry Pi OS bookworm の、デフォルトのパッケージリポジトリの下で、インストールされるPHPのバージョンを確認してみる。
sudo apt-cache policy php
php:
  インストールされているバージョン: (なし)
  候補:               2:8.2+93
  バージョンテーブル:
     2:8.2+93 500
        500 http://deb.debian.org/debian bookworm/main arm64 Packages
        500 http://deb.debian.org/debian bookworm/main armhf Packages

sudo apt depends php
php
  依存: php8.2

apt-cache madison php
       php |   2:8.2+93 | http://deb.debian.org/debian bookworm/main arm64 Packages
       php |   2:8.2+93 | http://deb.debian.org/debian bookworm/main armhf Packages
 
バージョン 8.2 が候補になっている。
 
 
リポジトリを追加して、PHPの最新バージョンをインストールする
 
①. GPGキーのダウンロード
sudo wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
 
②. パッケージリストにPHPのリポジトリを追加
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
 
③. パッケージリストを更新
sudo apt update
 
④. インストール可能なPHPのバージョンを確認
sudo apt-cache policy php
php:
  インストールされているバージョン: (なし)
  候補:               2:8.3+95+0~20240927.54+debian12~1.gbpe0084c
  バージョンテーブル:
     2:8.3+95+0~20240927.54+debian12~1.gbpe0084c 500
        500 https://packages.sury.org/php bookworm/main arm64 Packages
        500 https://packages.sury.org/php bookworm/main armhf Packages
     2:8.2+93 500
        500 http://deb.debian.org/debian bookworm/main arm64 Packages
        500 http://deb.debian.org/debian bookworm/main armhf Packages

sudo apt depends php
php
  依存: php8.3

apt-cache madison php
       php | 2:8.3+95+0~20240927.54+debian12~1.gbpe0084c | https://packages.sury.org/php bookworm/main arm64 Packages
       php | 2:8.3+95+0~20240927.54+debian12~1.gbpe0084c | https://packages.sury.org/php bookworm/main armhf Packages
       php |   2:8.2+93 | http://deb.debian.org/debian bookworm/main arm64 Packages
       php |   2:8.2+93 | http://deb.debian.org/debian bookworm/main armhf Packages
 
バージョン 8.2 と 8.3 が候補になった。
 
 
⑤. PHPのバージョンを明示8.3してインストール
sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-xml php8.3-curl php8.3-gd php8.3-mbstring php8.3-zip php8.3-soap php8.3-intl php8.3-bcmath php8.3-imagick
 
PHPのモジュールが正しくインストールされているか確認する。
php -m
[PHP Modules]
bcmath
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
hash
iconv
imagick
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
random
readline
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache
 
PHPのバージョンを確認。
php -v
PHP 8.3.17 (cli) (built: Feb 15 2025 09:04:04) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.17, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.17, Copyright (c), by Zend Technologies
 
PHP 8.3 のみがインストールされる。
 
 
-------------------------------------------------------------------------------------
 
PHPのバージョンを明示せずにインストールした場合。
sudo apt install php-fpm php-mysql php-json php-xml php-curl php-gd php-mbstring php-zip php-soap php-intl php-bcmath php-imagick
 
※:PHPのバージョンを明示【8.3】してインストールした時より、インストールされるモジュール数が大幅に少なくなった。
 
PHPのバージョンを確認すると、【8.4.4】と表示される。
php -v
PHP 8.4.4 (cli) (built: Feb 15 2025 09:04:02) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.4, Copyright (c), by Zend Technologies
 
php のディレクトリーを見ると、8.3 と 8.4 がインストールされている。
php のディレクトリーを見ると、8.3 と 8.4 がインストールされている
 
 8.4 のディレクトリーには fpm ディレクトリーが無い。
 8.4 のディレクトリーには fpm ディレクトリーが無い
 
 
 
6. 複数バージョンの切り替えとアンインストール
 
1. 複数のPHPがインストールされている場合の、バージョンの切り替え。
sudo update-alternatives --config php
 
現在のバージョンを調べて、切り替えた例。
php -v
PHP 8.4.4 (cli) (built: Feb 15 2025 09:04:02) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.4, Copyright (c), by Zend Technologies

sudo update-alternatives --config php
alternative php (/usr/bin/php を提供) には 2 個の選択肢があります。

  選択肢    パス           優先度  状態
------------------------------------------------------------
  0            /usr/bin/php8.4   84        自動モード
* 1            /usr/bin/php8.3   83        手動モード
  2            /usr/bin/php8.4   84        手動モード

現在の選択 [*] を保持するには 、さもなければ選択肢の番号のキーを押してください: 

または
sudo update-alternatives --set php /usr/bin/php8.3
update-alternatives: /usr/bin/php (php) を提供するためにマニュアルモードで /usr/bin/php8.3 を使います

 php -v
PHP 8.3.17 (cli) (built: Feb 15 2025 09:04:04) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.17, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.17, Copyright (c), by Zend Technologies
 
2. PHPのアンインストール。
sudo apt remove --purge php* -y
sudo apt autoremove -y
 
 
以上。
(2025.02.23)
 

 

スポンサー リンク

 

             

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.