CentOS8にWordPressをインストールする – 周辺ソフトウェアの設定

WordPressに必要なWebサーバやデータベースなどの設定を行います。

この記事で行うこと

  1. ファイル権限及びSELinuxの設定
  2. Nginxの設定
  3. MariaDBの設定

1. ファイル権限及びSELinuxの設定

前回展開したWordPressの本体は、現状所有者が設定されていません。

nginxがこのファイルを開けるように、所有者をnginxにします。

[root@localhost ~]# chown nginx:nginx -R /srv/wordpress/

また、SELinuxの設定を変更してWebサーバが /srv/wordpress/ を参照できるようにします。

SELinuxはファイル権限を厳密に管理することで特定のアプリが乗っ取られた時などに被害を抑えるものです。

他のサイトだと、まずは無効化しますとされますがセキュリティを考えると使うに超したことはありません。(問題があったときにトラブルシューティングの為にまず無効化するのは良いのですが……)

[root@localhost ~]# semanage fcontext -a -t httpd_sys_rw_content_t '/srv/wordpress(/.*)?'
[root@localhost ~]# restorecon -R /srv/wordpress/
  • semanage : SELinuxの設定を変更するコマンドです。
  • focontext : SELinuxのファイルコンテキスト(そのファイルを何に使うか)の設定を行うコマンドです。
  • -a : ファイルコンテキスト付与のルールを新たに作成するオプションです。(addの略)
  • -t httpd_sys_rw_content_t : -t はコンテキストのタイプ名を指定するオプションです。今回は httpd_sys_rw_content_t というWebサーバが利用できるというタイプを指定します。
  • '/srv/wordpress(/.*)?' : 追加する対象を指定します。今回は /srv/nextcloud 以下の全てのファイルを指定します。 (/.*)? は正規表現で、中身のあらゆるものを対象とすることを表しています。
  • restorecon : 1行目のコマンドではルールを作るだけで実際にファイルコンテキストを付与しません。このコマンドでファイルコンテキストの更新を行って、新しく作ったルールを適用します。
  • -R : 指定したディレクトリ以下の全てにコマンドを適用する為のオプションです。
  • /srv/wordpress/ : コマンドの対象を指定します。

ちなみに、適用されたコンテキストを確認するには、ls に -Z というオプションを付けて実行します。( -Z は必ず大文字です)

一番右に httpd_sys_rw_content_t とあるのが確認できますね。

[root@localhost ~]# ls -Z /srv/nextcloud/index.html
unconfined_u:object_r:httpd_sys_rw_content_t:s0 /srv/nextcloud/index.html

httpd_sys_rw_content_t は読み書きは出来ますが実行は出来ません。しかし、WordPressのテーマやプラグインによっては実行を要するファイルが含まれる場合があります。

この時、該当のファイルを毎回探して実行可能なコンテキストに設定し直すのは難しいので、Webサーバに関連するコンテキストは実際のコンテキストに関係なく読み書き実行を可能にする設定を行います。

[root@localhost ~]# setsebool -P httpd_unified on
  • setsebool : SELinuxで準備されているルールを適用するか否かを設定するコマンドです。
  • -P : 再起動後にも設定を維持するためのオプションです。このオプションがない場合、再起動したら設定した内容が消えてしまいます。(大文字必須です)
  • httpd_unified : 先程説明した、Webサーバに関係するコンテキストは全て読み書き実行が可能と扱うルールです。
  • on : 設定を有効化します。無効化するときはもちろん off です。

また、WordPressではサーバのアップデートや追加アプリの取得のためネットワークに接続します。しかし、SELinuxの初期設定ではWebサーバがネットワークに接続しに行くのは禁止されているので、これも許可する設定を行います。

[root@localhost ~]# setsebool -P httpd_can_network_connect on
  • httpd_can_network_connect : その名の通り、Webサーバがネットワークに接続するのを許可するルールです。

2. Nginxの設定

Nextcloud用のNginxの設定ファイルを作成します。

Nginxの設定ファイルについては以下の記事を参照してください。

設定ファイル名は分かりやすく /etc/nginx/conf.d/wordpress.conf とします。

WordPressのサイト上にNginxの設定例が載ってはいるのですが……前提がWordPressのサイトを複数同じサーバで立ち上げるもので、基本設定である nginx.conf まで変更するというかなりアグレッシブなものとなっています。

WordPress専用サーバなら良いのですが、そうでないなら他のWebサービスに影響を及ぼしかねません。

ということで、今回はNginxのサイトに掲載されているWordPressの設定例を元にしたいと思います。

# upstream php-handlerの部分は同じような設定がphp-fpmで設定されているので不要です。

# HTTP接続をHTTPS接続に転送
server {
        listen 80;
        listen [::]:80;
        server_name "ホスト名";
        # enforce https
        return 301 https://$server_name:443$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name "ホスト名";
        root /srv/wordpress;
# 前回WordPressをインストールした場所
        ## This should be in your http block and if it is, it's not needed here.
        index index.php;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

# 管理用のファイルなどアクセスしてはいけないファイルへのアクセスを防ぐ設定。WordPressの方で掲載されている設定ファイルにのみ記載があったため流用。
        # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
        # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
        location ~ /\. {
            deny all;
        }
 
        # Deny access to any files with a .php extension in the uploads directory
        # Works in sub-directory installs and also in multisite network
        # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
        location ~* /(?:uploads|files)/.*\.php$ {
            deny all;
        }

        location / {
                # This is cool because no php is touched for static content.
                # include the "?$args" part so non-default permalinks doesn't break when using query string
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                include fastcgi_params;
                fastcgi_intercept_errors on;
                fastcgi_pass php-fpm;
                #The following parameter can be also included in fastcgi_params file
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

一応コメントアウトしているので問題は無いはずですが、私が追記したコメント(日本語のコメント)に関しては削除しておいた方が万全です。

3. MariaDBの設定

WordPress用のユーザとデータベースを作成します。

行うことは以下記事の通りに wordpress というユーザと wordpress というデータベースを作成して、権限を付与します。

[root@localhost ~]# mariadb
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> create user wordpress identified by '任意のパスワード';
MariaDB [(none)]> grant all privileges on wordpress.* to wordpress;
MariaDB [(none)]> exit;

なお、MariaDBの初期設定でunix_socket認証を使わない設定にしていた場合、 -u root -p とオプションを指定する必要があります。

まとめ

今回はWordpressの周辺アプリケーションの設定について説明しました。

次回は実際にWordPressに接続してみます。

コメントを残す

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