Wordpressのインストール・セットアップ(CentOS7)

# はじめに
ここで紹介する手順は、技術検証用にローカル環境へWordpressをセットアップする手順です。
インターネット上で不特定多数に公開するための手順ではありませんので注意してください。

Wordpressは、PHPで記述されています。データストアには、MySQLを使用していますので、WordPressを動作させるために以下のインストール・セットアップが必要です。

* ApacheHTTPServer
* PHP
* MySQL

ここでは、以下のバージョンを使用してセットアップを行います。

* CentOS 7.1
* Wordpress  4.8.3
* ApacheHTTPServer 2.4
* PHP  7 
* MySQL  5.7 

Wordpressのインストール先を `/opt/wordpress` とします。
サーバ名を `wordpress.example.com` としてセットアップします。

# ApacheHTTPServerのインストール・セットアップ

ApacheHTTPServerがインストールされているか確認します。

```
# rpm -qa | grep httpd
```

インストールされていない場合は、インストールします。

```
# yum install -y httpd
```

ドキュメントルートディレクトリをあらかじめ作成しておきます。

```
# mkdir -p /opt/wordpress
```

`/etc/httpd/conf/httpd.conf`ファイルを編集し、ドキュメントルートディレクトリとアクセス制御の設定を変更します。

``` /etc/httpd/conf/httpd.conf
DocumentRoot "/opt/wordpress"
(省略)
<Directory />
    AllowOverride none
#    Require all denied ← コメントアウト
</Directory>

```

## ApacheHTTPServerの自動起動設定・サービス起動

```
# systemctl enable httpd.service
# systemctl start httpd.service
```

## SSLを使用する場合
HTTPSでアクセスするためには、サーバ証明書が必要です。
ここでは検証用に、オレオレ証明書（自己署名証明書）を作成してHTTPSでアクセスできるようにします。

#### SSLモジュールインストール
sslモジュールがインストールされていない場合、インストールします。

```
# yum install -y mod_ssl
```

#### サーバ証明書の作成（オレオレ）
opensslがインストールされている必要があります。インストールされていない場合、インストールしてください。

```
# yum install -y openssl openssl-devel
```

#### サーバ秘密鍵を作成  
以下のコマンドを実行して、サーバ秘密鍵を作成し、パスワードを設定します。

```
# cd /etc/httpd/conf
# openssl genrsa -aes128 1024 > server.key
Enter pass phrase:
```

#### 証明書リクエストを作成
以下のコマンドを実行して、証明書リクエストを作成します。
Common NameでサーバのFQDNを指定します。

```
# openssl req -new -key server.key > server.csr
(省略)
Common Name (eg, your name or your server's hostname) []:wordpress.example.com
```

#### 自己署名証明書を作成

```
# openssl x509 -in server.csr -days 3650 -req -signkey server.key > server.crt
Enter pass phrase for server.key: <秘密鍵のパスフレーズ>
```

#### httpd起動時にパスフレーズをたずねられないようにする

```
# mv server.key server.key.bak
# openssl rsa -in server.key.bak > server.key
Enter pass phrase for server.key.bak: <秘密鍵のパスフレーズ>
```

#### ssl設定ファイルの編集

`/etc/httpd/conf.d/ssl.conf` ファイルを編集して、HTTPSアクセスを許容し、サーバ証明書と秘密鍵を指定します。

``` /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
(省略)
  SSLCertificateFile /etc/httpd/conf/server.crt
  SSLCertificateKeyFile /etc/httpd/conf/server.key
(省略)
```

#### ApacheHTTPServerを再起動します。

```
# systemctl restart httpd.service
```

# PHPのインストール

WordpressのPHPバージョン要件が、PHP7以上です。
CentOSの標準リポジトリからはインストールできません。

PHP7をインストールできるようにするため、まず、epelリポジトリをインストールします。

```
# yum install -y epel-release
```

epelリポジトリを普段使用しないようにenable=0に変更しておきます。

``` /etc/yum.repos.d/epel.repo
enabled=1
↓
enabled=0
```


PHP7をインストールできるようにするため、Remiリポジトリをインストールします。

```
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum --enablerepo=epel,remi-php70 info php
```

※ epelリポジトリでエラーとなる場合は、/etc/yum.repos.d/epel.repo の baseurlのをアンコメントして有効化し、metalinkをコメントアウトします。

PHP7と関連モジュールをインストールします。

```
# yum --enablerepo=epel,remi-php70 -y install php php-cli php-devel php-common php-mbstring php-mysqlnd php-fpm php-gd php-gmp php-mcrypt php-opcache php-pdo php-xml
```

PHPのタイムゾーン設定を行います。

``` /etc/php.ini
date.timezone = Asia/Tokyo
```

# MySQLのインストール

ここでは、MySQL5.7をインストールします。  
MariaDBがインストールされている場合、削除します。

```
# rpm -qa | grep mariadb
mariadb-libs-5.5.41-2.el7_0.x86_64

# yum remove mariadb-libs
```

### MySQLリポジトリの追加・MySQLインストール
CentOS標準リポジトリの場合、MySQLをインストールすることができません。
MySQL5.7をインストールするために、yumリポジトリを追加します。

```
# wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
# yum localinstall -y mysql57-community-release-el7-8.noarch.rpm

# yum install -y mysql57-community-release
# yum install -y mysql-community-server mysql-community-devel
```

### MySQLの自動起動設定追加・サービス起動

```
# systemctl enable mysqld.service
# systemctl start mysqld.service
```

### MySQL初期化

```
# mysqld --user=mysql --initialize
```

rootの一時パスワードがログへ出力されるので控えておきます。

```
# less /var/log/mysqld.log
[Note] A temporary password is generated for root@localhost: afrQdh-b3<>T
```

### mysql_secure_installation を実行

```
# mysql_secure_installation
```

* rootパスワードの再設定
* VALIDATE PASSWORD pluginの設定
* anonymousユーザの削除
* testデータベース削除
* Privileges(権限)の再読み込み
を実行します。
yかnで選択していきます。
ローカルで使用するテスト環境等の場合は、面倒なのでrootパスワードの再設定くらいでよいかな。

MySQLの設定をいじりたい場合は、`/etc/my.cnf` ファイルを編集してサービスを再起動してください。
ここでは省略します。

## Wordpressデータベースの作成

### データベースおよびユーザの作成

wordpressデータベースを作成します。
また、wordpressユーザを作成し、データベースへの権限を与えます。

```
# mysql -u root -p
Enter password:

mysql> create database wordpress;

mysql> grant all privileges on wordpress.* to wordpress identified by 'password' with grant option;

mysql> flush privileges;

mysql> quit
```

## Wordpressのセットアップ

### Wordpressのダウンロード・解凍

[wordpress.org](https://wordpress.org/download/) から WordPress パッケージをダウンロードします。
ここでは、tar.gz形式をダウンロードします。
ダウンロードしたときの最新バージョンは、4.8.3でした。

```
# cd tmp
# wget http://wordpress.org/latest.tar.gz
```

インストール先(/opt)へ解凍します。

```
# cd /opt
# tar xzf /tmp/latest.tar.gz

```

### wp-config.phpファイルを編集

/opt/wordpressに `wp-config.php`ファイルを作成し、設定を行います。
元となるサンプルファイル`wp-config-sample.php`があるのでコピーします。

```
# cd /opt/wordPress
# cp wp-config-sample.php wp-config.php
```

DBの設定
MySQLの設定で指定したデータベース名、ユーザ名、パスワードを記述します。

認証ユニークキーの設定
以下のURLへアクセスし表示される内容を使用して設定を行います。
https://api.wordpress.org/secret-key/1.1/salt/

`wp-config.php`ファイルの記述は、以下のようになります。

```wp-config.php
define('DB_NAME', 'wordpress');

define('DB_USER', 'wordpress');

define('DB_PASSWORD', 'password');

define('DB_HOST', 'localhost');

define('AUTH_KEY',         '4+Ju:g,XePI|60}}K.S8b+f!6:OM`cR#L_]+,ozm...');
define('SECURE_AUTH_KEY',  '><HY~R#h s];#`LW%LV%}*vl;W.G:w?ihs+y7&xe...');
define('LOGGED_IN_KEY',    'u ?jcw<cv]sK7r.0&-/v1s>=IbG&!qk?yos,H}Y8...');
define('NONCE_KEY',        '*&b:=^KMf94Funs8(elX^|bMl1]v?ZRqozr9CUSH...');
define('AUTH_SALT',        '+aArlG&LP[>a,xnxTnPHe4vX6&*!MPT5LutNs3`7...');
define('SECURE_AUTH_SALT', 't(#8Tn]z9c-A[N.2v_8;SY.LPH|]KalzgZ5ZQJ!4...');
define('LOGGED_IN_SALT',   '96#|T]l>1A!MFX*ks.nv$*!bDh[?.+){9,ONs=`4...');
define('NONCE_SALT',       '-[|d`?Q(`.0AIojozQ>*E|T.H:Y$^Af5-/:[ee_d...');

```

### インストールアクセスポイントへアクセス

下記のインストールアクセスポイントへブラウザでアクセスします。
SSL証明書が、オレオレ証明書のため、警告画面が出ますが、無視してください。  
wordpress.example.comでアクセスできるよう、ブラウザ（クライアント）側のhosts設定を行っておいてください。  
1. https://wordpress.example.com/wp-admin/install.php へアクセス
2. Site title（サイト名）、ユーザ名（管理者）、パスワード、メールアドレス、検索エンジンの表示を設定します。
3. 各設定後、`InstallWordpress`ボタンをクリックします。
4. Loginボタンからログイン画面を表示して、2.で設定したユーザ名・パスワードでログインします。
5. Dashboard画面が表示されれば、ログイン成功です。

アクセスできない場合は、firewalldなどアクセス制御ではじかれていないか確認してください。

## セットアップ完了

Wordpressを使用する環境が整いました。
今回はこれで終了です。