Loading...
IT自分メモ

WordPressをCentOS8にインストールするメモ(nginx x PHP-fpm x mariaDB)

家のサーバのデータをぶっ飛ばしたので、CentOS8で作り直した時のメモです。

仮想マシンの構成

CentOS8はメモリの最低容量が1.5GB。今回は2GBで構築。
HDDは10GBで動作します。(www配下に外部ディスクをマウント)
※ディスクのフォーマットはあらかじめ行ってあるものとする。

CentOS8インストール

こちら

 

初期セットアップ

アップデート

yum update -y

epelのインストール

yum -y install epel-release

remi-7.4のインストール

dnf module install php:remi-7.4

※GAのPHP7.2ではWordpressが操作しない為これを行う

nginxのインストール

nginxはGAである1.14-1-9でいきます。

dif install -y nginx
================================================================================
 パッケージ                  Arch   バージョン                  Repo      サイズ
================================================================================
インストール:
 nginx                       x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82
                                                                AppStream 570 k

mariaDBのインストール

こちらもGA。10.3になってます。

dnf info mariadb-server mariadb mariadb-devel
dnf install -y mariadb-server mariadb mariadb-devel
================================================================================
 パッケージ                Arch   バージョン                    Repo      サイズ
================================================================================
インストール:
 mariadb-devel             x86_64 3:10.3.17-1.module_el8.1.0+257+48736ea6
                                                                AppStream 1.0 M
 mariadb-server            x86_64 3:10.3.17-1.module_el8.1.0+257+48736ea6
                                                                AppStream  16 M
依存関係のインストール:
 mariadb-connector-c-devel x86_64 3.0.7-1.el8                   AppStream  63 k
 mariadb-errmsg            x86_64 3:10.3.17-1.module_el8.1.0+257+48736ea6
                                                                AppStream 232 k
 ~中略~
 psmisc                    x86_64 23.1-3.el8                    BaseOS    151 k
 zlib-devel                x86_64 1.2.11-10.el8                 BaseOS     56 k
弱い依存関係のインストール:
 mariadb-backup            x86_64 3:10.3.17-1.module_el8.1.0+257+48736ea6
                                                                AppStream 6.0 M
 mariadb-gssapi-server     x86_64 3:10.3.17-1.module_el8.1.0+257+48736ea6
                                                                AppStream  49 k
 mariadb-server-utils      x86_64 3:10.3.17-1.module_el8.1.0+257+48736ea6
                                                                AppStream 1.6 M
モジュールストリームの有効化:
 perl-DBD-MySQL                   4.046                                        
 perl-DBI                         1.641                                        

トランザクションの概要
================================================================================
インストール  28 パッケージ

ダウンロードサイズの合計: 31 M
インストール済みのサイズ: 147 M

PHPと関連モジュールのインストール

必ずModuleを7.2で更新しておく(上述)こと。

yum install php-fpm php-mysqlnd php-json php-xml php-gd php-mbstring php-pecl-zip php-pecl-imagick

Nginxの設定

/etc/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}

includeでconf.d/配下を読むように設定。

/etc/nginx/conf.d/~.conf

~には任意の名前でOK。

server {
    listen 80;
    server_name your-srvname;
    return 301 https://$host$request_uri;
}
server {

  listen 443 ssl http2 default_server;
  listen [::]:443 ssl http2;
  server_name your-srvname;
  charset utf-8;
  root <任意のドキュメントルート>;
  index index.html index.php index.xml;
  client_max_body_size 500M;

  #ssl設定
  ssl on;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:50m;
  ssl_session_tickets off;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';

  #ServerのOpen-SSLにて発行したkey
  ssl_certificate_key /etc/nginx/ssl/your.key;

  #証明書発行機関から出された「Cert」と「中間証明書」を連結したもの
  ssl_certificate /etc/nginx/ssl/your.cert;

  ssl_stapling on;
  ssl_stapling_verify on;
  #ssl_trusted_certificate /etc/letsencrypt/live/mastodon.example.com/fullchain.pem;
  resolver 8.8.4.4 8.8.8.8 valid=300s;
  resolver_timeout 10s;
  add_header Strict-Transport-Security 'max-age=315360000;includeSubDomains;preload';

  #gzip
  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    include fastcgi_params;
  }

  error_page 500 501 502 503 504 /500.html;
 location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

}

PHPの設定でPHP-fpmの設定をここで変更しておくと後から楽。
SSL化が不要な場合はsslから始まる設定をコメントアウトして、Listenで80を記載してあげてください。

SSL証明書関係

証明書をセットアップしたい人向け。
以下のコマンドでまずKeyを出して

openssl genrsa -out your.key 2048

次に↓のコマンドでkeyを基にcsrを出力する。

openssl req -new -key wwwexamplecom.key -out wwwexamplecom.csr

この後オレオレ証明してもいいし、証明書サービス―ビスを利用する人はcsrの中身をコピーして提出すればOKだ。

その後、証明書発行機関から出された中間証明書とCertを連結したものを下記に保存する。
尚/etc/nginx/sslは整理しやすいために作成したのであらかじめmkdirかなんかで作ってもいいし、別途好きな所においても良い。

vi /etc/nginx/ssl/your.cert

PHP-fpm設定

PHP-fpmでは以下の設定を追記する。

/etc/php-fpm.d/www.conf

vi /etc/php-fpm.d/www.conf
-user = apache
-group = apache
+user = nginx
+group = nginx
+listen.owner = nginx
+listen.group = nginx
+listen.mode = 0660
+listen = /var/run/php-fpm.sock
※Nginxのコンフィグに記載したphp-fpm sockの場所

書き換えるのは主にUserの名称変更と追加。
さらにNginxのconf.d配下のConfigで記載したSockファイルのPathもここで記載する。

パーミッション変更

chown nginx.nginx -R /var/run/

nginxでSockを読み込みできるようにパーミッション変更する。

MariaDBの初期設定

初期セットアップの前にサービスを立ち上げる

systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation

最初MariaDBのRootパスワードを求められるが、未設定なので空白でOK。
その後質問がいくつか飛んでくるのでセットアップを行う。

その後以下のコマンドでMariaDBコンソールに入れればOK

mysql -u root -p
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 23208
Server version: 10.3.17-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]>

これが出ればOK。

MariaDBでDBとUserを作成しておく

WordPressインストール時に必要になるユーザーとDBをあらかじめ作っておく。

CREATE DATABASE DB_NAME DEFAULT CHARACTER SET utf8mb4;

これで作成。最近のWordpressではCharsetはutf8mb4が推奨とのこと。
UTF8でも動くのでお好みで

GRANT ALL ON DB_NAME.* TO USERNAME@localhost IDENTIFIED BY 'password';

その後ユーザーを作成する。
ここでは上記で作った「DB_NAME」というDBに対して「USERNAME」というユーザーを作成している。
passwordは一番最後。いずれも任意の文字で問題ない。

MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDB [(none)]>auit

最後にコンソールから抜ければOKだ。

WordPressのインストール

wordpressをインストールする。
ダウンロードページを確認し「tar.gzをダウンロード」のURLをコピーする。

コンソールへ戻ってnginxのDocumentRootへ移動する。
今回は/var/www/htmlを選択した。

cd /var/www/html

コピーしたURLでWgetする。

Wgetが入ってない環境の場合はここでインストールしておこう。

dif install -y wget
wget https://ja.wordpress.org/latest-ja.tar.gz

その後、tarを解凍する。

tar -zxvf ./latest-ja.tar.gz

[wordpress]というディレクトリができるので、そのまま使うもいいしTOPページからWordpressにしたいならファイルを移動する。

mv ./wordpress/* ./

このままだと権限が付与されていないのでnginxのユーザーが読み込めるようにパーミッションを設定する。

chown -R nginx.nginx /var/www/html

SELinuxのラベルを付与する

chcon system_u:object_r:usr_t:s0 /var/www -R

サービスの起動

本来なら上記の手順の中で動作確認等しているはずだが、ここまで突っ切ってきた人はここでいよいよサービス起動になる。

systemctl start nginx
systemctl enable nginx
systemctl start php-fpm
systemctl enable php-fpm

ファイアウォール設定

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https

ルータで制限をかける人はstopしてしまってもよい。

アクセス

トラブルシューティング

「サイトに重大なエラーがありました」と表示される

PHPのVersionを確認する。
理屈までは調べてないがphp7.2だとWordpressの実行が失敗する。
CentOS8はGAがPHP7.2なので失敗しやすい事象だ。

php -v

このコマンドで7.2だったら7.4を入れなおして再度実行しよう。


ランキングアップにご協力いただけると幸いです。
にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村


よろしければ記事に対し、寄付を頂けますと幸いです。
頂いた寄付につきましてはszkhaven.comのサーバ運用資金、記事執筆の活動資金として使用させていただきます。

こちらの記事もおすすめです

data-matched-content-ui-type="image_card_stacked" data-matched-content-rows-num="3" data-matched-content-columns-num="1" data-ad-format="autorelaxed"