CentOS7.4 on Microsoft AzureにWordPressをインストール

今日はWordPressをインストールしてみたいと思います。
今後も同じ事をすると思うので、メモしておきます。

#**インストール先環境**

- CentOS 7.4 on Microsoft Azure

#**準備**

###**epelリポジトリの追加**

epelリポジトリをインストール。

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

明示的にepelリポジトリを指定しないと使用できないように、リポジトリの設定を変更する。
私の場合、下記２つのファイルが存在していたので確認。

- epel.repo
- epel-testing.repo

epel.repoのみ有効化部分を発見したので、無効化。

```
# vi /etc/yum.repos.d/epel.repo
```

[epel]セクションの「enabled」を1から0に変更。

###**remiリポジトリの追加**

remiリポジトリをインストール。

```
# rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

remiリポジトリもepelリポジトリ同様に設定を変更する。
私の場合、下記５つのファイルが存在していたので確認。

- remi-php54.repo
- remi-php70.repo
- remi-php71.repo
- remi-php72.repo
- remi.repo
- remi-safe.repo

remi-safe.repoのみ有効化部分を発見したので、無効化。

```
# vi /etc/yum.repos.d/remi-safe.repo
```

[remi-safe]セクションの「enabled」を1から0に変更。

#**nginx**

###**nginxのインストール**

epelリポジトリを使用してnginxをインストール。

```
# yum install --enablerepo=epel nginx
```

###**WordPressインストール用ディレクトリを作成**

今回は「blog」というディレクトリを作成してみます。

```
# mkdir /usr/share/nginx/blog
# chown nginx:nginx /usr/share/nginx/blog/
```

###**WordPressをダウンロード**

最新版を取得。

```
# cd /usr/share/nginx/blog/
# wget https://ja.wordpress.org/latest-ja.tar.gz
```

###**WordPressを解凍**

```
# tar xvzf latest-ja.tar.gz
# chown -R nginx:nginx wordpress
```

###**nginxの設定**

展開したWordPressをnginxのバーチャルホストとして設定。

```
# cd /etc/nginx/conf.d
# vi blog.conf
```

設定内容は次の通り。
「server_name」と「root」は適宜読み替えて下さい。

```blog.conf
server {
  listen 80;
  server_name blog.hoge.com;
  root /usr/share/nginx/blog/wordpress;
  index index.php;
 
  charset utf-8;
 
# wordpress パーマネントリンク設定
  try_files $uri $uri/ /index.php?q=$uri&$args;
 
# wp-config.phpへのアクセス拒否設定
  location ~* /wp-config.php {
    deny all;
  }
 
# php-fpm用設定
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    include fastcgi_params;
  }
}
```

###**nginxを起動**

nginxを起動し、自動起動設定も行う。

```
# systemctl start nginx.service
# systemctl enable nginx.service
```

#**php**

###**php7、php-fpmをインストール**

remiリポジトリを使用してphp7をインストール。
php-fpmも併せてインストール。

```
# yum install --enablerepo=epel,remi-php72 php php-mbstring php-pear php-fpm php-mcrypt php-mysql
```

###**php-fpmの設定**

php-fpmをnginx上で動作するように設定。

```
# cd /etc/php-fpm.d/
# vi www.conf
```

設定内容は次の通り、実行ユーザー・グループをnginxに変更。

```www.conf
;user = apache
user = nginx
;group = apache
group = nginx
```

###**php-fpmを起動**

php-fpmを起動し、自動起動設定も行う。

```
# systemctl start php-fpm.service
# systemctl enable php-fpm.service
```

#**MariaDB**

###**MariaDBをインストール**

MariaDBをインストール。

```
# yum install mariadb mariadb-server
```

###**MariaDBを起動**

MariaDBを起動し、自動起動設定も行う。

```
# systemctl start mariadb.service
# systemctl enable mariadb.service
```

###**MariaDBの設定**

「mysql_secure_installation」を実行し、MariaDBを安全な状態に設定。

```
# mysql_secure_installation
```

現在のrootユーザーのパスワード。
まだ未設定なので「Enter」キーを押下。

```
Enter current password for root (enter for none):
```

rootユーザーのパスワードを設定するか否か。
設定するので「y」キーを押下し、パスワードを設定。

```
Set root password? [Y/n]
New password:
Re-enter new password:
```

最初から設定されているanonymousユーザーを削除するか否か。
削除するので「y」キーを押下。

```
Remove anonymous users? [Y/n]
```

rootユーザーでのリモートログインを禁止するか否か。
禁止するので「y」キーを押下。

```
Disallow root login remotely? [Y/n]
```

最初から設定されているtestデータベースを削除するか否か。
削除するので「y」キーを押下。

```
Remove test database and access to it? [Y/n]
```

今設定した各種設定を直ぐに反映させるか否か。
反映させるので「y」キーを押下。

```
Reload privilege tables now? [Y/n]
```

###**MariaDBの文字コードを設定**

WordPressのデータが文字化けしないようにMariaDBの文字コードを設定。

```
# cd /etc/my.cnf.d/
# vi server.cnf
```

設定内容は次の通り、[mysqld]セクションに下記を追加。

```server.cnf
character-set-server = utf8
```

設定を反映させる為にMariaDBを再起動。

```
# systemctl restart mariadb.service
```

###**WordPress用の設定**

MariaDBにWordPress用のデータベースとデータベース管理ユーザーを作成。

まず、MariaDBにrootユーザーで接続。

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

次に、WordPress用データベースとしてblogを作成。

```
MariaDB [(none)]> CREATE DATABASE blog;
```

最後に、WordPress用データベース管理ユーザーを作成。

```
MariaDB [(none)]> GRANT ALL PRIVILEGES ON blog.* TO "hogeuser"@"localhost" IDENTIFIED BY "hogepassword";
```

作成したユーザー情報を反映させ、作業を終了。

```
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
```

#**WordPress**

###**WordPressの設定**

wp-configの設定を行う。

まず、wp-config-sample.phpをコピーして、wp-config.phpを作成する準備。

```
# cd /usr/share/nginx/blog/wordpress/
# cp -p wp-config-sample.php wp-config.php
```

次に、wp-config.phpに下記項目を設定。

<table>
    <tr>
        <th>設定項目</th>
        <th>設定内容</th>
    </tr>
    <tr>
        <td>define(DB_NAME)</td>
        <td>blog</td>
    </tr>
    <tr>
        <td>define(DB_USER)</td>
        <td>hogeuser</td>
    </tr>
    <tr>
        <td>define(DB_PASSWORD)</td>
        <td>hogepassword</td>
    </tr>
    <tr>
        <td>define(AUTH_KEY)</td>
        <td rowspan="8">WordPressの秘密鍵サービス(https://api.wordpress.org/secret-key/1.1/salt/)の自動生成結果</td>
    </tr>
    <tr>
        <td>define(SECURE_AUTH_KEY)</td>
    </tr>
    <tr>
        <td>define(LOGGED_IN_KEY)</td>
    </tr>
    <tr>
        <td>define(NONCE_KEY)</td>
    </tr>
    <tr>
        <td>define(AUTH_SALT)</td>
    </tr>
    <tr>
        <td>define(SECURE_AUTH_SALT)</td>
    </tr>
    <tr>
        <td>define(LOGGED_IN_SALT)</td>
    </tr>
    <tr>
        <td>define(NONCE_SALT)</td>
    </tr>
    <tr>
        <td>$table_prefix</td>
        <td>blog_</td>
    </tr>
</table>

wp-config.phpを開く。

```
# vi wp-config.php
```

```wp-config.php
<?php
/**
 * WordPress の基本設定
 *
 * このファイルは、インストール時に wp-config.php 作成ウィザードが利用します。
 * ウィザードを介さずにこのファイルを "wp-config.php" という名前でコピーして
 * 直接編集して値を入力してもかまいません。
 *
 * このファイルは、以下の設定を含みます。
 *
 * * MySQL 設定
 * * 秘密鍵
 * * データベーステーブル接頭辞
 * * ABSPATH
 *
 * @link http://wpdocs.osdn.jp/wp-config.php_%E3%81%AE%E7%B7%A8%E9%9B%86
 *
 * @package WordPress
 */

// 注意:
// Windows の "メモ帳" でこのファイルを編集しないでください !
// 問題なく使えるテキストエディタ
// (http://wpdocs.osdn.jp/%E7%94%A8%E8%AA%9E%E9%9B%86#.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88.E3.82.A8.E3.83.87.E3.82.A3.E3.82.BF 参照
)
// を使用し、必ず UTF-8 の BOM なし (UTF-8N) で保存してください。

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'blog');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'hogeuser');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'hogepassword');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8');

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', '');

/**#@+
 * 認証用ユニークキー
 *
 * それぞれを異なるユニーク (一意) な文字列に変更してください。
 * {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵サービス} で自動生成することもできます。
 * 後でいつでも変更して、既存のすべての cookie を無効にできます。これにより、すべてのユーザーを強制的に再ログインさせることになりま
す。
 *
 * @since 2.6.0
 */
define('AUTH_KEY','McVW=3+b_RA6E!l<s`P38#Ep[2wpF1591mTvk}t20*nH5Q3#V2$ {|-|6EFO~#+ ');
define('SECURE_AUTH_KEY','JTgsPKc{+xOC&srLSh-21guBH-?WZ6}P=C{7vE1<I+.f2)$|Yz)t?{-7nB+7ej-@');
define('LOGGED_IN_KEY','[~Kfh@%:aO9l>Sg8,DlDi$=,)iJQB VsZEHpUj]o-Qj]-(rbY+o~|VLM:iS>4XhI');
define('NONCE_KEY','2|;SrI;-lg!cD>%s2eJ; L`8u A+TPinEkjcqGZjB`/JMxDqN4Q84tlh5e>w+;d&');
define('AUTH_SALT','q&Ezg9I(r$EHG1os?I}BY%7-/Jj]C*<f@ro,e,R=97t(O8`-9ys4T%[hg|{<u:h4');
define('SECURE_AUTH_SALT',' =oFw|ujGbbV^RDhzpD&Q7|*R*<J|-`n-n=;v;~m{IeGYWh%;M`pDv)[s4qn}!)e');
define('LOGGED_IN_SALT','0#~BU J~iP-B1n@@`m@{Li6uP%$9cG6*1k ;h+-jh*xd]I ,ws?e$GJw|M=T!C?T');
define('NONCE_SALT','Y50H1L_X(s/_bpi]_{VWRzyAP@DZ]B,KDMX%Tn,k+GCl4:aJs*9icD`GF+a!p<[n');

/**#@-*/

/**
 * WordPress データベーステーブルの接頭辞
 *
 * それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
 * インストールすることができます。半角英数字と下線のみを使用してください。
 */
$table_prefix  = 'blog_';

/**
 * 開発者へ: WordPress デバッグモード
 *
 * この値を true にすると、開発中に注意 (notice) を表示します。
 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
 *
 * その他のデバッグに利用できる定数については Codex をご覧ください。
 *
 * @link http://wpdocs.osdn.jp/WordPress%E3%81%A7%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0
 */
define('WP_DEBUG', false);

/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
        define('ABSPATH', dirname(__FILE__) . '/');

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');
```

###**blogの初期設定**

まず、下記URLにアクセスします。

[WordPress - インストールページ](http://blog.hoge.com/wp-admin/install.php)

![wordpress_install.png](https://qiita-image-store.s3.amazonaws.com/0/206277/90f1ac63-4b8b-d8b2-bae3-900ce3f64da0.png)

※私の場合、Microsoft Azure でLinux仮想マシンを構築したてでしたので、受信セキュリティ規則においてHTTP（TCP 80ポート）が開いておらず、最初アクセスできませんでした。もし、同じような現象に遭遇した場合、チェックしてみて下さい。

次に、blogの初期設定を行う。
下記を入力し、「インストール」ボタンをクリック。

<table>
    <tr>
        <th>設定項目</th>
        <th>設定内容</th>
    </tr>
    <tr>
        <td>タイトル</td>
        <td>hoge blog</td>
    </tr>
    <tr>
        <td>ユーザー名</td>
        <td>hogewpuser</td>
    </tr>
    <tr>
        <td>パスワード</td>
        <td>hogewppassword</td>
    </tr>
    <tr>
        <td>メールアドレス</td>
        <td>hogewpuser@hoge.com</td>
    </tr>
    <tr>
        <td>検索エンジンでの表示</td>
        <td>チェックOFF（※今回はお試し環境の為）</td>
    </tr>
</table>

「成功しました！」と表示されたら、初期設定が完了です。

![wordpress_install_success.png](https://qiita-image-store.s3.amazonaws.com/0/206277/be9044c5-86a5-7219-a177-aac5ebf5deff.png)

「ログイン」ボタンをクリックして、WordPressの管理ページへログインできます。

お疲れ様でした！