ホーム » 技術 » WordPressをCentOS8/nginxでインストール

WordPressをCentOS8/nginxでインストール

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での手順は、大雑把ではあるが

に示している。

939

まずは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

これでサイトにアクセスすると、有名なインストール画面が出てくるはずだ。