CentOS 7 WordPressのインストール

# 動作確認環境
- 仮想環境 VMware Workstation Player 14.1.1
- OS Windows 10 Pro 64bit

# 仮想環境
- OS CentOS 7.4 (1708) minimalインストール
- メモリ 2GB
- HDD 250GB

# 前提条件
- gcc 7.2.0
- cmake 3.10.2
- MySQL 5.7.21
- OpenSSL 1.1.0.g
- Apache 2.4.29
- PHP 7.2.3

# WordPressのダウンロード
最新バージョンの確認
[日本語 « リリース — WordPress](https://ja.wordpress.org/releases/)

Apacheの初期ディレクトリにインストールするとします。`/usr/local/apache2/htdocs`ディレクトリに移動する。

````
/usr/local/apache2/htdocs
````
ファイルをダウンロードする。

````
wget https://ja.wordpress.org/wordpress-4.9.4-ja.tar.gz
````
ダウンロードしたファイルを展開する。

````
tar zxvf wordpress-4.9.4-ja.tar.gz
````

展開したディレクトリは`wordpress`で作成されます。
必要に応じて変更してください。
所有を変更します。

````
chown -R apache:apache wordpress
````
# Apacheの設定
httpd.confで設定します。

````
vi /usr/local/apache2/conf/httpd.conf
````
以下の内容を追記します。

````
DocumentRoot "/usr/local/apache2/htdocs/wordpress"
<Directory "/usr/local/apache2/htdocs/wordpress">
     AllowOverride All
</Directory>
````
wordpressに移動し、ファイルをコピーし、所有を変更する。

````
cd wordpress
cp wp-config-sample.php wp-config.php
chown -R apache:apache wp-config.php
````
wp-config.phpの設定をします。

````
vi wp-config.php
````
`database_name_here`, `username_here`, `password_here`を任意に変更し、`localhost`は`127.0.0.1`に変更します。


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

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

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

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

````wp-config.php（設定例）
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wp_knutdb_zvy1vb4u');

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

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


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

通常だとファイルの書き込みに`FTP`が必要なので、`direct`にします。

````
vi wp-config.php
````
以下の文を追記します。

````
define('FS_METHOD', 'direct');
````

サーバのIPアドレスで接続すると`「データベース接続確立エラー」`と表示されます。

# MySQLの設定
MySQLにログインするには、初期の設定では、`root`ユーザにパスワードが無いため、ログインできません。パスワード無しでログインできるようにします。

````
vi /etc/my.cnf
````
`[mysqld]`の下に`skip-grant-tables`を追記します。

````
[mysqld]
skip-grant-tables
````
これでrootでもパスワードなしでログインできます。
`mysql -u root`と入力し、`mysql>`が表示され`use mysql`を入力します。

````
mysql -u root
[(none)] mysql>use mysql
````
入力すると、以下の文が表示される。

````
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
````
rootのパスワードを設定するため、以下のコマンドを入力する。

````
update user set authentication_string=password('パスワード') WHERE user='root';
````

成功すると、以下の文が表示される。

````
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 1

Warning (Code 1681): 'PASSWORD' is deprecated and will be removed in a future release.
````

設定を`flush privileges`で保存します。

````
flush privileges;
````

成功すると、以下の文が表示される。

````
Query OK, 0 rows affected (0.00 sec)
````
`quit`で終了する。

rootのパスワードを設定したので、先ほどの`my.cnf`から`skip-grant-tables`を削除するかコメントアウトする。

# MySQLの操作
MySQLにログインします。

````
mysql -u root -p
````
パスワードを入力します。
`wp-config.php`で設定したデータベース、ユーザを作成します。（作成例）

データベースの作成

````
create database wp_knutdb_zvy1vb4u CHARACTER SET utf8;
````
成功すると、以下の文が表示される。

````
Query OK, 1 row affected (0.00 sec)
````

ユーザの作成

````
create user 'wp_knut_mv43no3x'@'localhost' identified by 'LVMc47NIpmRR';
````
成功すると、以下の文が表示される。

````
Query OK, 0 rows affected (0.00 sec)
````

作成したユーザへ権限の付与

````
grant all privileges on wp_knutdb_zvy1vb4u.* to 'wp_knut_mv43no3x'@'localhost';
````
成功すると、以下の文が表示される。

````
Query OK, 0 rows affected (0.00 sec)
````
`quit`で終了する。

ブラウザでサーバの`IPアドレス/WordPress`のインストールディレクトリにアクセスすると、`「WordPress › インストール」`画面が表示され、指示に従いタイトル、ユーザ名等を入力する。
パスワードはメモしておくこと。

入力が終わり`「WordPressをインストール」`をクリックする。
`「Forbidden」`が表示された方は、対策が必要です。

# 対策
原因はセキュリティ対策で導入した`ModSecurity`が原因です。`httpd.conf`を編集します。

````
vi /usr/local/apache2/conf/httpd.conf
````

WordPressを操作や書き込みをするIPアドレス追記する。（先頭でも可能）
注意：DMZで仮想サーバを構築した場合、ルータのIPアドレスがアクセス元になります。（`access_log`で確認）
（例：IPアドレスが192.168.10.1の場合）

````
SecRule REMOTE_ADDR "^192\.168\.10\.1$" "phase:1,id:133,nolog,allow"
````

これで再度アクセスし、`「WordPressをインストール」`をクリックすると画面が切り替わり、`「成功しました !」`と表示される。

# 必要なディレクトリ等の操作
このままの状態では、不具合が発生するため、ディレクトリの作成、パーミッションの変更が必要になります。
`wp-content`に移動します。

````
cd wp-content
````
`upgrade`, `uploads`ディレクトリを作成し、権限を変更します。

````
mkdir upgrade
mkdir uploads
chown -R apache:apache upgrade
chown -R apache:apache uploads
````

`WordPress`ディレクトリ内部のパーミッションを一括で変更します。
他の解説サイトだと様々なパーミッションが紹介されていますが、この設定だとプラグインの更新やテーマの導入でエラーが発生しません。

````
cd ..
find ./ -type d -exec chmod 707 {} \;
find ./ -type f -exec chmod 707 {} \;
````
# 参考
[【WordPress】プラグインをインストールしようとしたら「パッケージを展開しています… ディレクトリを作成できませんでした。」とエラーが出た時の対処法 | 駆け出しwebクリエイター黒ブタの気まぐれブログ](https://blackpigtail.com/web_design/1568)
[LAMP構築－Linux（CentOS）へWordPressをインストール | 俺の開発研究所](http://itmemo.net-luck.com/linux-centos-wordpress-install/)
[ModSecurity で IP アドレスをホワイトリストに追加しチェックをスルーする方法 | Webセキュリティの小部屋](https://www.websec-room.com/2014/02/15/1829)

---
[目次](https://qiita.com/knutpb1205/items/3ece0cab588afdb13f02)