CentOS Steam 9 に WordPress 環境を一から作る

Alibaba Cloud の Simple Application Server(以下、SASと記載) の Linux インスタンス上に WordPress 環境を一から作る話です。 元々は SAS で標準提供されている WordPress イメージで簡単かつ短時間で WordPress 環境を立ち上げたのですが MySQL や PHP のバージョンが古くすでに EOL を迎えていることがわかりました(こちらの記事)。 不特定多数への Web サイトのインターネット公開という利用目的なのでセキュリティ対策を十分に行えないのはよろしくありません。 というわけで Apache や MySQL 、PHP 含めて一から環境構築します。  定期的に各ソフトウェアのバージョンアップも今後行っていくと思うので初期構築の内容を自分のために残していきます。

構築する LAMP 環境について

以下の環境を構築していきます。

項目内容備考
仮想マシンAlibaba Cloud
Simple Application Server
既に構築済(記事
LinuxCentOS Stream 9既に構築済(記事
Apache2.4.57今回の記事の対象
MySQL8.0.36今回の記事の対象
PHP8.3.6今回の記事の対象
WordPress6.5.2今回の記事の対象

CentOS Stream 9 の最新化

まずは環境を最新化します。 “dnf update” を実行します。 本当は root での実行はよろしくないのですが個人環境で sudo 使うのは面倒で root で作業しています(以下同)。

先日、最新化済ということもあり Nothing to do でした。

# dnf update
CentOS Stream 9 - BaseOS                         17 kB/s | 3.9 kB     00:00
CentOS Stream 9 - AppStream                      21 kB/s | 4.4 kB     00:00
CentOS Stream 9 - Extras packages                16 kB/s | 3.0 kB     00:00
Dependencies resolved.
Nothing to do.
Complete!

Apache のインストール

“dnf install httpd” を実行します。

# dnf install httpd
Last metadata expiration check: 0:02:44 ago on Sat 20 Apr 2024 03:53:04 PM CST.
Dependencies resolved.
================================================================================
 Package                  Architecture Version            Repository       Size
================================================================================
Installing:
 httpd                    x86_64       2.4.57-8.el9       appstream        48 k
Installing dependencies:
 apr                      x86_64       1.7.0-12.el9       appstream       123 k
 apr-util                 x86_64       1.6.1-23.el9       appstream        95 k
 apr-util-bdb             x86_64       1.6.1-23.el9       appstream        13 k
 centos-logos-httpd       noarch       90.4-1.el9         appstream       252 k
 httpd-core               x86_64       2.4.57-8.el9       appstream       1.5 M
 httpd-filesystem         noarch       2.4.57-8.el9       appstream        13 k
 httpd-tools              x86_64       2.4.57-8.el9       appstream        83 k
Installing weak dependencies:
 apr-util-openssl         x86_64       1.6.1-23.el9       appstream        15 k
 mod_http2                x86_64       2.0.26-1.el9       appstream       163 k
 mod_lua                  x86_64       2.4.57-8.el9       appstream        60 k

Transaction Summary
================================================================================
Install  11 Packages

Total download size: 2.4 M
Installed size: 6.4 M
Is this ok [y/N]: y
Downloading Packages:
(1/11): apr-util-bdb-1.6.1-23.el9.x86_64.rpm     77 kB/s |  13 kB     00:00
(2/11): apr-util-1.6.1-23.el9.x86_64.rpm        345 kB/s |  95 kB     00:00
(3/11): apr-1.7.0-12.el9.x86_64.rpm             409 kB/s | 123 kB     00:00
(4/11): apr-util-openssl-1.6.1-23.el9.x86_64.rp 107 kB/s |  15 kB     00:00
(5/11): httpd-2.4.57-8.el9.x86_64.rpm           321 kB/s |  48 kB     00:00
(6/11): centos-logos-httpd-90.4-1.el9.noarch.rp 1.2 MB/s | 252 kB     00:00
(7/11): httpd-core-2.4.57-8.el9.x86_64.rpm      7.9 MB/s | 1.5 MB     00:00
(8/11): httpd-filesystem-2.4.57-8.el9.noarch.rp  82 kB/s |  13 kB     00:00
(9/11): httpd-tools-2.4.57-8.el9.x86_64.rpm     628 kB/s |  83 kB     00:00
(10/11): mod_lua-2.4.57-8.el9.x86_64.rpm        330 kB/s |  60 kB     00:00
(11/11): mod_http2-2.0.26-1.el9.x86_64.rpm      354 kB/s | 163 kB     00:00
--------------------------------------------------------------------------------
Total                                           2.4 MB/s | 2.4 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : apr-1.7.0-12.el9.x86_64                               1/11
  Installing       : apr-util-bdb-1.6.1-23.el9.x86_64                      2/11
  Installing       : apr-util-openssl-1.6.1-23.el9.x86_64                  3/11
  Installing       : apr-util-1.6.1-23.el9.x86_64                          4/11
  Installing       : httpd-tools-2.4.57-8.el9.x86_64                       5/11
  Running scriptlet: httpd-filesystem-2.4.57-8.el9.noarch                  6/11
  Installing       : httpd-filesystem-2.4.57-8.el9.noarch                  6/11
  Installing       : httpd-core-2.4.57-8.el9.x86_64                        7/11
  Installing       : mod_lua-2.4.57-8.el9.x86_64                           8/11
  Installing       : centos-logos-httpd-90.4-1.el9.noarch                  9/11
  Installing       : mod_http2-2.0.26-1.el9.x86_64                        10/11
  Installing       : httpd-2.4.57-8.el9.x86_64                            11/11
  Running scriptlet: httpd-2.4.57-8.el9.x86_64                            11/11
  Verifying        : apr-1.7.0-12.el9.x86_64                               1/11
  Verifying        : apr-util-1.6.1-23.el9.x86_64                          2/11
  Verifying        : apr-util-bdb-1.6.1-23.el9.x86_64                      3/11
  Verifying        : apr-util-openssl-1.6.1-23.el9.x86_64                  4/11
  Verifying        : centos-logos-httpd-90.4-1.el9.noarch                  5/11
  Verifying        : httpd-2.4.57-8.el9.x86_64                             6/11
  Verifying        : httpd-core-2.4.57-8.el9.x86_64                        7/11
  Verifying        : httpd-filesystem-2.4.57-8.el9.noarch                  8/11
  Verifying        : httpd-tools-2.4.57-8.el9.x86_64                       9/11
  Verifying        : mod_http2-2.0.26-1.el9.x86_64                        10/11
  Verifying        : mod_lua-2.4.57-8.el9.x86_64                          11/11

Installed:
  apr-1.7.0-12.el9.x86_64                apr-util-1.6.1-23.el9.x86_64
  apr-util-bdb-1.6.1-23.el9.x86_64       apr-util-openssl-1.6.1-23.el9.x86_64
  centos-logos-httpd-90.4-1.el9.noarch   httpd-2.4.57-8.el9.x86_64
  httpd-core-2.4.57-8.el9.x86_64         httpd-filesystem-2.4.57-8.el9.noarch
  httpd-tools-2.4.57-8.el9.x86_64        mod_http2-2.0.26-1.el9.x86_64
  mod_lua-2.4.57-8.el9.x86_64

Complete!

Apache の自動起動を設定します。 最初に systemctl status で状態を確認します(disabledなこと)。 その後に enable して start して、最後に status で enabled になったことを確認します。 本当は OS を再起動して自動起動するか確認するとよいですがそれは一番最後にまとめてやることにします。

# systemctl status httpd.service
○ httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: d>
     Active: inactive (dead)
       Docs: man:httpd.service(8)

# systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

# systemctl start httpd.service

# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: di>
     Active: active (running) since Sat 2024-04-20 16:04:10 CST; 2s ago
       Docs: man:httpd.service(8)
   Main PID: 93957 (httpd)
     Status: "Started, listening on: port 80"
      Tasks: 177 (limit: 4330)
     Memory: 22.6M
        CPU: 94ms
     CGroup: /system.slice/httpd.service
             ├─93957 /usr/sbin/httpd -DFOREGROUND
             ├─93958 /usr/sbin/httpd -DFOREGROUND
             ├─93959 /usr/sbin/httpd -DFOREGROUND
             ├─93960 /usr/sbin/httpd -DFOREGROUND
             └─93961 /usr/sbin/httpd -DFOREGROUND

Apr 20 16:04:10 iZ6wecejxdhbz99rwzywmpZ systemd[1]: Starting The Apache HTTP Se>
Apr 20 16:04:10 iZ6wecejxdhbz99rwzywmpZ httpd[93957]: AH00558: httpd: Could not>
Apr 20 16:04:10 iZ6wecejxdhbz99rwzywmpZ systemd[1]: Started The Apache HTTP Ser>
Apr 20 16:04:10 iZ6wecejxdhbz99rwzywmpZ httpd[93957]: Server configured, listen

Web ブラウザから Alibaba Cloud Simple Application Server に割り当てられた Public IP アドレスにアクセスします。

“HTTP Server TEST PAGE” と Apache の初期ページが表示されることを確認します。 

MySQL のインストール

# dnf install mysql-server
Last metadata expiration check: 0:18:23 ago on Sat 20 Apr 2024 03:53:04 PM CST.
Dependencies resolved.
================================================================================
 Package                       Arch      Version             Repository    Size
================================================================================
Installing:
 mysql-server                  x86_64    8.0.36-1.el9        appstream     17 M
Installing dependencies:
 mariadb-connector-c-config    noarch    3.2.6-1.el9         appstream     11 k
 mecab                         x86_64    0.996-3.el9.4       appstream    356 k
 mysql                         x86_64    8.0.36-1.el9        appstream    2.8 M
 mysql-common                  x86_64    8.0.36-1.el9        appstream     74 k
 mysql-errmsg                  x86_64    8.0.36-1.el9        appstream    505 k
 mysql-selinux                 noarch    1.0.10-1.el9        appstream     37 k
 protobuf-lite                 x86_64    3.14.0-13.el9       appstream    232 k

Transaction Summary
================================================================================
Install  8 Packages

Total download size: 21 M
Installed size: 179 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): mariadb-connector-c-config-3.2.6-1.el9.n  60 kB/s |  11 kB     00:00
(2/8): mysql-8.0.36-1.el9.x86_64.rpm             11 MB/s | 2.8 MB     00:00
(3/8): mysql-common-8.0.36-1.el9.x86_64.rpm     292 kB/s |  74 kB     00:00
(4/8): mecab-0.996-3.el9.4.x86_64.rpm           702 kB/s | 356 kB     00:00
(5/8): mysql-selinux-1.0.10-1.el9.noarch.rpm    212 kB/s |  37 kB     00:00
(6/8): protobuf-lite-3.14.0-13.el9.x86_64.rpm   1.2 MB/s | 232 kB     00:00
(7/8): mysql-errmsg-8.0.36-1.el9.x86_64.rpm     938 kB/s | 505 kB     00:00
(8/8): mysql-server-8.0.36-1.el9.x86_64.rpm      12 MB/s |  17 MB     00:01
--------------------------------------------------------------------------------
Total                                            11 MB/s |  21 MB     00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : mariadb-connector-c-config-3.2.6-1.el9.noarch          1/8
  Installing       : mysql-common-8.0.36-1.el9.x86_64                       2/8
  Installing       : mysql-8.0.36-1.el9.x86_64                              3/8
  Installing       : mysql-errmsg-8.0.36-1.el9.x86_64                       4/8
  Installing       : protobuf-lite-3.14.0-13.el9.x86_64                     5/8
  Running scriptlet: mysql-selinux-1.0.10-1.el9.noarch                      6/8
  Installing       : mysql-selinux-1.0.10-1.el9.noarch                      6/8
  Running scriptlet: mysql-selinux-1.0.10-1.el9.noarch                      6/8
libsemanage.semanage_direct_install_info: Overriding mysql module at lower priority 100 with module at priority 200.

  Installing       : mecab-0.996-3.el9.4.x86_64                             7/8
  Running scriptlet: mysql-server-8.0.36-1.el9.x86_64                       8/8
  Installing       : mysql-server-8.0.36-1.el9.x86_64                       8/8
  Running scriptlet: mysql-server-8.0.36-1.el9.x86_64                       8/8
  Running scriptlet: mysql-selinux-1.0.10-1.el9.noarch                      8/8
  Running scriptlet: mysql-server-8.0.36-1.el9.x86_64                       8/8
  Verifying        : mariadb-connector-c-config-3.2.6-1.el9.noarch          1/8
  Verifying        : mecab-0.996-3.el9.4.x86_64                             2/8
  Verifying        : mysql-8.0.36-1.el9.x86_64                              3/8
  Verifying        : mysql-common-8.0.36-1.el9.x86_64                       4/8
  Verifying        : mysql-errmsg-8.0.36-1.el9.x86_64                       5/8
  Verifying        : mysql-selinux-1.0.10-1.el9.noarch                      6/8
  Verifying        : mysql-server-8.0.36-1.el9.x86_64                       7/8
  Verifying        : protobuf-lite-3.14.0-13.el9.x86_64                     8/8

Installed:
  mariadb-connector-c-config-3.2.6-1.el9.noarch
  mecab-0.996-3.el9.4.x86_64
  mysql-8.0.36-1.el9.x86_64
  mysql-common-8.0.36-1.el9.x86_64
  mysql-errmsg-8.0.36-1.el9.x86_64
  mysql-selinux-1.0.10-1.el9.noarch
  mysql-server-8.0.36-1.el9.x86_64
  protobuf-lite-3.14.0-13.el9.x86_64

Complete!

dnf コマンド実行時のログは上記の通りなのですが mariadb-connector-c-config という PKG がインストールされています。 CentOS 9 は初めて使う状態で知見もないので Google Gemini に聞いてみます。

bigriver.jp
bigriver.jp

CentOS stream9 に MySQL をインストールしました。 以下がその際の dnf コマンドの実行結果です。 Mariadb が含まれている理由を教えてください。

# dnf install mysql-server 

(以下略)

Gemini
Gemini

CentOS Stream 9 に MySQL をインストールすると MariaDB がインストールされる理由
CentOS Stream 9 で dnf install mysql-server コマンドを実行すると、MariaDBが一緒にインストールされるのは、CentOS Stream 9がデフォルトでMySQLではなくMariaDBを採用しているためです。

MariaDBがデフォルトとなった理由

コミュニティ主導の開発: MariaDBは、MySQLのオリジナル開発者であるMonty Widenius氏と活発なオープンソースコミュニティによって開発されています。そのため、継続的な開発が保証されており、OracleによるMySQL買収後に発生したようなライセンス問題のリスクがありません。

機能と性能: MariaDBは、標準のMySQLよりも革新的な機能やパフォーマンス上の利点を備えていることが多く、多くの場合で互換性も保たれています。

今回のインストール内容

今回インストールしたmysql-serverパッケージには、MariaDBの実装が含まれています。また、MySQLのツールやクライアントライブラリの中には、mariadb-connector-c-configのようなMariaDBコンポーネントに依存しているものがあります。

影響

機能性: MariaDBはMySQLとほぼ互換性があるため、ほとんどの場合、MySQLと同様に使用することができます。
潜在的なわずかな違い: より高度なユースケースや特殊なシナリオでは、MariaDBとOracle版MySQL間で些細な違いや追加機能が存在する場合があります。

参考情報

CentOS Stream 9におけるMariaDBの詳細: [無効な URL を削除しました]
MariaDB公式サイト: https://mariadb.org/
MySQLとの互換性: [無効な URL を削除しました]
その他

MariaDBとMySQLの関係や、具体的な違いについて詳しく知りたい場合は、お気軽にお尋ねください。

Gemini からの回答が正しいとすると CentOS Stream 9 のデフォルトは MySQL ではなく MariaDB となっていてリポジトリからインストールされた mysql-server は MariaDB の実装も含まれるとのこと。 MySQL と MariaDB は全く同じではないことは知っていますがとりあえず作業を進めることにします。 個人のブログ用の WordPress なので動けばよいので作業を進めてみて動かなければまた考えることにします。

Apache の時と同様にサービスの自動起動の設定を行います。

# systemctl status mysqld
○ mysqld.service - MySQL 8.0 database server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; preset: >
     Active: inactive (dead)

# systemctl enable mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.

# systemctl start mysqld

# systemctl status mysqld
● mysqld.service - MySQL 8.0 database server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: d>
     Active: active (running) since Sat 2024-04-20 16:24:33 CST; 7s ago
    Process: 94611 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, s>
    Process: 94633 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.servic>
   Main PID: 94710 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 4330)
     Memory: 366.9M
        CPU: 5.601s
     CGroup: /system.slice/mysqld.service
             └─94710 /usr/libexec/mysqld --basedir=/usr

Apr 20 16:24:26 iZ6wecejxdhbz99rwzywmpZ systemd[1]: Starting MySQL 8.0 database>
Apr 20 16:24:26 iZ6wecejxdhbz99rwzywmpZ mysql-prepare-db-dir[94633]: Initializi>
Apr 20 16:24:33 iZ6wecejxdhbz99rwzywmpZ systemd[1]: Started MySQL 8.0 database

セキュリティ強化のために mysql_secure_installation を実行します。

# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Please set the password for root here.

New password: **********

Re-enter new password: **********

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

MySQL にログインできることを確認します。

# mysql -u root -p
Enter password: **********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.36 Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

PHP のインストール

php をインストールします。 まず、WordPress が立ち上がる最低限として php と php-mysqld の2つをインストールします。 おそらく他に GD とか求められるとは思いますがそれは WordPress が立ち上がってから WordPress の管理画面のサイトヘルスから確認しながら適宜対応することにします。

# dnf install php php-mysqlnd
Last metadata expiration check: 0:55:57 ago on Sat 20 Apr 2024 03:53:04 PM CST.
Dependencies resolved.
================================================================================
 Package                Architecture Version              Repository       Size
================================================================================
Installing:
 php                    x86_64       8.0.30-1.el9         appstream       4.7 k
 php-mysqlnd            x86_64       8.0.30-1.el9         appstream       150 k
Installing dependencies:
 nginx-filesystem       noarch       1:1.22.1-2.el9       appstream        12 k
 php-common             x86_64       8.0.30-1.el9         appstream       681 k
 php-pdo                x86_64       8.0.30-1.el9         appstream        82 k
Installing weak dependencies:
 php-cli                x86_64       8.0.30-1.el9         appstream       3.1 M
 php-fpm                x86_64       8.0.30-1.el9         appstream       1.6 M
 php-mbstring           x86_64       8.0.30-1.el9         appstream       469 k
 php-opcache            x86_64       8.0.30-1.el9         appstream       510 k
 php-xml                x86_64       8.0.30-1.el9         appstream       133 k

Transaction Summary
================================================================================
Install  10 Packages

Total download size: 6.7 M
Installed size: 36 M
Is this ok [y/N]: y
Downloading Packages:
(1/10): nginx-filesystem-1.22.1-2.el9.noarch.rp  56 kB/s |  12 kB     00:00
(2/10): php-8.0.30-1.el9.x86_64.rpm              22 kB/s | 4.7 kB     00:00
(3/10): php-common-8.0.30-1.el9.x86_64.rpm      3.5 MB/s | 681 kB     00:00
(4/10): php-fpm-8.0.30-1.el9.x86_64.rpm         7.6 MB/s | 1.6 MB     00:00
(5/10): php-cli-8.0.30-1.el9.x86_64.rpm         5.9 MB/s | 3.1 MB     00:00
(6/10): php-mbstring-8.0.30-1.el9.x86_64.rpm    3.2 MB/s | 469 kB     00:00
(7/10): php-pdo-8.0.30-1.el9.x86_64.rpm         573 kB/s |  82 kB     00:00
(8/10): php-opcache-8.0.30-1.el9.x86_64.rpm     2.7 MB/s | 510 kB     00:00
(9/10): php-mysqlnd-8.0.30-1.el9.x86_64.rpm     383 kB/s | 150 kB     00:00
(10/10): php-xml-8.0.30-1.el9.x86_64.rpm        873 kB/s | 133 kB     00:00
--------------------------------------------------------------------------------
Total                                           7.8 MB/s | 6.7 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : php-common-8.0.30-1.el9.x86_64                        1/10
  Installing       : php-pdo-8.0.30-1.el9.x86_64                           2/10
  Installing       : php-cli-8.0.30-1.el9.x86_64                           3/10
  Installing       : php-mbstring-8.0.30-1.el9.x86_64                      4/10
  Installing       : php-opcache-8.0.30-1.el9.x86_64                       5/10
  Installing       : php-xml-8.0.30-1.el9.x86_64                           6/10
  Running scriptlet: nginx-filesystem-1:1.22.1-2.el9.noarch                7/10
  Installing       : nginx-filesystem-1:1.22.1-2.el9.noarch                7/10
  Installing       : php-fpm-8.0.30-1.el9.x86_64                           8/10
  Running scriptlet: php-fpm-8.0.30-1.el9.x86_64                           8/10
  Installing       : php-8.0.30-1.el9.x86_64                               9/10
  Installing       : php-mysqlnd-8.0.30-1.el9.x86_64                      10/10
  Running scriptlet: php-mysqlnd-8.0.30-1.el9.x86_64                      10/10
  Verifying        : nginx-filesystem-1:1.22.1-2.el9.noarch                1/10
  Verifying        : php-8.0.30-1.el9.x86_64                               2/10
  Verifying        : php-cli-8.0.30-1.el9.x86_64                           3/10
  Verifying        : php-common-8.0.30-1.el9.x86_64                        4/10
  Verifying        : php-fpm-8.0.30-1.el9.x86_64                           5/10
  Verifying        : php-mbstring-8.0.30-1.el9.x86_64                      6/10
  Verifying        : php-mysqlnd-8.0.30-1.el9.x86_64                       7/10
  Verifying        : php-opcache-8.0.30-1.el9.x86_64                       8/10
  Verifying        : php-pdo-8.0.30-1.el9.x86_64                           9/10
  Verifying        : php-xml-8.0.30-1.el9.x86_64                          10/10

Installed:
  nginx-filesystem-1:1.22.1-2.el9.noarch    php-8.0.30-1.el9.x86_64
  php-cli-8.0.30-1.el9.x86_64               php-common-8.0.30-1.el9.x86_64
  php-fpm-8.0.30-1.el9.x86_64               php-mbstring-8.0.30-1.el9.x86_64
  php-mysqlnd-8.0.30-1.el9.x86_64           php-opcache-8.0.30-1.el9.x86_64
  php-pdo-8.0.30-1.el9.x86_64               php-xml-8.0.30-1.el9.x86_64

Complete!

php のバージョンを確認します。 8.0.30 です。 8.0系はすでに EOL を迎えています。。 最低でも 8.1 、出来れば最新の 8.3 をインストールしたい (WordPress 観点だと 8.2 と 8.3 は制限ありなので 8.1 が良いという考えもあり。ただ8.1は2025年に EOL が来るというてんはデメリット)。

# php -v
PHP 8.0.30 (cli) (built: Aug  3 2023 17:13:08) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.30, Copyright (c), by Zend Technologies

8.0 の phpとphp-mysqlnd を削除します。

# dnf remove php php-mysqlnd
Dependencies resolved.
================================================================================
 Package               Arch        Version                Repository       Size
================================================================================
Removing:
 php                   x86_64      8.0.30-1.el9           @appstream        0
 php-mysqlnd           x86_64      8.0.30-1.el9           @appstream      450 k
Removing unused dependencies:
 nginx-filesystem      noarch      1:1.22.1-2.el9         @appstream        0
 php-cli               x86_64      8.0.30-1.el9           @appstream       16 M
 php-common            x86_64      8.0.30-1.el9           @appstream      7.8 M
 php-fpm               x86_64      8.0.30-1.el9           @appstream      8.2 M
 php-mbstring          x86_64      8.0.30-1.el9           @appstream      1.0 M
 php-opcache           x86_64      8.0.30-1.el9           @appstream      1.3 M
 php-pdo               x86_64      8.0.30-1.el9           @appstream      229 k
 php-xml               x86_64      8.0.30-1.el9           @appstream      415 k

Transaction Summary
================================================================================
Remove  10 Packages

Freed space: 36 M
Is this ok [y/N]: y
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Erasing          : php-8.0.30-1.el9.x86_64                               1/10
  Running scriptlet: php-fpm-8.0.30-1.el9.x86_64                           2/10
  Erasing          : php-fpm-8.0.30-1.el9.x86_64                           2/10
  Erasing          : php-cli-8.0.30-1.el9.x86_64                           3/10
  Erasing          : php-mbstring-8.0.30-1.el9.x86_64                      4/10
  Erasing          : php-opcache-8.0.30-1.el9.x86_64                       5/10
  Erasing          : php-xml-8.0.30-1.el9.x86_64                           6/10
  Erasing          : php-mysqlnd-8.0.30-1.el9.x86_64                       7/10
  Erasing          : nginx-filesystem-1:1.22.1-2.el9.noarch                8/10
  Erasing          : php-pdo-8.0.30-1.el9.x86_64                           9/10
  Erasing          : php-common-8.0.30-1.el9.x86_64                       10/10
  Running scriptlet: php-common-8.0.30-1.el9.x86_64                       10/10
  Verifying        : nginx-filesystem-1:1.22.1-2.el9.noarch                1/10
  Verifying        : php-8.0.30-1.el9.x86_64                               2/10
  Verifying        : php-cli-8.0.30-1.el9.x86_64                           3/10
  Verifying        : php-common-8.0.30-1.el9.x86_64                        4/10
  Verifying        : php-fpm-8.0.30-1.el9.x86_64                           5/10
  Verifying        : php-mbstring-8.0.30-1.el9.x86_64                      6/10
  Verifying        : php-mysqlnd-8.0.30-1.el9.x86_64                       7/10
  Verifying        : php-opcache-8.0.30-1.el9.x86_64                       8/10
  Verifying        : php-pdo-8.0.30-1.el9.x86_64                           9/10
  Verifying        : php-xml-8.0.30-1.el9.x86_64                          10/10

Removed:
  nginx-filesystem-1:1.22.1-2.el9.noarch    php-8.0.30-1.el9.x86_64
  php-cli-8.0.30-1.el9.x86_64               php-common-8.0.30-1.el9.x86_64
  php-fpm-8.0.30-1.el9.x86_64               php-mbstring-8.0.30-1.el9.x86_64
  php-mysqlnd-8.0.30-1.el9.x86_64           php-opcache-8.0.30-1.el9.x86_64
  php-pdo-8.0.30-1.el9.x86_64               php-xml-8.0.30-1.el9.x86_64

Complete!

php8.3 をインストールするために remi リポジトリを追加します。 合わせて epel も。

# dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
Last metadata expiration check: 1:09:58 ago on Sat 20 Apr 2024 03:53:04 PM CST.
remi-release-9.rpm                               29 kB/s |  30 kB     00:01
Dependencies resolved.
================================================================================
 Package               Arch       Version               Repository         Size
================================================================================
Installing:
 remi-release          noarch     9.3-3.el9.remi        @commandline       30 k
Installing dependencies:
 epel-release          noarch     9-7.el9               extras-common      19 k
Installing weak dependencies:
 epel-next-release     noarch     9-7.el9               extras-common     8.1 k

Transaction Summary
================================================================================
Install  3 Packages

Total size: 57 k
Total download size: 27 k
Installed size: 60 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): epel-next-release-9-7.el9.noarch.rpm      32 kB/s | 8.1 kB     00:00
(2/2): epel-release-9-7.el9.noarch.rpm           70 kB/s |  19 kB     00:00
--------------------------------------------------------------------------------
Total                                            96 kB/s |  27 kB     00:00
CentOS Stream 9 - Extras packages               2.1 MB/s | 2.1 kB     00:00
Importing GPG key 0x1D997668:
 Userid     : "CentOS Extras SIG (https://wiki.centos.org/SpecialInterestGroup) <security@centos.org>"
 Fingerprint: 363F C097 2F64 B699 AED3 968E 1FF6 A217 1D99 7668
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Extras-SHA512
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : epel-release-9-7.el9.noarch                            1/3
  Running scriptlet: epel-release-9-7.el9.noarch                            1/3
Many EPEL packages require the CodeReady Builder (CRB) repository.
It is recommended that you run /usr/bin/crb enable to enable the CRB repository.

  Installing       : epel-next-release-9-7.el9.noarch                       2/3
  Installing       : remi-release-9.3-3.el9.remi.noarch                     3/3
  Running scriptlet: remi-release-9.3-3.el9.remi.noarch                     3/3
(省略)

ここでシステムが応答しない事象が発生します。 結果としてはメモリ不足とわかり1GBから2GBメモリの SAS インスタンスに変更しています(その顛末はこちら)。

php83とphp83-php-mysqlndをインストールします。

# dnf install php83 php83-php-mysqlnd
Last metadata expiration check: 0:55:05 ago on Sat 20 Apr 2024 08:14:49 PM CST.
Dependencies resolved.
================================================================================
 Package                 Arch       Version                 Repository     Size
================================================================================
Installing:
 php83                   x86_64     8.3-1.el9.remi          remi-safe     7.2 k
 php83-php-mysqlnd       x86_64     8.3.6-1.el9.remi        remi-safe     148 k
Installing dependencies:
 capstone                x86_64     4.0.2-10.el9            appstream     767 k
 environment-modules     x86_64     5.3.0-1.el9             baseos        587 k
 libsodium               x86_64     1.0.18-8.el9            epel          161 k
 oniguruma5php           x86_64     6.9.9-1.el9.remi        remi-safe     219 k
 php83-php-cli           x86_64     8.3.6-1.el9.remi        remi-safe     3.7 M
 php83-php-common        x86_64     8.3.6-1.el9.remi        remi-safe     698 k
 php83-php-pdo           x86_64     8.3.6-1.el9.remi        remi-safe      91 k
 php83-runtime           x86_64     8.3-1.el9.remi          remi-safe     1.1 M
 scl-utils               x86_64     1:2.0.3-4.el9           appstream      37 k
 tcl                     x86_64     1:8.6.10-7.el9          baseos        1.1 M
Installing weak dependencies:
 php83-php-fpm           x86_64     8.3.6-1.el9.remi        remi-safe     1.9 M
 php83-php-mbstring      x86_64     8.3.6-1.el9.remi        remi-safe     529 k
 php83-php-opcache       x86_64     8.3.6-1.el9.remi        remi-safe     356 k
 php83-php-sodium        x86_64     8.3.6-1.el9.remi        remi-safe      43 k
 php83-php-xml           x86_64     8.3.6-1.el9.remi        remi-safe     152 k

Transaction Summary
================================================================================
Install  17 Packages

Total download size: 12 M
Installed size: 56 M
Is this ok [y/N]: y
Downloading Packages:
(1/17): environment-modules-5.3.0-1.el9.x86_64. 1.2 MB/s | 587 kB     00:00
(2/17): tcl-8.6.10-7.el9.x86_64.rpm             2.2 MB/s | 1.1 MB     00:00
(3/17): libsodium-1.0.18-8.el9.x86_64.rpm       1.6 MB/s | 161 kB     00:00
(4/17): scl-utils-2.0.3-4.el9.x86_64.rpm        188 kB/s |  37 kB     00:00
(5/17): capstone-4.0.2-10.el9.x86_64.rpm        1.1 MB/s | 767 kB     00:00
(6/17): php83-8.3-1.el9.remi.x86_64.rpm          15 kB/s | 7.2 kB     00:00
(7/17): oniguruma5php-6.9.9-1.el9.remi.x86_64.r 154 kB/s | 219 kB     00:01
(8/17): php83-php-common-8.3.6-1.el9.remi.x86_6 492 kB/s | 698 kB     00:01
(9/17): php83-php-mbstring-8.3.6-1.el9.remi.x86 2.0 MB/s | 529 kB     00:00
(10/17): php83-php-fpm-8.3.6-1.el9.remi.x86_64. 2.0 MB/s | 1.9 MB     00:00
(11/17): php83-php-cli-8.3.6-1.el9.remi.x86_64. 1.6 MB/s | 3.7 MB     00:02
(12/17): php83-php-mysqlnd-8.3.6-1.el9.remi.x86 568 kB/s | 148 kB     00:00
(13/17): php83-php-opcache-8.3.6-1.el9.remi.x86 1.4 MB/s | 356 kB     00:00
(14/17): php83-php-pdo-8.3.6-1.el9.remi.x86_64. 384 kB/s |  91 kB     00:00
(15/17): php83-php-sodium-8.3.6-1.el9.remi.x86_ 181 kB/s |  43 kB     00:00
(16/17): php83-php-xml-8.3.6-1.el9.remi.x86_64. 637 kB/s | 152 kB     00:00
(17/17): php83-runtime-8.3-1.el9.remi.x86_64.rp 3.9 MB/s | 1.1 MB     00:00
--------------------------------------------------------------------------------
Total                                           2.2 MB/s |  12 MB     00:05
Extra Packages for Enterprise Linux 9 - x86_64  1.5 MB/s | 1.6 kB     00:00
Importing GPG key 0x3228467C:
 Userid     : "Fedora (epel9) <epel@fedoraproject.org>"
 Fingerprint: FF8A D134 4597 106E CE81 3B91 8A38 72BF 3228 467C
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9
Is this ok [y/N]: y
Key imported successfully
Safe Remi's RPM repository for Enterprise Linux 3.0 MB/s | 3.1 kB     00:00
Importing GPG key 0x478F8947:
 Userid     : "Remi's RPM repository (https://rpms.remirepo.net/) <remi@remirepo.net>"
 Fingerprint: B1AB F71E 14C9 D748 97E1 98A8 B195 27F1 478F 8947
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el9
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : oniguruma5php-6.9.9-1.el9.remi.x86_64                 1/17
  Installing       : libsodium-1.0.18-8.el9.x86_64                         2/17
  Installing       : capstone-4.0.2-10.el9.x86_64                          3/17
  Installing       : tcl-1:8.6.10-7.el9.x86_64                             4/17
  Installing       : environment-modules-5.3.0-1.el9.x86_64                5/17
  Running scriptlet: environment-modules-5.3.0-1.el9.x86_64                5/17
  Installing       : scl-utils-1:2.0.3-4.el9.x86_64                        6/17
  Installing       : php83-runtime-8.3-1.el9.remi.x86_64                   7/17
  Running scriptlet: php83-runtime-8.3-1.el9.remi.x86_64                   7/17
  Installing       : php83-php-common-8.3.6-1.el9.remi.x86_64              8/17
  Installing       : php83-php-pdo-8.3.6-1.el9.remi.x86_64                 9/17
  Installing       : php83-php-cli-8.3.6-1.el9.remi.x86_64                10/17
  Installing       : php83-php-fpm-8.3.6-1.el9.remi.x86_64                11/17
  Running scriptlet: php83-php-fpm-8.3.6-1.el9.remi.x86_64                11/17
  Installing       : php83-php-mbstring-8.3.6-1.el9.remi.x86_64           12/17
  Installing       : php83-php-opcache-8.3.6-1.el9.remi.x86_64            13/17
  Installing       : php83-php-sodium-8.3.6-1.el9.remi.x86_64             14/17
  Installing       : php83-php-xml-8.3.6-1.el9.remi.x86_64                15/17
  Installing       : php83-8.3-1.el9.remi.x86_64                          16/17
  Installing       : php83-php-mysqlnd-8.3.6-1.el9.remi.x86_64            17/17
  Running scriptlet: php83-php-mysqlnd-8.3.6-1.el9.remi.x86_64            17/17
  Verifying        : environment-modules-5.3.0-1.el9.x86_64                1/17
  Verifying        : tcl-1:8.6.10-7.el9.x86_64                             2/17
  Verifying        : capstone-4.0.2-10.el9.x86_64                          3/17
  Verifying        : scl-utils-1:2.0.3-4.el9.x86_64                        4/17
  Verifying        : libsodium-1.0.18-8.el9.x86_64                         5/17
  Verifying        : oniguruma5php-6.9.9-1.el9.remi.x86_64                 6/17
  Verifying        : php83-8.3-1.el9.remi.x86_64                           7/17
  Verifying        : php83-php-cli-8.3.6-1.el9.remi.x86_64                 8/17
  Verifying        : php83-php-common-8.3.6-1.el9.remi.x86_64              9/17
  Verifying        : php83-php-fpm-8.3.6-1.el9.remi.x86_64                10/17
  Verifying        : php83-php-mbstring-8.3.6-1.el9.remi.x86_64           11/17
  Verifying        : php83-php-mysqlnd-8.3.6-1.el9.remi.x86_64            12/17
  Verifying        : php83-php-opcache-8.3.6-1.el9.remi.x86_64            13/17
  Verifying        : php83-php-pdo-8.3.6-1.el9.remi.x86_64                14/17
  Verifying        : php83-php-sodium-8.3.6-1.el9.remi.x86_64             15/17
  Verifying        : php83-php-xml-8.3.6-1.el9.remi.x86_64                16/17
  Verifying        : php83-runtime-8.3-1.el9.remi.x86_64                  17/17

Installed:
  capstone-4.0.2-10.el9.x86_64
  environment-modules-5.3.0-1.el9.x86_64
  libsodium-1.0.18-8.el9.x86_64
  oniguruma5php-6.9.9-1.el9.remi.x86_64
  php83-8.3-1.el9.remi.x86_64
  php83-php-cli-8.3.6-1.el9.remi.x86_64
  php83-php-common-8.3.6-1.el9.remi.x86_64
  php83-php-fpm-8.3.6-1.el9.remi.x86_64
  php83-php-mbstring-8.3.6-1.el9.remi.x86_64
  php83-php-mysqlnd-8.3.6-1.el9.remi.x86_64
  php83-php-opcache-8.3.6-1.el9.remi.x86_64
  php83-php-pdo-8.3.6-1.el9.remi.x86_64
  php83-php-sodium-8.3.6-1.el9.remi.x86_64
  php83-php-xml-8.3.6-1.el9.remi.x86_64
  php83-runtime-8.3-1.el9.remi.x86_64
  scl-utils-1:2.0.3-4.el9.x86_64
  tcl-1:8.6.10-7.el9.x86_64

Complete!

php のバージョンとモジュールを確認します。

# php83 -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

# php83 -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
random
readline
Reflection
session
SimpleXML
sockets
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zlib

[Zend Modules]
Zend OPcache

MySQL に WordPress 用のテーブルを作成

MySQL に WordPress 用のテーブルとアカウントを事前に作成します。<username>と<password>は実際に登録する値を指定します。

# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36 Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.01 sec)

mysql> CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
Query OK, 0 rows affected (0.02 sec)

mysql> GRANT ALL ON wordpress.* TO '<username>'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye

WordPress のインストール

WordPress のインストールは公式の手順(https://developer.wordpress.org/advanced-administration/before-install/howto-install/)通りに実施することをお勧めします。 Google Gemini に聞いたやり方で進めていたら正常に動作せずに苦労した・・・(本来不要な chmod とかでの権限最小化を実施したら動かなくなった)

WordPress をダウンロードし、圧縮ファイルを /var/www/html に展開します。

# cd ~
# wget https://wordpress.org/latest.zip
--2024-04-20 21:26:17--  https://wordpress.org/latest.zip
Resolving wordpress.org (wordpress.org)... 198.143.164.252
Connecting to wordpress.org (wordpress.org)|198.143.164.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 26190939 (25M) [application/zip]
Saving to: ‘latest.zip’

latest.zip          100%[===================>]  24.98M  3.52MB/s    in 6.7s

2024-04-20 21:26:25 (3.70 MB/s) - ‘latest.zip’ saved [26190939/26190939]

# unzip latest.zip -d /var/www/html/
(省略)

次に wp-config.php ファイルを準備します。 sample をコピーし、MySQLへの接続情報を登録します。

# cd /var/www/html/wordpress
# cp wp-config-sample.php wp-config.php
# vi wp-config.php

Apache に WordPress 用の設定を行います。

# cd /etc/httpd/conf.d
# vi wordpress.conf
<VirtualHost *:80>
    ServerAdmin xxxx@xxx.xxx
    DocumentRoot /var/www/html/wordpress
    ServerName xxx.xxx
    ServerAlias xxx.xxx.xxx

    ErrorLog /var/log/httpd/wordpress_error.log
    CustomLog /var/log/httpd/wordpress_access.log combined
</VirtualHost>

# cd /var/www/html
# chown -R apache:apache wordpress/

# systemctl restart httpd.service

Webブラウザからサーバにアクセスします。

http://xxx.xxx.xxx.xxx/   ※ xxx.xxx.xxx.xxx はサーバのIPアドレスや FQDN名

以下の画面が表示されれば WordPress のインストールは問題ありません。この後は WordPress の初期設定となりますがこの記事は環境構築までの記録なので初期設定の手順は割愛します。

サイトヘルスの問題「エラー 必須モジュール gd がインストールされていないか、無効化されています」

初期設定の手順は割愛しましたがサイトヘルスで大きく3つの問題があったのでその対応内容を紹介します。

1つ目の問題は必須モジュールが無い話。 gdが無いのと、その他警告ですが ImageMagicとか無いよと。

1つ以上の必須モジュールが存在しません
パフォーマンス
PHP モジュールはサイトの稼働に必要なほとんどのタスクをサーバー上で実行します。変更はサーバー管理者が実施する必要があります。

WordPress ホスティングチームでは、こうした推奨されていたり必須とされていたりするモジュールのリストをチームのハンドブック (新しいタブで開く)でメンテナンスしています。

警告 オプションのモジュール imagick がインストールされていないか、無効化されています。
警告 オプションのモジュール zip がインストールされていないか、無効化されています。
エラー 必須モジュール gd がインストールされていないか、無効化されています。
警告 オプションのモジュール intl がインストールされていないか、無効化されています。

これはメッセージに従い、不足しているPHPのモジュールをインストールしていきます。

まずはPHP8.3 の gd から。

# dnf install php83-php-gd
Last metadata expiration check: 0:01:26 ago on Sat 20 Apr 2024 10:38:33 PM CST.
Dependencies resolved.
================================================================================
 Package                Arch        Version                Repository      Size
================================================================================
Installing:
 php83-php-gd           x86_64      8.3.6-1.el9.remi       remi-safe       46 k
Installing dependencies:
 gd3php                 x86_64      2.3.3-9.el9.remi       remi-safe      136 k
 highway                x86_64      1.1.0-1.el9            epel            34 k
 jbigkit-libs           x86_64      2.1-23.el9             appstream       53 k
 libXpm                 x86_64      3.5.13-10.el9          appstream       59 k
 libaom                 x86_64      3.8.2-1.el9            epel           1.8 M
 libavif                x86_64      0.11.1-4.el9           epel            81 k
 libdav1d               x86_64      1.2.1-1.el9            epel           596 k
 libimagequant          x86_64      2.17.0-1.el9           epel            62 k
 libjxl                 x86_64      0.7.0-1.el9            epel           957 k
 libraqm                x86_64      0.8.0-1.el9            epel            19 k
 libtiff                x86_64      4.4.0-12.el9           appstream      198 k
 libvmaf                x86_64      2.3.0-2.el9            epel           177 k
 libwebp                x86_64      1.2.0-8.el9            appstream      277 k
 rav1e-libs             x86_64      0.7.1-1.el9            epel           1.0 M
 svt-av1-libs           x86_64      0.9.0-1.el9            epel           1.7 M
Installing weak dependencies:
 jxl-pixbuf-loader      x86_64      0.7.0-1.el9            epel            53 k

Transaction Summary
================================================================================
Install  17 Packages

Total download size: 7.2 M
Installed size: 22 M
Is this ok [y/N]: y
Downloading Packages:
(1/17): libXpm-3.5.13-10.el9.x86_64.rpm         309 kB/s |  59 kB     00:00
(2/17): jbigkit-libs-2.1-23.el9.x86_64.rpm      237 kB/s |  53 kB     00:00
(3/17): highway-1.1.0-1.el9.x86_64.rpm          586 kB/s |  34 kB     00:00
(4/17): jxl-pixbuf-loader-0.7.0-1.el9.x86_64.rp 1.4 MB/s |  53 kB     00:00
(5/17): libtiff-4.4.0-12.el9.x86_64.rpm         615 kB/s | 198 kB     00:00
(6/17): libwebp-1.2.0-8.el9.x86_64.rpm          1.4 MB/s | 277 kB     00:00
(7/17): libavif-0.11.1-4.el9.x86_64.rpm         1.2 MB/s |  81 kB     00:00
(8/17): libimagequant-2.17.0-1.el9.x86_64.rpm   1.8 MB/s |  62 kB     00:00
(9/17): libaom-3.8.2-1.el9.x86_64.rpm           8.1 MB/s | 1.8 MB     00:00
(10/17): libdav1d-1.2.1-1.el9.x86_64.rpm        3.1 MB/s | 596 kB     00:00
(11/17): libraqm-0.8.0-1.el9.x86_64.rpm         694 kB/s |  19 kB     00:00
(12/17): libjxl-0.7.0-1.el9.x86_64.rpm          5.3 MB/s | 957 kB     00:00
(13/17): libvmaf-2.3.0-2.el9.x86_64.rpm         3.0 MB/s | 177 kB     00:00
(14/17): rav1e-libs-0.7.1-1.el9.x86_64.rpm      1.9 MB/s | 1.0 MB     00:00
(15/17): svt-av1-libs-0.9.0-1.el9.x86_64.rpm    1.5 MB/s | 1.7 MB     00:01
(16/17): gd3php-2.3.3-9.el9.remi.x86_64.rpm      94 kB/s | 136 kB     00:01
(17/17): php83-php-gd-8.3.6-1.el9.remi.x86_64.r  47 kB/s |  46 kB     00:00
--------------------------------------------------------------------------------
Total                                           2.0 MB/s | 7.2 MB     00:03
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : libwebp-1.2.0-8.el9.x86_64                            1/17
  Installing       : svt-av1-libs-0.9.0-1.el9.x86_64                       2/17
  Installing       : rav1e-libs-0.7.1-1.el9.x86_64                         3/17
  Installing       : libvmaf-2.3.0-2.el9.x86_64                            4/17
  Installing       : libraqm-0.8.0-1.el9.x86_64                            5/17
  Installing       : libimagequant-2.17.0-1.el9.x86_64                     6/17
  Installing       : libdav1d-1.2.1-1.el9.x86_64                           7/17
  Installing       : highway-1.1.0-1.el9.x86_64                            8/17
  Installing       : jxl-pixbuf-loader-0.7.0-1.el9.x86_64                  9/17
  Installing       : libjxl-0.7.0-1.el9.x86_64                            10/17
  Installing       : libaom-3.8.2-1.el9.x86_64                            11/17
  Installing       : libavif-0.11.1-4.el9.x86_64                          12/17
  Installing       : libXpm-3.5.13-10.el9.x86_64                          13/17
  Installing       : jbigkit-libs-2.1-23.el9.x86_64                       14/17
  Installing       : libtiff-4.4.0-12.el9.x86_64                          15/17
  Installing       : gd3php-2.3.3-9.el9.remi.x86_64                       16/17
  Installing       : php83-php-gd-8.3.6-1.el9.remi.x86_64                 17/17
  Running scriptlet: php83-php-gd-8.3.6-1.el9.remi.x86_64                 17/17
  Verifying        : jbigkit-libs-2.1-23.el9.x86_64                        1/17
  Verifying        : libXpm-3.5.13-10.el9.x86_64                           2/17
  Verifying        : libtiff-4.4.0-12.el9.x86_64                           3/17
  Verifying        : libwebp-1.2.0-8.el9.x86_64                            4/17
  Verifying        : highway-1.1.0-1.el9.x86_64                            5/17
  Verifying        : jxl-pixbuf-loader-0.7.0-1.el9.x86_64                  6/17
  Verifying        : libaom-3.8.2-1.el9.x86_64                             7/17
  Verifying        : libavif-0.11.1-4.el9.x86_64                           8/17
  Verifying        : libdav1d-1.2.1-1.el9.x86_64                           9/17
  Verifying        : libimagequant-2.17.0-1.el9.x86_64                    10/17
  Verifying        : libjxl-0.7.0-1.el9.x86_64                            11/17
  Verifying        : libraqm-0.8.0-1.el9.x86_64                           12/17
  Verifying        : libvmaf-2.3.0-2.el9.x86_64                           13/17
  Verifying        : rav1e-libs-0.7.1-1.el9.x86_64                        14/17
  Verifying        : svt-av1-libs-0.9.0-1.el9.x86_64                      15/17
  Verifying        : gd3php-2.3.3-9.el9.remi.x86_64                       16/17
  Verifying        : php83-php-gd-8.3.6-1.el9.remi.x86_64                 17/17

Installed:
  gd3php-2.3.3-9.el9.remi.x86_64         highway-1.1.0-1.el9.x86_64
  jbigkit-libs-2.1-23.el9.x86_64         jxl-pixbuf-loader-0.7.0-1.el9.x86_64
  libXpm-3.5.13-10.el9.x86_64            libaom-3.8.2-1.el9.x86_64
  libavif-0.11.1-4.el9.x86_64            libdav1d-1.2.1-1.el9.x86_64
  libimagequant-2.17.0-1.el9.x86_64      libjxl-0.7.0-1.el9.x86_64
  libraqm-0.8.0-1.el9.x86_64             libtiff-4.4.0-12.el9.x86_64
  libvmaf-2.3.0-2.el9.x86_64             libwebp-1.2.0-8.el9.x86_64
  php83-php-gd-8.3.6-1.el9.remi.x86_64   rav1e-libs-0.7.1-1.el9.x86_64
  svt-av1-libs-0.9.0-1.el9.x86_64

Complete!

他、警告が出ているものもインストール。これでモジュールに関する問題は解消です。

# dnf install php83-php-pecl-imagick-im7
# dnf install php83-php-pecl-zip
# dnf install php83-php-intl

サイトヘルスの問題「cURL error 28: Connection timed out after 10000 milliseconds

2つ目の問題は REST API のレスポンスが遅いとのこと。

REST API でエラーが発生しました
パフォーマンス
REST API は WordPress や他のアプリケーションがサーバーと通信する手段の1つです。たとえば、ブロックエディターの画面は投稿や固定ページの表示や保存のために REST API を使用しています。

REST API のテスト時に、エラーが発生しました:

REST API エンドポイント: http://XXX.XXX.XXX.XXX/index.php?rest_route=%2Fwp%2Fv2%2Ftypes%2Fpost&context=edit
REST API レスポンス: (http_request_failed) cURL error 28: Connection timed out after 10000 milliseconds

3つ目の問題はループバックリクエストに関するもの。 2つ目の問題と根っこは同じ問題のようで両方とも 10000 miliseconds を超えてタイムアウトしたようです。

ループバックリクエストは予約イベントの実行に使用されます。またテーマやプラグインの組み込みエディターでは、コードの安定性の確認に使用されます。

サイトへのループバックリクエストは失敗しました。現在、依存する機能は想定どおりに動作していません。
エラー: cURL error 28: Connection timed out after 10000 milliseconds (http_request_failed)

メッセージ”cURL error 28: Connection timed out after 10000 milliseconds“を軸に調査を進めます。

原因がわかりました。 この WordPress サーバへのIPアドレスによるアクセス制限が原因でした。 WordPress の環境構築が完了するまでは送信元ネットワーク・IPアドレスを限定していました。表にすると以下の状態。  要は私の自宅のNetworkからしか WordPress(http/https)やSSHに接続することが出来ない状態です。

FromToProtocolAllow or Deny
My NetworkWordPress Serverhttpallow
My NetworkWordPress Serverhttpsallow
My NetworkWordPress Serversshallow
allallallDeny

これを以下のようにどのホストからも WordPress Server の http と https にアクセスを許可しました。  この設定後は”cURL error 28: Connection timed out after 10000 milliseconds“は解消され、2つの問題”REST API でエラーが発生しました”も”サイトへのループバックリクエストは失敗しました”も解消されました。

なおアクセス制限は Alibaba Cloud の機能で実施しています(Security Group)。

FromToProtocolAllow or Deny
allWordPress Serverhttpallow
allWordPress Serverhttpsallow
My NetworkWordPress Serversshallow
allallallDeny

また、根本的なところでどこからアクセスが来ていたのか Apache のアクセスログを確認します。 

結果は WordPress サーバ自身の Public IP address が送信元のアクセスでした。 サイトヘルスでループバックリクエストに失敗とは自分のPublic IP address によるループバック処理だったようです(ループバックというからには 127.0.0.0/8 からの接続なのかという思い込み)。また、SAS インスタンス自体は private IP address しかもっておらずまさか自分に割り当てられた Public IP Address で自分自身にアクセスに来るとは考えていなかったのでこれは WordPress の動作・仕様に関する良い気付きになりました。 

以上