WordPress検証用サーバを仮想マシンで構築(CentOS 7)

WordPress用検証サーバを仮想マシンで構築します。HTTPサーバは、Nginxを使用しますがApacheでも動作するように設定します。

はじめに

以下の順で検証環境を構築します。
・Virtualboxによる仮想マシンの作成
・CentOS 7のインストールと初期設定
・外部リポジトリの追加
・ユーティリティのインストール
・SSL通信用の電子証明書の作成(自己署名証明書)
・Apacheのインストールと初期設定
・PHPのインストールと初期設定
・Nginxのインストールと初期設定
・MariaDBのインストールと初期設定
・WordPressのインストールと初期設定

作業用パラメータ

作業用のパラメータを決めておきます。

サーバ設定

ホスト名:vm001
IPアドレス:192.168.11.101/24
デフォルトゲートウェイ:192.168.11.1
DNSサーバ:192.168.11.1
管理者ユーザ名:admin001
管理者UID:1001

WordPressのDB接続設定

データベース名:db01
データベースのユーザー名:db01admin
データベースのパスワード:db01admin_pwd
データベースホスト:localhost
データベースの接頭辞 :wp_

WordPressのサイト設定

サイトのタイトル:検証用サイト
サイトのユーザー名:admin001
サイトのユーザーのパスワード:admin001_pwd
サイトのメールアドレス:admin001@example.com

Virtualboxによる仮想マシンの作成

Virtualboxで検証サーバ用の仮想マシンを作成します。

CentOS 7のインストールと初期設定

CentOS 7のインストール

仮想マシン上にCentOS 7をMinimumでインストールします。インストール完了後、rootユーザでログインし、CentOSのバージョンを確認します。

# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

作業用管理者ユーザの追加

作業用の管理者ユーザを登録し、作成した管理者ユーザでログインし直します。

# useradd -u 1001 -g wheel admin001
# passwd admin001
# exit

ネットワークの設定

ホスト名の設定を行います。

$ sudo hostnamectl set-hostname vm001

次に、ネットワークの設定を行います。ネットワーク接続の設定が終わったら、ヘッドレスモードで起動して、terminalからログインしたほうが作業がしやすいです。

$ nmcli device
DEVICE  TYPE      STATE      CONNECTION 
enp0s3  ethernet  connected  enp0s3     
lo      loopback  unmanaged  --        
      --
$ sudo nmcli connection modify enp0s3 ipv4.method manual ipv4.addresses 192.168.11.101/24
$ sudo nmcli connection modify enp0s3 ipv4.gateway 192.168.11.1
$ sudo nmcli connection modify enp0s3 ipv4.dns 192.168.11.1
$ sudo systemctl restart NetworkManager
$ nmcli device show enp0s3
GENERAL.DEVICE:                         enp0s3
...
IP4.ADDRESS[1]:                         192.168.11.101/24
IP4.GATEWAY:                            192.168.11.1
IP4.DNS[1]:                             192.168.11.1
...             

SELinuxの設定

SELinuxによるセキュリティは設定を見極めるまで無効化しますが、セキュリティ違反があったことをログで確認できるように”Permissive”モードで動作させます。再起動して変更が有効であるか確認します。

$ sudo vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=permissive
$ sudo systemctl reboot

再起動後ログインして、”Permissive”モードであることを確認します。

$ getenforce
Permissive

外部リポジトリの登録

標準リポジトリより新しいバージョンをインストールする場合のため、外部リポジトリを登録します。

yum-prioritiesのインストール

リポジトリ間の優先順位を設定するパッケージをインストールします。

$ sudo yum -y install yum-priorities

EPELリポジトリの登録

EPELリポジトリを登録します。

$ sudo yum -y install epel-release

一時利用に設定します。

$ sudo vi /etc/yum.repos.d/epel.repo
enabled=0

Remi’s RPM repositoryの登録

Remi’s RPM repositoryを登録します。

$ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

一時利用に設定します。

$ sudo vi /etc/yum.repos.d/remi-safe.repo
enabled=0

Nginxのリポジトリを一時利用で登録します。

$ sudo vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=0

ユーティリティのインストール

以後の作業等で必要になるユーティリティをインストールしておきます。

wgetのイントール

WordPress等のモジュールのダウンロード用に、wgetコマンドをインストールします。

$ sudo yum -y install wget

zip/unzipのイントール

コンテンツなどのアーカイブの移動用に、zipおよびunzipコマンドをインストールします。

$ sudo yum -y install zip unzip

SSL通信用の電子証明書の作成(自己署名証明書)

検証用のサーバで使用する電子証明書を事前に作成しておきます。検証用なので自己署名証明書で作成します。

$ openssl genrsa 2048 > server.key
Generating RSA private key, 2048 bit long modulus
.....................................+++
......................................+++
e is 65537 (0x10001)
$ openssl req -new -key server.key > server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:Test Unit
Common Name (eg, your name or your server's hostname) []:www.testunit.jp
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=JP/L=Default City/O=Default Company Ltd/OU=Test Unit/CN=www.testunit.jp
Getting Private key

作成した電子証明書をNginxとApache用にコピーしておきます。

$ sudo cp ~/server.crt /etc/pki/tls/certs
$ sudo cp ~/server.key /etc/pki/tls/private
$ sudo chmod 600 /etc/pki/tls/certs/server.crt
$ sudo chmod 600 /etc/pki/tls/private/server.key
$ ls -l /etc/pki/tls/certs
$ ls -l /etc/pki/tls/private

Apacheのインストールと初期設定

Apacheをインストールします。SSLが使用できるようにmod_sslもインストールします。

$ sudo yum -y install httpd mod_ssl
$ httpd -version
Server version: Apache/2.4.6 (CentOS)
Server built:   Oct 19 2017 20:39:16

通信制御の設定変更を行い、80/tcpと443/tcpの通信を許可します。

$ sudo firewall-cmd --add-port=80/tcp --zone=public --permanent
$ sudo firewall-cmd --add-port=443/tcp --zone=public --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all --zone=public | grep tcp
  ports: 80/tcp 443/tcp

SSL通信用の設定を行います。

$ sudo cp -p /etc/httpd/conf/httpd.conf ~/httpd.conf_org
$ sudo vi /etc/httpd/conf.d/rewrite.conf
<ifModule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{HTTPS} off
      RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</ifModule>
$ sudo cp -p /etc/httpd/conf.d/ssl.conf ~/ssl.conf_org
$ sudo vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/certs/server.key

Apacheを起動します。

$ sudo systemctl start httpd.service
$ sudo systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2017-11-23 17:36:36 JST; 7s ago
...

ブラウザからアクセスして、httpsにリダイレクトされてトップページが表示されることを確認します。

http://192.168.11.101/

PHPのインストールと初期設定

PHPをインストールします。標準リポジトリを使用するとPHP 5.4がインストールされます。比較的古いバージョンなので、新規で使用する場合は、Remi’s RPM repositoryより最新のPHP 7をインストールしましょう。以下、標準リポジトリを使用した場合と、Remi’s RPM repositoryを使用してPHP 7.1をインストールした場合の手順になります。

PHPのインストールと初期設定(標準リポジトリ)※PHP7.1をインストールする場合不要

標準リポジトリを使用してPHPをインストールします。標準リポジトリを使用するとPHP 5.4がインストールされます。

$ sudo yum -y install php-mysql php php-gd php-mbstring
$ php --version
PHP 5.4.16 (cli) (built: Nov 15 2017 16:33:54)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

PHPの初期設定を行います。タイムゾーン、PHPのバージョン出力、日本語に関連する設定を行います。

$ sudo cp -p /etc/php.ini ~/php.ini_org
$ sudo vi /etc/php.ini
expose_php = Off
default_charset = UTF-8
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
mbstring.strict_detection = Off

動作確認を行います。

$ cd /var/www/html
$ sudo vi phpcheck.php
<?php
    phpinfo();
?>
$ sudo chmod 755 phpcheck.php
$ sudo 755 phpcheck.php
$ sudo systemctl stop httpd
$ sudo systemctl start httpd

ブラウザからアクセスして、PHPのインストール情報のページが表示されることを確認します。

http://192.168.11.101/phpcheck.php

PHP 7のインストールと初期設定(Remi’s RPM repository)

PHP 7.1をインストールします。PHP 5.4など旧バージョンをインストールしている場合は、念のためアンインストールしておきます。

sudo yum remove php-*

Remi’s RPM repositoryとEPELリポジトリを使用してPHP 7.1をインストールします。

$ sudo yum -y install --enablerepo=remi-safe,remi-php71,epel php php-mbstring php-pear php-fpm php-mcrypt php-mysql php-gd php-opcache php-pecl-apcu-bc
$ php --version
php --version
PHP 7.1.12 (cli) (built: Nov 22 2017 08:25:12) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.12, Copyright (c) 1999-2017, by Zend Technologies

PHPの初期設定を行います。タイムゾーン、PHPのバージョン出力、日本語に関連する設定を行います。

$ sudo cp -p /etc/php.ini ~/php.ini_org
$ sudo vi /etc/php.ini
expose_php = Off
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
mbstring.strict_detection = Off

※PHP 7.1では、”default_charset = UTF-8″は設定済み。

動作確認を行います。

$ cd /var/www/html
$ sudo vi phpcheck.php
<?php
    phpinfo();
?>
$ sudo chmod 755 phpcheck.php
$ sudo systemctl stop httpd
$ sudo systemctl start httpd

ブラウザからアクセスして、PHPのインストール情報のページが表示されることを確認します。

http://192.168.11.101/phpcheck.php

Nginxのインストールと初期設定

Apacheを停止します。

$ sudo systemctl stop httpd
$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Nginxをインストールします。

$ sudo yum -y --enablerepo=nginx install nginx
$ nginx -v
nginx version: nginx/1.12.2

Nginxの初期設定を行います。

$ sudo cp -p /etc/nginx/conf.d/default.conf ~/default.conf_org
$ sudo vi /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;
    return 301 https://$host$request_uri;
}

server {
    listen       443 ssl;
    server_name  localhost;

    ssl on;
    ssl_certificate      /etc/pki/tls/certs/server.crt;
    ssl_certificate_key  /etc/pki/tls/private/server.key;
...
    location / {
        root   /var/www/html;
        index  index.html index.htm index.php;
    }
...
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

Nginxを自動起動するように設定します。

$ sudo systemctl enable nginx.service
$ sudo systemctl list-unit-files | grep nginx.service
nginx.service                                 enabled

Nginxを起動します。

$ sudo systemctl start nginx.service
$ sudo systemctl status nginx.service
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-11-25 14:23:15 JST; 15min ago
...

テストページ表示用のHTMLを作成します。

$ sudo vi /var/www/html/index.html
$ sudo vi /etc/php-fpm.d/www.conf
<html>
<body>
Welcome to web server test page!
</body>
</html>

ブラウザからアクセスして、httpsにリダイレクトされてトップページが表示されることを確認します。

http://192.168.11.101/

PHP-FPMの設定を変更します。

$ sudo cp -p /etc/php-fpm.d/www.conf ~/www.conf_org
$ sudo vi /etc/php-fpm.d/www.conf
user = nginx
group = nginx

PHP-FPMを自動起動するように設定します。

$ sudo systemctl enable php-fpm
$ sudo systemctl list-unit-files | grep php-fpm
php-fpm.service                               enabled

PHP-FPMを起動します。

$ sudo systemctl start php-fpm
$ sudo systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-11-25 14:15:02 JST; 49s ago
...

ブラウザからアクセスして、HTTPにリダイレクトされて、PHPのインストール情報のページが表示されることを確認します。

http://192.168.11.101/phpcheck.php

Apacheでも動作可能なようにApacheのユーザとグループをnginxに変更します。

$ sudo vi /etc/httpd/conf/httpd.conf
User nginx
Group nginx

MariaDBのインストールと初期設定

MariaDBをインストールします。

$ sudo yum -y install mariadb mariadb-server
$ mysql --version
mysql  Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1

MariaDBを自動起動するように設定します。

$ sudo systemctl enable mariadb.service
$ sudo systemctl list-unit-files | grep mariadb.service
mariadb.service                               enabled 

MariaDBを起動します。

$ sudo systemctl start mariadb.service
$ sudo systemctl status mariadb.service
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2017-11-23 19:15:41 JST; 6s ago
...

MariaDBのインストール後の設定を行います。

$ cd
$ mysql_secure_installation
Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

MariaDBの設定を変更します。

$ sudo cp -p /etc/my.cnf.d/server.cnf ~/server.cnf_org 
$ sudo vi /etc/my.cnf.d/server.cnf
[mysqld]
character-set-server=utf8

MariaDBを再起動します。

$ sudo systemctl stop mariadb.service
$ sudo systemctl start mariadb.service
$ sudo systemctl status mariadb.service
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2017-11-23 19:15:41 JST; 6s ago
...

MariaDBにログインし、DBの一覧と文字コードの設定を出力してみます。

$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.56-MariaDB MariaDB Server

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

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

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.05 sec)

MariaDB [(none)]> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

MariaDB [(none)]> exit

Bye

WordPressのインストールと初期設定

WordPressをダウンロードし、展開します。

$ cd /tmp
$ wget http://wordpress.org/latest.tar.gz
$ cd /var/www/html
$ sudo tar -xzvf /tmp/latest.tar.gz
$ sudo chown -R nginx:nginx wordpress

WordPress用のDBを作成します。

mysql -u root -p
CREATE DATABASE db01;
GRANT ALL PRIVILEGES ON db01.* TO "db01admin"@"localhost" IDENTIFIED BY "db01admin_pwd";
FLUSH PRIVILEGES;
EXIT

Nginxを再起動します。

$ sudo systemctl stop nginx.service
$ sudo systemctl start nginx.service
$ sudo systemctl status nginx.service
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-11-25 14:23:15 JST; 15min ago
...

WordPressの設定を開始します。

http://192.168.11.101/wordpress/wp-admin/install.php

最初に言語(日本語等)を選択して、セットアップを開始します。DB接続情報として、以下を設定します。

    データベース名:db01
    データベースのユーザー名:db01admin
    データベースのパスワード:db01admin_pwd
    データベースホスト:localhost
    データベースの接頭辞 (1つのデータベースに複数の WordPress を作動させる場合):wp_

サイトの情報として、以下を設定します。※脆弱なパスワードと指摘された場合はチェックを入れて…

    サイトのタイトル:検証用サイト
    ユーザー名:admin001
    パスワード:admin001_pwd
    メールアドレス:admin001@example.com

作成したユーザで、WordPressにログインします。

WordPressインストール後の作業

その他、WordPressインストール直後に、使用することがありそうな作業を記載しておきます。

作業用のファイルの削除

インストールの際に使用した不要なファイルを削除しておきます。

$ sudo rm -i /var/www/html/phpcheck.php
$ sudo rm -i /tmp/latest.tar.gz

サイトのトップページへのアクセス

サイトのトップのURLにアクセスした場合に表示するHTMLを配置しておきます。以下の例では、wordpressディレクトリにリダイレクトさせています。

$ vi /var/www/html/index.html
<html>
<head>
<meta http-equiv="refresh" content="0;URL=/wordpress/">
</head>
<body>
</body>
</html>

サイトのURLの修正

サイトのURLをいろいろ変更してWordPressが動作しなくなった場合は、DBのデータを直接修正します。

$ mysql -u root -p
MariaDB [(none)]> use wordpress
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [wordpress]> SELECT * FROM wp_options WHERE option_name IN ('home','siteurl');
+-----------+-------------+------------------------+----------+
| option_id | option_name | option_value           | autoload |
+-----------+-------------+------------------------+----------+
|         2 | home        | https://192.168.11.101/ | yes      |
|         1 | siteurl     | https://192.168.11.101/ | yes      |
+-----------+-------------+------------------------+----------+
2 rows in set (0.00 sec)

MariaDB [wordpress]> UPDATE wp_options SET option_value = 'http://192.168.11.91/wordpress/' where option_name IN ('home','siteurl');
Query OK, 2 rows affected (0.30 sec)
Rows matched: 2  Changed: 2  Warnings: 0

MariaDB [wordpress]> SELECT * FROM wp_options WHERE option_name IN ('home','siteurl');
+-----------+-------------+---------------------------------+----------+
| option_id | option_name | option_value                    | autoload |
+-----------+-------------+---------------------------------+----------+
|         2 | home        | http://192.168.11.101/wordpress/ | yes      |
|         1 | siteurl     | http://192.168.11.101/wordpress/ | yes      |
+-----------+-------------+---------------------------------+----------+
2 rows in set (0.00 sec)

WordPressのサイトのデータ移行

WordPressのサイトを検証用サーバにデータ移行して作成する場合について記載します。

DBデータの移行

DBバックアップを取得し、gzipコマンドで圧縮します。

$ mysqldump -u db_admin -h db_host -p db_name > db_backup
$ gzip db_backup

移行先サーバに転送し、解凍します。

$ cd /var/www/html
$ sudo scp server_name:/var/www/html/db_backup.gz .
$ sudo gzip -d db_backup.gz

移行先の用のDBを作成します。

$ mysql -u root -p
CREATE DATABASE db02;
GRANT ALL PRIVILEGES ON db02.* TO "db02admin"@"localhost" IDENTIFIED BY "db02admin_pwd";
FLUSH PRIVILEGES;
EXIT

DBをリストアします。

$ mysql -u db02admin -p db02 < db_backup

ファイルの移行

移行元でファイルをtarファイルにまとめ、gzipコマンドで圧縮します。

$ cd /var/www/html
$ tar -cvf wordpress.tar wordpress
$ gzip wordpress.tar 

移行先サーバに転送し、解凍後、オーナを変更します。

$ cd /var/www/html
$ sudo scp server_name:/var/www/html/wordpress.tar.gz .
$ sudo gzip -d wordpress.tar.gz
$ sudo tar -xvf wordpress.tar
$ sudo chown -R nginx:nginx wordpress

おわりに

以上で、WordPressのインストールと初期設定が完了しました。以降は、WordPressの管理画面を使用して、Webサイトのコンテンツを作成します。

コメント記入欄

※メールアドレス(任意入力)は非公開です。コメントはお気軽にどうぞ!

内容を確認して、「コメント送信」ボタンを押してください。

post date*

※日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)