ホンモノのエンジニアになりたい

ITやビジネス、テクノロジーの話を中心とした雑記ブログです。

Wordpressのお勉強-CentOS7に手動インストール

Let's install wordpress


勉強、調べた内容の備忘録です。私はWordpress初心者なので無駄なことをしているかもしれませんが、とりあえず素のCentOS7からWordpress動かせるところまでの作業内容をまとめます。

 

いまさらCentOS7かよ、というツッコミをしたい方もいるでしょう。私もそう思っています。いま私が諸々やっているサービスがCentOS7なんすよ。

あぁCentOS∞勉強しないとなぁ。

 

 

インストール環境と目指す構成

ゴールは以下の環境上でWordpressを動作させるところまで。

  • VirtualBoxに立てたCentOS7
  • NginX
  • MariaDB
# CentOSのバージョン
cat /etc/centos-release

# -> CentOS Linux release 7.4.1708 (Core)

echo "あぁ、古い・・・"

 

VirtualBoxでやっているので、基本rootユーザでやっています。参考にされる方は適宜sudoするなりなんなりの対応を。ネットワーク設定などOSサイドの基本設定は完了しているものとして触れません。

あと、『とりあえず動くところまで』なのでセキュリティや高速化のチューニングも考慮していません。 

 

インストール要件やらの情報収集

まずはインストールのために調べた内容の整理からいきます。

本家の推奨構成

サーバーの用意 - WordPress Codex 日本語版

PHPバージョン 5.6 以上
MySQL 5.6/MariaDB 10.0 以上

 

2019年中にPHPのミニマムバージョンを7系にするかも、というアナウンスがありました。

News – Minimum PHP Version update – WordPress.org

 

そしてこちらも公式。こっちのページにはPHP7.3以上とある。どっちゃねん。

要件 | WordPress.org 日本語

PHP バージョン 7.3 以上。
MySQL バージョン 5.6 以上、または MariaDB バージョン 10.1 以上。
HTTPS 対応

 

とりあえず7.3以上をターゲットにしてやってみましょう。

 

PHPサポートタイムライン

PHPのサポートタイムラインはこちら。

https://www.php.net/supported-versions.php

毎年11月末から12月頭にかけて、新バージョンがリリースされています。リリースから2年間はActive Supportという形でバグとセキュリティ不具合に対応してくれる。その後の1年間はSecurity Supportという形でセキュリティ不具合だけアップデートしてくれるようです。最長でも3年周期でバージョンアップしなくてはならない。(個人で運用するとなるとこれがキツイんだよなぁ。)

 

19/11/28に最新版7.4がリリースされています。

やっぱり今からやるなら、7.3か7.4のインストールが正解になりそうですね。

 

公式のインストール手順

有名な(?)5分間インストールとやらを含む、公式のインストール手順です。

WordPress のインストール - WordPress Codex 日本語版

  1. WordPress パッケージをダウンロードして、解凍。
  2. サーバー上に、WordPress 用のデータベースと、そのデータベースへの全アクセス権・編集権を持つ MySQL ユーザーを作成。
  3. wp-config-sample.php ファイルの名前を wp-config.php に変更。
  4. 推奨テキストエディタで wp-config.php を開き、wp-config.php ファイルの編集記事の説明に従いデータベース情報と秘密鍵の値を記入。
  5. サーバー上の希望の場所に、WordPress ファイルを設置。
  6. ブラウザで wp-admin/install.php へアクセスし、インストールスクリプトを実行。

 

これによると、Wordpressのファイルを取得・編集・アップロードするのは、1,3,4,5ですね。これが一つの塊。2はDBの話で、6はブラウザアクセス。

DBサーバ、Webサーバ、PHPの設定の話は出てきていません。

 

先に決めておくこと

インストールのなかで人間が考えておかないといけないことです。このエントリではわかりやすさ重視にしました。笑

 

Wordpressの設置場所 /var/www/wordpress
MariaDBのrootパスワード mariachan
データベース名 wpdb
データベースユーザ名 wpdbuser
データベースパスワード wpdbpass

 

私的5分間インストール開始

準備

最初に必要なOSの設定から。wgetのインストール、F/Wの穴あけです。 

# wgetの有無を確認。なければインストール
yum list installed |grep wget
yum install wget

# httpとhttpsを通すようにファイアウォールを設定
firewall-cmd --list-all
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
firewall-cmd --list-all

  

NginX

続いて、Webサーバのお仕事をしてくれるNginX。まずはインストールのためのレポジトリの登録。

# レポジトリ追加。ファイルを作って以下の内容を書き込む
vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

# ファイルが作成されたことを確認
ls -l /etc/yum.repos.d |grep nginx

 

yumで覗いて、ちゃんとレポジトリの設定が効いているか見てみる。最新版はNginXのオフィシャルで確認できる。本家(nginx: download)

# yum infoでレポジトリとバージョンをチェケラ
yum info nginx

# NginXレポジトリからであることを確認。19/12/13時点では
# バージョン:1.16.1
# リリース:1.el7.ngx

 

レッツインストール。 

# インストール
yum install nginx

nginx -v
# -> nginx version: nginx/1.16.1

 

とりあえず動作するようにconfファイルを設定する。見られちゃまずい管理ファイルを弾いたり、そもそもconfは別ファイルに分割するのがお行儀よい作法です。

# NginXのconfを編集(お勉強中なので、とりあえず動くconf)
vi /etc/nginx/conf.d/default.conf

server {
    listen 80;
   server_name localhost;
    #charset koi8-r;
   #access_log /var/log/nginx/host.access.log main;
    location / {
       root /var/www/wordpress;
       index index.php index.htm;
   }
    #error_page 404 /404.html;
    # redirect server error pages to the static page /50x.html
   #
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
       root /usr/share/nginx/html;
   }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
   #
   #location ~ \.php$ {
   # proxy_pass http://127.0.0.1;
   #}
    try_files $uri $uri/ /index.php?q=$uri&$args;
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
   #
   location ~ \.php$ {
       root /var/www/wordpress;
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME /var/www/wordpress$fastcgi_script_name;
       include fastcgi_params;
   }
    # deny access to .htaccess files, if Apache's document root
   # concurs with nginx's one
   #
   #location ~ /\.ht {
   # deny all;
   #}
}

 

構文チェックを動かして、サービスの登録と起動。

# 構文チェック
nginx -t

# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful


# サービス起動設定とサービス起動
systemctl enable nginx
systemctl start nginx

 

PHP

PHPは、remiレポジトリを登録し、インストール可能なバージョンを調べてインストール。

# インストール済みか確認する
yum list installed |grep php*

# もしバージョン7.3未満がインストール済みだったらアンインストール
yum remove php-*

# remiレポジトリを入れる
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# 利用可能なphpバージョンを調べる
ls -l /etc/yum.repos.d |grep remi-php*

# -rw-r--r--. 1 root root 456 9月 6 15:31 remi-php54.repo
# -rw-r--r--. 1 root root 1314 9月 6 15:31 remi-php70.repo
# -rw-r--r--. 1 root root 1314 9月 6 15:31 remi-php71.repo
# -rw-r--r--. 1 root root 1314 9月 6 15:31 remi-php72.repo
# -rw-r--r--. 1 root root 1314 9月 6 15:31 remi-php73.repo
# -rw-r--r--. 1 root root 1314 9月 6 15:31 remi-php74.repo

# PHP7.4の詳細を確認
yum info --enablerepo=remi,remi-php74 php

# 諸々インストール
yum install --enablerepo=remi,remi-php74 php php-fpm php-mysql php-mbstring

# バージョン確認
php -v

# -> PHP 7.4.0 (cli) (built: Nov 26 2019 20:13:36) ( NTS )

# php-fpmのconfファイルを編集(NginXで使えるように)
# デフォルトではuserとgroupがapacheとなっているので,nginxに変更
vi /etc/php-fpm.d/www.conf

user = nginx
group = nginx

# サービス起動状態確認、起動、自動起動設定
systemctl status php-fpm
systemctl start php-fpm
systemctl enable php-fpm

# NginXのインストールをやっておかないと起動時にエラーとなる

 

Wordpress

ここでようやくWordpress氏の登場。wgetで持ってきて展開してゴニョゴニョいじっていく。

# tmpディレクトリにWordpress本体をダウンロード
cd /tmp
wget https://ja.wordpress.org/latest-ja.tar.gz

# tar解凍、所有者変更
tar -xzvf latest-ja.tar.gz
chown -R nginx:nginx wordpress

# configリネーム
mv wordpress/wp-config-sample.php wordpress/wp-config.php

# リネームしたwp-config.phpにDB情報と鍵&ソルトを設定
vi wordpress/wp-config.php

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'wpdb' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'wpdbuser' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'wpdbpass' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );
/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8' );
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );

・・・

define('AUTH_KEY', ')>NQnqnU9R _x0H dX`tzuy9k@wqi;_cKtTF@l0|)A7X6Kxr*<:Vw[UDl-?(QGl.');
define('SECURE_AUTH_KEY', '+7~nEe[B$k5`MC& fr)P!OKgscmMBx2v!JB|@JXyE6EBg3tSBOj03!S$6|7F1R!}');
define('LOGGED_IN_KEY', '_ca]F30`y4Pt0cz}_HcNtDy8J=4qV.qzu8:isPMRqi*@1/viOA+OVu3C%>dZ%*`6');
define('NONCE_KEY', 'NNW9:M,5&rf|dn;+Xu pg_s?U,-]U(yZUubbysC=8g!pTK-Nv{l&uvURkfaLhTn~');
define('AUTH_SALT', '6m|.BP<-Sa;-^w@PkFTB|z--$JI}nRX+kcZ(K/Inv*IV!&)|u8*2jyeUE.#z+-P@');
define('SECURE_AUTH_SALT', 'LJ1Un,V!O>{,vzxD f}!c|FB2E6OS%-PQT!_rX%09=~]cOOPq;5-YrL- iK|-8=y');
define('LOGGED_IN_SALT', 'kEYptZ5k Up375UOhmJHcYU-rfl]q|V)&;9TsSvbN$1gxHf6nx5g+Tzzpws/^5K');
define('NONCE_SALT', '&;)l^=9^@-ln?<yE&Ok+2SVJ7Zz-jd A84ZcpGEGNLc;c0p`0wErg6A-mq-c.U4$');

# wordpressディレクトリを公開ディレクトリへ移動
mv wordpress /var/www/

鍵とソルトの設定は公式がツールを公開してくれているので、素直にそれを使えばいいと思います。↓にアクセスしてマルっとコピペ。

https://api.wordpress.org/secret-key/1.1/salt/

 

 

MariaDB

MariaDBは公式の言う通りにシェルに打ってインストールしていける。

MariaDB Package Repository Setup and Usage - MariaDB Knowledge Base

# 公式の通りにレポジトリを作成する
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash

# レポジトリが作成されたことを確認
ls -l /etc/yum.repos.d |grep maria*
# -rw-r--r--. 1 root root 794 12月 13 22:38 mariadb.repo

# 本体とクライアントをインストール
yum install MariaDB-server MariaDB-client

# サービス自動起動設定、サービス起動
systemctl enable mariadb
systemctl start mariadb

# バージョン確認
mysql --version
# -> mysql Ver 15.1 Distrib 10.4.11-MariaDB, for Linux (x86_64) using readline 5.1

# インストールスクリプトを実行(MariaDBが起動していないと進めない)
# 対話型で聞かれるところだけ記載します。
mysql_secure_installation

Enter current password for root (enter for none):(そのままEnter)
・・・
Switch to unix_socket authentication [Y/n] n
・・・
Change the root password? [Y/n] Y
・・・
New password: mariachan ←DBのrootユーザのパスワード
Re-enter new password: mariachan
・・・
Remove anonymous users? [Y/n] Y
・・・
Disallow root login remotely? [Y/n] Y
・・・
Remove test database and access to it? [Y/n] Y
・・・
Reload privilege tables now? [Y/n] Y

 

本体が入ったら、Wordpressで必要となるデータベースを作成する。 

# DBアクセス
mysql -u root -p
# Enter password:mariachan

# データベース確認、作成
show databases;
CREATE DATABASE wpdb;

# 権限付与(ユーザが存在しない場合は自動的に作成される)
GRANT ALL PRIVILEGES ON wpdb.* TO "wpdbuser"@"localhost" IDENTIFIED BY "wpdbpass";

# データベース確認、ユーザ作成確認
show databases;
SELECT Host, User FROM mysql.user;

# 設定反映させて抜ける
FLUSH PRIVILEGES;
EXIT

 

ブラウザアクセス-インストールスクリプトを走らせる

前節まででサーバ側に投入するソフトウェア、設定は完了です。ブラウザでサーバにアクセスしてWordpressのインストールスクリプトを動かします。

 http://ドメインかIPアドレス/wp-admin/install.php

 

以下のようこそ画面が出たら、適当に情報を入力して先に進む。

ようこそ画面

 

ダッシュボードにアクセスできたら成功!

Dashboard画面

 

トラブルシュート

 遭遇したエラーをいくつかご紹介。

 

  • ERROR 1146 (42S02) at line 1: Table 'mysql.global_priv' doesn't exist

DBの起動時に出るやつです。古いバージョンからバージョンアップしているか、過去に古いバージョンを保持していた場合に出るエラーのようです。バージョン5系からのバージョンアップや、レポジトリを指定する前にyumしちゃって、消したときに出ます。出ました。

最新版を入れる前に、/var/lib/mysql ディレクトリをごっそり削除して入れなおすとエラーが出なくなります。

 

  • Error establishing a database connection

以下のError establishing a database connectionが表示された場合、

DB情報の設定ミスで表示される画面

wp-config.phpに記載したデータベース情報に誤りがあり、データベースにアクセスできない状態。設定を見直す。

 

 

  • File not found.

全部ちゃんと入れて設定したはずなのに、ブラウザアクセスしたときに、小さく「File not found.」と表示されるやつです。こんなやつ。

File not foundエラーの画面コピー

 

これは、NginXはちゃんと仕事をしてるんだけど、PHPとの連携がうまくいっていないときに出るものです。たぶん。これけっこう苦戦しました。単純に存在しないディレクトリへリクエストを出したケースとは別物です。

  1. NginXのCGI周りの設定が間違っている
  2. php-fpmが起動していない
  3. SELinuxによるアクセス制御にかかっている

このあたりが原因になっていると思います。私はSELinuxのアクセス制御に掛かって出ました。詳細は別のエントリに書こうと思います。

発生しちゃったら、NginXのconfファイルを見直す、php-fpmの起動状態を確認する、SELinuxの設定をOFFにしてみる、ってのをやってみると前進できるかもしれません。

 

おわり