超爆速でLAMPを構築しSSL化されたWordPressの本番環境を構築する

超がつくほどの爆速でWordPressの環境を構築する方法を紹介します。
ログイン回りの軽いセキュリティ設定から、ミドルウェア構築、phpMyAdminの設定、SSL化までをやります。
速い人なら1時間足らずで構築できます。

# 環境
事前に、CentOSが準備できるサーバーを用意し、ドメインを取得しておいてください。(関係ない話ですが、reiwaと名の付くドメインが元号発表後2日目にして完売してました...)
OSはCentOS、ミドルウェアにはApacheとMariaDBを使用します。
Apacheのバージョンはは2.4以降を想定します。
私の場合はConoHa VPSを利用して構築しました。

# ログイン回りの設定

サーバーにCentOSをインストールした後、クライアント側から `ssh root@[IPアドレス] -p 22` とかでssh接続してください。

## ユーザー追加

usernameのところを任意のユーザー名にして追加してください。
```
useradd username
```

追加したユーザーのパスワードを設定します。

```
passwd username
```

## rootログインの禁止

`vim /etc/ssh/sshd_config` でsshの設定ファイルを編集します。
設定を間違ってしまうのが怖い方は、cpコマンドでファイルをバックアップしてください。
`PermitRootLogin` を探し、yesからnoに変更してください。

```
PermitRootLogin no
```

ここで再起動し、再度サーバーにssh接続するとrootログインができなくなっているはずです。
新しく追加したユーザーでログインし直しましょう。

# PHPのインストール

以下のコマンドを実行してください。
`Is this ok [y/d/N]:` と聞かれたらすべて `y` と答えます。

```
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install --enablerepo=remi,remi-php72 php php-devel php-mbstring php-mysqlnd php-pdo php-gd

```

# PHPの設定を変更する

phpがデフォルトの設定のままだと、postリクエストの容量やファイルアップロードの容量が少ないので、最大値を増やします。

`vim /etc/php.ini` で設定ファイルを開いてください。
`post_max_size` を8Mから128Mへ、 `upload_max_filesize` の上限値を2Mから128Mへと変更します。

```
post_max_size 128M
upload_max_filesize 128M
```

# ミドルウェア導入

`su` でrootアカウントに切り替えてください。

## Apache

```
yum install httpd
```

インストールの途中に、 `Is this ok [y/d/N]:` と出てきますが、全部 `y` で入力してください。
インストールが終わったら、Apacheを起動して自動起動設定をします。

```
systemctl start httpd
systemctl enable httpd
systemctl status httpd
```

無事に起動出来た場合は、 `active(running)` と表示されます。

## MariaDB

Apacheと同じ要領でインストーして起動、自動起動設定をします。

```
yum -y install mariadb-server
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb
```

続いてMariaDBの初期設定を行います。
まずは初期設定を用のコマンドを実行します。

```
mysql_secure_installation
```

`Enter current password for root (enter for none):` と聞かれますが、何も入力せずエンターを押してください。

`Set root password? [Y/n]` は `Y` と答え、MariaDBのrootパスワードを入力します。
サーバーのrootアカウントパスワードでは無いことに注意してください。

その後、立て続けに質問されますが、全部 `Y`と答えてください。
間違えて `n` と答えてしまった場合は、もう一度 `mysql_secure_installation` を実行することで再び設定し直せます。

# ファイアーウォールの設定

iptablesというファイアーウォールとfirewalldというファイアーウォールが競合してサイトにアクセスできないという現象が起きてしまうようなので、firewalldを停止させて自動起動も停止させます。
もちろんiptablesの方を停止させてもいいです。

```
systemctl stop firewalld
systemctl disable firewalld
```

# phpMyAdminのインストール

phpMyAdminをインストールしたくない方はここを飛ばしても良いですが、 `yum install mod_ssl` だけ先にインストールしておいてください。
phpMyAdminをインストールする方は後ほどインストールします。

こちらも途中で質問されたら全て `y` と答えて構いません。

```
yum install --enablerepo=remi,remi-php72 phpMyAdmin
```

`vim /etc/httpd/conf.d/phpMyAdmin.conf` でphpMyAdminの設定を変更します。

16行目にある `Require local` をコメントアウトし、 `Require all granted` へ変更してください。

次にphpMyAdminのログイン画面URLを変更する設定をします。

8行目と9行目をコメントアウトしデフォルトのログイン画面URLを無効にします。

```
#Alias /phpMyAdmin /usr/share/phpMyAdmin
#Alias /phpmyadmin /usr/share/phpMyAdmin
```

コメントアウトした行の下に、以下を追記してください。 `phpMyAdminUsername` は任意に設定してください。

```
Alias /phpMyAdminUsername /usr/share/phpMyAdmin
```

続けて暗号化されていない通信を拒否します。

14行目に以下をを追記してください。`AddDefaultCharset UTF-8` の下です。

```
SSLRequireSSL
```

次にApacheの拡張機能であるmod_sslをインストールします。

```
yum install mod_ssl
```

`systemctl restart httpd` でApacheを再起動します。
これで、`https://<VPSのIPアドレス>/phpMyAdminUsername` にSSLでphpMyAdminの操作ができます。

# サイトのSSL化

## DNS設定

ドメインを取得したサイトの管理画面で、DNSの設定を行います。
この設定を行っていないと、ドメインにアクセスした際、ホストサーバーに繋げないためサイトが開けません。

次に、DNSレコードを設定します。
これは、環境を稼働させるサーバーの管理画面などで行います。入力項目は4つあるはずです。
レコードはA、名称を@、TTLを3600、値にサーバーのIPアドレスを入力してください。

# Apacheの設定

再びApacheの設定を行います。
`vim /etc/httpd/conf/httpd.conf` を実行し、ファイルの下の方に以下を追記してください。

```
<VirtualHost *:80>
ServerAdmin root@example.com
DocumentRoot /var/www/html
ServerName example.com
</VirtualHost>
```

example.comは取得したドメイン名に変更してください。

`/var/www/html` のアクセス制限の設定が `AllowOverride none` となっている場合はnoneをAllに変更してください。
これをしておかないと、記事ページや固定ページにアクセスすることができません。

```
<Directory "/var/www/html">
...
    AllowOverride none
...
</Directory>
```


`systemctl restart httpd` で再起動させます。



# SSL証明書のインストール

Let's Encryptを利用してSSL証明書をインストールします。
example.comのところは取得したドメイン名に変えてください。

```
yum install certbot python2-certbot-apache
certbot --apache -d example.com
```

メールアドレスを入力し、規約に同意してください。
Let's Encryptパートナーにメールアドレスを公開していいか質問されますが、公開したくなければ `N` と答えてください。
httpアクセス時にhttpsへリダイレクトするかという質問には `2` で答えます。これでhttpsへ自動でリダイレクトされます。
再び ```systemctl restart httpd``` を実行します。

# データベースの作成

phpMyAdminにアクセスします。
メニューにあるデータベースをクリックし、任意のデータベース名を作成してください。
称号順序は `utf8mb4_general_ci` で設定します。
ここで作成したデータベースは、WordPress設定時に使用します。

# WordPressのインストール

`cd /var/www/html` でディレクトリを移動します。
以下コマンドでWordPressをダウンロードし、圧縮ファイルを解凍してWordPressの準備を進めていきます。

```
wget https://ja.wordpress.org/latest-ja.tar.gz
tar xvzf wordpress-4.9.6-ja.tar.gz
rm wordpress-4.9.6-ja.tar.gz
mv wordpress/* /var/www/html
rmdir wordpress
chown -R apache:apache /var/www/html
chmod -R 755 /var/www/html
```

`https://ドメイン名` にアクセスすると、初期設定画面が出てくると思うのでガイドに従って設定してください。

これで環境の構築は完了です。おつかれ様でした。

# 参考文献
[Hello VPS 〜WordPress公開までの道〜](https://support.conoha.jp/vps/school/?btn_id=school-hellovps01-breadcrumbs_vps-school)