Ubuntu 18.10でWordPressを導入する

この世界の基盤はWordPressによって支えられています。せっかくWordPressを導入したので、導入する一連の流れを記録したいと思います。owner203はUbuntu信者なのでOSは当然Ubuntu 18.10になります。もしUbuntuにこだわりもなく、そしてサーバーでWordPressだけを使いたいのであれば、手動で導入する必要もなく、ConoHaで用意されたWordPressのテンプレートイメージを使えばすぐに導入できるのでお勧めです。

WordPressの導入に必要な環境、いわゆる「LAMP」環境の構築から、WordPressの導入及び設定まで記録していきたいと思います。まずLAMPのL、つまりLinux環境はすでに構築済みなので、省略します。

Apacheの導入とufwの設定

LAMPのAというのは、HTTPサーバーとして機能するに必要なソフトウェア「Apache」のことです。これも簡単に導入できます。

sudo apt update
sudo apt install apache2

これだけです。後はufwで必要なポートを開けるだけです。

sudo ufw app list
sudo ufw app info 'Apache Full'
sudo ufw allow 'Apache Full'

ブラウザからサーバーのドメインまたはIPアドレスを入力してアクセスして、テストページが表示されたら問題ないです。

MySQLの導入

LAMPのMというのは、データベースであるMySQLのことです。まずaptでMySQLをインストールします。

sudo apt install mysql-server

次に、MySQLのパスワードなどのセキュリティ設定を行います。次のコマンドを実行します。

sudo mysql_secure_installation

これでMySQLのrootパスワードを設定します。途中でVALIDATE PASSWORD PLUGINを有効にするかが聞かれるので、もしYと答えたら、パスワードの複雑度などのポリシーを選択する必要があります。LOW、MEDIUM、STRONGの3つのレベルから設定できます。ここで設定したら後で設定するすべてのパスワードがこのポリシーを満たさないといけません。

MySQLのrootユーザーはデフォルトでauth_socketという認証方法を使います。このままでもいいけど、phpMyAdminなどでパスワード認証で接続したいときは一苦労なので、ここでrootユーザーのパスワードによる認証を許可する設定をします。もちろんrootユーザーが強いパスワードを使うことが大前提になります。次のコマンドでMySQLを開きます。

sudo mysql

すべてのMySQLユーザーの認証方法を確認します。

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

pluginの欄でrootユーザーはデフォルトでauth_socketとなっています。次のコマンドでrootユーザーをパスワード認証にします。「ROOT_PASSWORD」の部分はさっき自分が設定したパスワードにします。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ROOT_PASSWORD';

設定の変更を適用します。

mysql> FLUSH PRIVILEGES;

もう一回確認します。

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

rootユーザーもmysql_native_passwordになったら大丈夫です。これでMySQLを閉じます。

mysql> exit

PHP環境の導入

LAMP最後のPはPHP環境のことです。次のコマンドでPHPをインストールします。

sudo apt install php libapache2-mod-php php-mysql

デフォルトでHTTPのアクセスがあったら、Apacheはindex.htmlを優先的に探しますが、WordPressの場合はhtmlではなくphpなので、index.phpを優先的に探してもらいたいです。ここでApacheの設定を変更して、phpを優先にします。

sudo vi /etc/apache2/mods-enabled/dir.conf
/etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
--DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
++DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Apacheを再起動して、設定を適用します。

sudo systemctl restart apache2

ここまで、WordPressの導入に必要なLAMP環境の整備は完了しました。

WordPressを導入するための準備

WordPress用データベースを作成する

まずMySQLでWordPress用のデータベースを作成します。rootユーザーでMySQLをアクセスします。

mysql -u root -p

wordpressというWordPress専用のデータベースを作成し、同時にwordpressuserという一般ユーザーを作成して、パスワードをWPUSER_PASSWORDにします。

mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'WPUSER_PASSWORD';

変更を適用して、確認します。

mysql> FLUSH PRIVILEGES;
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

問題なければ、MySQLを閉じます。

mysql> exit

PHP拡張機能をインストールする

インストールするだけです。特に注目することはありません。インストールしたら、Apacheを再起動して、適用します。

sudo apt update
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
sudo systemctl restart apache2

Apacheを設定して.htaccessの上書きを許可する

いろんなWordPressのプラグインで、.htaccessの上書きを許可する必要があります。Apacheを設定して、上書きを有効にします。

sudo vi /etc/apache2/sites-available/000-default.conf
/etc/apache2/sites-available/000-default.conf

DocumentRoot /var/www/html
#以下の行を追記する
<Directory /var/www/html/>
    AllowOverride All
</Directory>
#追記はここまで

WordPressのパーマリンク機能を使うために、mod_rewriteを有効にします。

sudo a2enmod rewrite

設定の確認を行います。Syntax OKが出たら問題ないです。

sudo apache2ctl configtest

Apacheを再起動して、設定を適用します。

sudo systemctl restart apache2

Apacheのデフォルトページを削除する

Apacheのデフォルトページを削除します。使わないので邪魔になるだけです。

sudo rm /var/www/html/index.html

WordPressの導入と設定

WordPressをダウンロードする

いよいよ本番WordPressの導入になります。/tmpで最新版のWordPressをダウンロードしてから解凍して、丸ごとhttpフォルダにコピーします。WordPressのページをこの世界のホームページにしたいので、メインフォルダである/var/www/htmlにコピーします。

cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
touch /tmp/wordpress/.htaccess
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
mkdir /tmp/wordpress/wp-content/upgrade
sudo cp -a /tmp/wordpress/. /var/www/html

ディレクトリの権限を設定する

WordPressのフォルダの権限を正しく設定しないとダメなので、権限の設定を行います。

sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html/ -type d -exec chmod 750 {} \;
sudo find /var/www/html/ -type f -exec chmod 640 {} \;

WordPressを設定する

まずセキュリティ向上させるためにsaltキーを設定します。内部で使うものなので、長くてランダムなものがいいでしょう。覚える必要はありません。WordPress公式ではsaltキーを作成してくれるツールを提供しているので、それを使います。SSH接続の場合は、出力された内容を一時的にメモする必要があります。まず次のコマンドを実行して、内容を取得します。

curl -s https://api.wordpress.org/secret-key/1.1/salt/

そして画面に表示された以下のような内容をメモします。saltキーはランダムで生成されたものです。

#以下の行を記録する
define('AUTH_KEY', 'my unique phrase');
define('SECURE_AUTH_KEY', 'my unique phrase');
define('LOGGED_IN_KEY', 'my unique phrase');
define('NONCE_KEY', 'my unique phrase');
define('AUTH_SALT', 'my unique phrase');
define('SECURE_AUTH_SALT', 'my unique phrase');
define('LOGGED_IN_SALT', 'my unique phrase');
define('NONCE_SALT', 'my unique phrase');
#記録はここまで

これからWordPressの設定ファイルを編集する。

sudo vi /var/www/html/wp-config.php

まずはさっき作成したデータベースの情報を記入します。

/var/www/html/wp-config.php

#前略...
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpressuser');

/** MySQL database password */
define('DB_PASSWORD', 'WPUSER_PASSWORD');
#後略...

次に、メモしたsaltキーの内容で以下の部分を書き換えます。

/var/www/html/wp-config.php

#前略...
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
#後略...

最後に、次の内容を追記します。

/var/www/html/wp-config.php

#次の行を追記する
define('FS_METHOD', 'direct');

以上でWordPressの設定がすべて終わりです。ブラウザでサーバーにアクセスして、WordPressを使い始めましょう。