WordPress

VPSのUbuntu 18.10にWordPress + PHP7.2環境を構築

VPSのUbuntu 18.10にWordPress + PHP7.2環境を構築のイメージ

前回の続きでUbuntu 18.10にPHP7.2環境をつくり、その上にWordPressをインストールすることにしました。
その流れをご紹介します。

前回の記事はこちら↓

Ubuntu 18.10をサーバとして使うための初期設定のイメージ
Ubuntu 18.10をサーバとして使うための初期設定いろいろこんにちは、日本は寒くなってきましたね。 なので今週末から移動してベトナムへ住居を移す予定です。 日本の冬からベトナムは寒暖差が激し...

PHP7.2のインストール

まず最初にPHPがデフォルトでインストールされていることはないだろうかと思ったのでPHPコマンドを打ってみます。

$ php -v
Command 'php' not found, but can be installed with:

apt install php7.2-cli

当たり前の結果でした。
なのでaptでインストールしましょう。

$ sudo apt-get -y install php7.2

ここでphp7.2にしておくほうが良いです。
パッケージ管理でphpは各種バージョンがインストールできるようになっているので、明示的に7.2系だよ!と書いておくとそれに付随するソフトウェアも一緒にインストールされます。

The following additional packages will be installed:
  apache2-bin libapache2-mod-php7.2 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1
  liblua5.2-0 libsodium23 php-common php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-readline
Suggested packages:
  apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser php-pear
Recommended packages:
  apache2
The following NEW packages will be installed:
  apache2-bin libapache2-mod-php7.2 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1
  liblua5.2-0 libsodium23 php-common php7.2 php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-readline

php7.2-commonphp7.2-opcache は必要なのでありがたいですね。
特にOPcacheは以前であればソースコードをビルドしてコンパイルする過程でオプションに付与して、と面倒な手順が必要だったので、デフォルトで含まれるのは非常に助かります。

ついでなのでお友達もインストールします。

$ sudo apt-get -y install php7.2-mysql php7.2-xml php7.2-xmlrpc php7.2-fpm php7.2-mbstring php7.2-zip

さらにOPcacheを有効化しましょう。
以下はphp.netに記載されている推奨設定です。

-> /etc/php/7.2/fpm/php.ini
zend_extension=/usr/lib/php/20170718/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.enable_cli=1

zend_extension だけ後述するphpinfoでzend extensionのディレクトリの場所を調べてopcacheのエクステンションのパスを指定します。

Nginxのインストール

Nginxは軽量・高速なWebサーバとしてここ最近の主流となっています。
これもaptでサクッとインストールできます。

$ sudo apt-get -y install nginx

これを入れるとサーバのIPアドレスか、割り当てているドメインをブラウザに入力することでNginxのデフォルトページが表示されます。
一旦ここでphpinfoを出してPHPの設定を見てみましょう。

$ sudo mkdir -m 777 -p /var/www/vhosts/web
$ sudo emacs /etc/nginx/conf.d/web.conf

このように conf.d 以下は自動的にconfigファイルとしてnginxに扱われます。

server {
  server_name IPアドレス;
  root /var/www/vhosts/web;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

そしてphpinfoを表示するためのindexファイルをつくりましょう。

$ sudo emacs /var/www/vhosts/web/index.php
-> /var/www/vhosts/web/index.php
<?php echo phpinfo();

これでIPアドレスでブラウザを開くとphpinfoのページが表示されるはずです。
先に書いたzend extensionのディレクトリの記述はここから見るとわかりやすいです。

MariaDBのインストール

これは多少悩みましたが、MariaDBをここでは紹介します。
MariaDBはMySQLの生みの親が新たに生んだMySQL互換のリレーショナルデータベースです。
細かい要因は省きますが、MariaDBを利用することでMySQLの恩恵が受けられない、ということはまったくないので、今回はMariaDBを使います。

$ sudo apt-get -y install mariadb-server

初期設定を行います。

$ sudo mysql_secure_installation
~ 省略 ~
Enter current password for root (enter for none):
※ここは空なのでEnterでOKです
Set root password? [Y/n] Y
New password: ※パスワードを設定してください
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y 
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

デフォルトの設定のままで大丈夫なので、パスワード以外はEnter連打して切り抜けましょう。

それではさっそくMariaDBにログインしてデータベースの設定をしてみましょう。

$ mysql -u root -p
※さきほどのパスワードを聞かれるので入力してください
-> MariaDBのプロンプト
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)

MariaDB [(none)]> 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
MariaDB [mysql]> CREATE USER 'test'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> GRANT ALL ON *.* TO 'test'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

少々わかりづらいですが、 MariaDB [mysql] > の右側がSQLコマンドです。
testユーザーを作成して権限を付与するところまでを示しています。

続いてデータベースの作成です。
文字コードはデフォルトのままでもutf8mb4になっていると思いますが、万が一違う場合のことも備えて指定して作成したほうが安心です。

MariaDB [mysql]> CREATE DATABASE データベース名 CHARACTER SET utf8mb4;
Query OK, 1 row affected (0.00 sec)
MariaDB [mysql]> quit
Bye

これでデータベースの準備は完了です。

WP-CLIのインストール

WordPressのインストールはwp-cliと呼ばれるコマンドラインツールを使うと非常にラクにできます。
黒い画面に慣れていない人の場合はGUI(ブラウザ上でポチポチできる画面)があったほうがわかりやすいかもしれませんが、VPSやクラウド上で構築することを考慮するとwp-cliのほうが便利だということに気づくかと思います。

$ sudo curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
$ php wp-cli.phar --info
$ sudo chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/local/bin/wp
$ wp --info

これでwp-cliの情報が表示されればOKです。

WordPressのインストール

それではそのままWordPress本体のインストールを始めましょう。
最初にnginxのくだりが作成したindex.phpは消しておきます。

$ cd /var/www/vhosts/web
$ rm -f index.php

その後、nginxのデフォルトユーザーであるwww-dataを使ってnginxで設定したドキュメントルートへWordPressをダウンロードします。

$ sudo -u www-data wp core download --locale=ja --path=/var/www/vhosts/web
Downloading WordPress 4.9.8 (ja)...
md5 hash verified: 1b17d32080ec0d7429022a97d2b2bc01
Success: WordPress downloaded.

次にWordPressの設定を司るconfigファイルの生成を行います。

$ sudo -u www-data wp core config --dbname='データベース名' --dbuser='データベースのユーザー名' --dbpass='データベースのパスワード' --dbhost='localhost' --path=/var/www/vhosts/web

そしてついにWordPressのインストールです。

$ sudo -u www-data wp core install --url='IPアドレス' --title='ブログタイトル' --admin_name='WordPressユーザー名' --admin_password='WordPressパスワード' --admin_email='自分のメールアドレス' --path=/var/www/vhosts/something
Success: WordPress installed successfully.

ここまで行ってIPアドレスでブラウザを開くとWordPressがインストールされていることがわかります。

なお、WordPressのログイン画面は http://IPアドレス/wp-login.php で表示できます。

WordPressの安全な運用に必要なこと

ここまでで最低限WordPressのインストールまでを行うことができました。
しかしながら、実際に運用するにあたってWordPressのセキュリティ面や機能面はまだまだ強化の余地があります。
具体的には以下のような事柄です。

  1. SSL(https)化
  2. WordPress情報の隠匿
  3. ログイン画面のURL変更
  4. ログインロック
  5. HTTPヘッダーの設定
  6. スパム対策
  7. 子テーマの作成

次の記事で可能な限りやっておいたほうがいいであろうWordPressのセキュリティ対策や初期設定についてまとめていきますので乞うご期待!

ABOUT ME
UOT合同会社 / SOT Co.,Ltd 合同開発部
UOT合同会社 / SOT Co.,Ltd 合同開発部
UOT合同会社 / SOT Co.,Ltd開発部の合同公式ブログ。 代表がITエンジニア出身のデジタルノマド→日本とベトナム・ホーチミンでIT企業設立。 海外デジタルノマドやエンジニアのリモートワーク、プログラミング、オフショア開発やミニラボ情報などをまとめていきます。