WordPressをCentOS8環境下のnginx/php-fpmにインストールする手順をまとめる。
CentOS8では、nginxが正式採用されたりPHPのバージョンが7.xに上がったりしているので、CentOS7に比べて手順が洗練されていることが期待できるが、果たしてどうなっているかを確認してみたい。なお本稿ではPHPはAppStream版の7.2を入れた(Remiが対応している7.3は入れていない 【2021/12/03改訂】PHPは7.4を利用するように変更した。
ちなみにCentOS7での手順は、大雑把ではあるが
に示している。
まずはCentOS8で動くサーバを用意する。さくらのクラウドのリリースノートにも書いてあるが、CentOS8は最低限用意するべきメモリの量が1.5GBになったそうで、クラウドでは2GBからということになるのでスペックを選ぶときは注意してほしい。1core2GBのサーバを作成し、適切にアップデート、セットアップを施しておく。
DBのインストール
素直にMySQLをインストールする。
dnf -y install mysql-server
そうしておいて、/etc/my.cnf.d/mysqld.cnf
などにサーバ設定を記述する。メモリ2GBに対して、こんなぐらいの設定でどうか。
[mysqld]
innodb_file_per_table=ON
innodb_buffer_pool_size=1024M
innodb_log_file_size=256M
innodb_flush_method=O_DIRECT
character-set-server=utf8mb4
次にmysqldを起動する。
systemctl enable mysqld
systemctl start mysqld
パスワードが設定されていないので、取り急ぎ設定する。
alter user 'root'@'localhost' identified by 'password-for-root';
次にWordPressに必要なデータベースの初期設定を行う。データベースを作成し、アクセス用のユーザを作り、パスワードとアクセス権を設定する。
create database wpdb;
create user 'wpuser'@'localhost' identified by 'password-for-wpuser';
grant all privileges on wpdb.* to 'wpuser'@'localhost';
PHP7.4の準備
PHPのバージョンを7.2から7.4にする。
dnf module reset php
dnf module install php:7.4
nginxとphp-fpmのインストール
続いて、nginxとphp-fpmを用意する。
dnf -y install nginx php-{fpm,mysqlnd,mbstring,json,gd,zip}
php-fpmの設定ファイルのうち、/etc/php-fpm.d/www.conf
を書き換える。具体的にはプロセスのuid/gidをapacheからnginxに変更しておく。
; Unix user/group of processes
; 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
! user = nginx
; RPM: Keep a group allowed to write in log dir.
! ;group = apache
! group = nginx
ちなみに、デフォルトではphp-fpmはソケットを利用する設定になっている。お好みに合わなければ該当部分をお好きなように変更してほしい。
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 addres
s on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php-fpm/www.sock
次にnginxの設定だ。まず、インストール直後の設定状態を見てみると、/etc/nginx
配下の default.d/php.conf
にはこう記述されている。
# pass the PHP scripts to FastCGI server
#
# See conf.d/php-fpm.conf for socket configuration
#
index index.php index.html index.htm;
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}
そして、コメントにもあるがソケット設定は conf.d/php-fpm.conf
にある。
# PHP-FPM FastCGI server
# network or unix domain socket configuration
upstream php-fpm {
server unix:/run/php-fpm/www.sock;
}
以上の設定により、nginxはPHPを問題なく実行できるようになっている。
WordPressのインストール
続いてWordPressをインストールする。細かいチューニングはさておいて、とりあえず動くようにする。ドキュメントルートはデフォルトの /usr/share/nginx/html
としている。
cd /usr/share/nginx
mv html html.org
wget https://ja.wordpress.org/latest-ja.tar.gz
tar zxf latest-ja.tar.gz
mv wordpress html
chown -R nginx:nginx html
次に wp-config.php を用意するのだが、この辺の手順はWordPressの公式サイトを参照してほしい。たとえば
をご覧いただきたい。
wp-config.php
が用意出来たら、/etc/nginx/nginx.conf
にWordPressのための設定を追記する。具体的には server
セクションの location /
のあたりから、こんな風に書く。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
+ try_files $uri $uri/ /index.php?$args;
+ }
+
+ rewrite /wp-admin$ $scheme://$host$uri/ permanent;
+
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
+ expires 24h;
+ log_not_found off;
}
error_page 404 /404.html;
location = /40x.html {
}
次にサービスを起動する。
systemctl enable nginx php-fpm
systemctl start nginx php-fpm
最後に、忘れないようにファイアウォールに穴を開ける。
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
これでサイトにアクセスすると、有名なインストール画面が出てくるはずだ。