勉強、調べた内容の備忘録です。私は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以上とある。どっちゃねん。
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 日本語版
- WordPress パッケージをダウンロードして、解凍。
- サーバー上に、WordPress 用のデータベースと、そのデータベースへの全アクセス権・編集権を持つ MySQL ユーザーを作成。
- wp-config-sample.php ファイルの名前を wp-config.php に変更。
- 推奨テキストエディタで wp-config.php を開き、wp-config.php ファイルの編集記事の説明に従いデータベース情報と秘密鍵の値を記入。
- サーバー上の希望の場所に、WordPress ファイルを設置。
- ブラウザで 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
以下のようこそ画面が出たら、適当に情報を入力して先に進む。
ダッシュボードにアクセスできたら成功!
トラブルシュート
遭遇したエラーをいくつかご紹介。
- 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が表示された場合、
wp-config.phpに記載したデータベース情報に誤りがあり、データベースにアクセスできない状態。設定を見直す。
- File not found.
全部ちゃんと入れて設定したはずなのに、ブラウザアクセスしたときに、小さく「File not found.」と表示されるやつです。こんなやつ。
これは、NginXはちゃんと仕事をしてるんだけど、PHPとの連携がうまくいっていないときに出るものです。たぶん。これけっこう苦戦しました。単純に存在しないディレクトリへリクエストを出したケースとは別物です。
- NginXのCGI周りの設定が間違っている
- php-fpmが起動していない
- SELinuxによるアクセス制御にかかっている
このあたりが原因になっていると思います。私はSELinuxのアクセス制御に掛かって出ました。詳細は別のエントリに書こうと思います。
発生しちゃったら、NginXのconfファイルを見直す、php-fpmの起動状態を確認する、SELinuxの設定をOFFにしてみる、ってのをやってみると前進できるかもしれません。
おわり