LAMPとゆかいな仲間たち-WordPress編

WordPress編とあるが続きはないし、他もない。単発の記事である。さて、ローカル環境にLAMPとWordPressをインストールするという記事は多くみられる。だがどれも本当にインストールするまでであり、そこからWordPressにアクセスして使える状態かというとそうならない。

LAMPのインストールだって大変なのだ。MariaDBサーバーにログインできない、PhpMyAdminだってインストールして、http://localhost/phpmyadmin/としてもアクセスできないこともある。はじめての人にはなかなかハードルが高い。

記事は最初にLAMPとWordPressをインストールし、その後に発生する問題点を解消するという手順で書いていく。これは必ず発生する問題であり、つまずく原因にもなっている。

結局、XAMPPでいいやとかWordPressだけだからLocalを使えばいいやということになる。LAMPをインストールしたあとだと、XAMPPやLocalとの共存だって大変なのだよ。

記事の対象

なにがなんでもLAMPをインストールしてWordPressを使いたいというユーザー。

Linuxデスクトップ環境

記事を書くにあたって使用した環境は以下のとおり。

Linux Mint 20.3 Xfce Edition

LAMPのインストール

LAMPのインストールは、「Linux Mint 20.3 MATE / Xfce インストール後にやっていること」からLAMPのインストール部分を抜粋したものである。PhpMyAdminはインストールしない。ターミナルからMariaDBにログインしてCREATE DATABASE文でデータベースを作るだけだからだ。必要があればDBeaverをインストールすればいい。なお、Apach2eWebサーバーおよびMariaDBサーバーはインストール後はすでに起動した状態となっている。

// すでにインストールされているものもあるが、インストールされていないときのため
sudo apt install ca-certificates apt-transport-https lsb-release gnupg curl nano unzip -y

// PHPのリポジトリの登録と更新
sudo add-apt-repository ppa:ondrej/php
sudo apt update

// Apache2Webサーバーのインストール
sudo apt install apache2 -y

// PHP8.1のインストール
sudo apt install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 php8.1-xdebug php8.1-bcmath -y

// MariaDBサーバーとクライアントのインストール
// 山形大学のミラーサイトは新バージョン対応時、一時的にアクセスできないことがある
sudo apt-get install software-properties-common dirmngr apt-transport-https
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.8/ubuntu focal main'

sudo apt update
sudo apt install mariadb-server mariadb-client -y

// MariaDBサーバーの構成
// rootのパスワードの変更以外はすべてEnter
sudo mysql_secure_installation

// 確認
mariadb -u root -p

ログインできなければ
sudo mariadbでアクセスして以下のSQLを実行
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES; 
exit

Apache2Webサーバーのルートディレクトリの変更

Apache2Webサーバーのルートディレクトリは/var/www/html以下になる。アクセスするにはRoot権限が必要になり、直接読み書きすることができない。Visual Studio Codeをルート権限で起動しようとしても怒られるだけなので推奨できない。どうするかというと、Root権限以外の場所にフォルダを作成し、そのフォルダをルートディレクトリに変更する。

ルートディレクトリフォルダの作成

homeディレクトリ内にwwwという草が生えたフォルダを作成する。ターミナルを起動して以下のコマンドを実行する。ターミナルを起動した段階でhomeディレクトリになっているのでcdなどで移動する必要はない。

mkdir www

ルートディレクトリの変更

フォルダを作成したらルートディレクリを変更しよう。変更する設定ファイルは、apache2.confおよび000-default.confの2つである。最初にapache2.confから設定する。

cd /etc/apache2
sudo nano apache2.conf

変更する箇所(170行目付近)を以下のように変更する。変更したらCtrl+Oで保存する。終了はCtrl+Xである。

変更前
<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>

変更後
# <Directory /var/www/>
<Directory /home/ユーザー名/> # ※Linuxインストール時に入力したユーザー名
	Options Indexes FollowSymLinks
        # AllowOverride None
	AllowOverride All
	Require all granted
</Directory>

apache2.confの設定が終わったら、000-default.confの設定を変更して保存する。

cd /etc/apache2/sites-available
sudo nano 000-default.conf

変更する箇所(12行目付近)を以下のように変更する。

変更前
DocumentRoot /var/www/html

変更後
# DocumentRoot /var/www/html
DocumentRoot /home/ユーザー名/www # ※Linuxインストール時に入力したユーザー名

変更したらApache2Webサーバーを再起動する。

sudo systemctl restart apache2

ルートディレクトリにアクセスできるかどうか確認

wwwフォルダ内にテスト表示用のindex.htmlを作成して、http://localhost/でアクセスして確認してみよう。

touch index.html
nano index.html

入力内容
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Demo</title>
</head>
<body>
    <h1>Hello, World!</h1>
</body>
</html>

ブラウザを起動してhttp://localhostでアクセスして、以下のように表示されれば、ルートディレクトリの変更がきちんと行われている。

ルートフォルダの変更確認

データベースの作成

WordPressが使用するデータベースを作成する。MariaDBにログインして、CREATE DATABASE文でデータベースを作成する。名前は何でもよい。ここではそのままwordpressとしている。

mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.8.3-MariaDB-1:10.8.3+maria~focal mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> createt database wordpress;

WordPressのダウンロードと解凍

ダウンロードはWordPressの公式サイトからできるが、ここではターミナルからダウンロードしよう。ターミナルを起動してwwwフォルダに移動する。

cd www

wgetコマンドでWordPressをダウンロードして解凍する。

wget https://ja.wordpress.org/latest-ja.tar.gz
tar xvf latest-ja.tar.gz
rm latest-ja.tar.gz

解凍すると、wordpressというフォルダが作成されている。フォルダ名は任意なものに変更できる。ここでは短くwpとした。次にwp-config-sample.phpの名前を変更して内容を設定して保存する。

mv wordpress wp
cd wp
mv wp-config-sample.php wp-config.php
nano wp-config.php

変更前
define( 'DB_NAME', 'database_name_here' );
/** データベースのユーザー名 */
define( 'DB_USER', 'username_here' );
/** データベースのパスワード */
define( 'DB_PASSWORD', 'password_here' );

変更後
パスワードはアスタリスクで表示しているがmysql_secure_installationで入力したパスワード
を設定する。ちなみにパスワードをナシにすることもできるが、それはマヌケなユーザーがやることである。
define( 'DB_NAME', 'wordpress' );
/** データベースのユーザー名 */
define( 'DB_USER', 'root' );
/** データベースのパスワード */
define( 'DB_PASSWORD', '**********' );

WordPressのインストール

ブラウザを起動してhttp://localhost/wp/でアクセスする。

WordPressインストール画面

インストール画面が表示されたら、各項目を設定していこう。設定したら[WordPressをインストール]をクリックして、インストールを開始する。インストールは数秒で終わる。[ログイン]をクリックしてWordPressへログインしよう。

インストール終了

野を越え山を越えでここまでやってきて、WordPressをインストールできた。ほとんどのインストールを紹介する記事は、このあとログインしてダッシュボード画面が表示されて終わりである。

WordPressダッシュボード画面

インストール後の解決すべき問題

WordPressのインストールは以上で終わりだが、WordPressを使うまでに問題を抱える。以下の3つの問題がそうである。どういった問題なのか紹介し、その後に解決の方法を提示することにする。苦難の道はまだまだ続くのである。

FTP情報の要求

更新しようとするとFTP情報を要求される

実際はこんな画面にならない。どこか設定がおかしいのである。次は、プラグインをWP Multibyte Patchをインストールしてみよう。

プラグインをインストールしようとするとFTP情報が要求される

また、FTP情報が要求される。ちなみに[続行]をクリックしてもムダである。FTP情報の要求は、検索すれば出てくるので解決は簡単である。

記事が更新不可

今度は記事を作成してみよう。

記事の保存や更新ができない

記事の保存や更新ができない。この「更新に失敗しました。返答が正しいJSON レスポンスではありません。」という問題は、検索しても原因がいろいろありすぎて試してもなかなか解決しない。一番の悩みどころである。レンタルサーバー上では同じApache2を使用しているにも関わらずこういったことは起きていないのである。どこかに問題がありそうだ。

フォルダに対する書き込み不可

ダッシュボードからサイトヘルスを見てみる。改善は無視して「情報」にあるサイトヘルス情報だ。「ファイルシステムパーミッション」をみてみると、すべて書き込み不可となっている。

ファイルパーミッションの書き込み不可

このほかにも、パーマリンクの変更で次のようなことも起きる。書き込みできないことによる問題である。

パーマリンクの変更不可

インストールしただけでは全く使い物にならないのである。これはWordPressの問題ではない。ユーザー側の設定不足が原因なのである。ローカル環境にインストールするのは骨が折れるってもんだ。だから、XAMPPやMAMP、Localにいっちゃうんだよね。

問題を解決する

問題点は3つ。FTP情報の要求、記事の更新不可、フォルダに対する書き込み不可である。これらをそれぞれ解決していこう。

FTP情報の要求

wp-config.phpに下記の一行を追加する。個人的に追加する位置は44行目と46行目との間にしている。

define( 'FS_METHOD', 'direct' );

記事の更新不可

rewrite_modが有効になっていないことが原因なので、これを有効にして、Apache2Webサーバーを再起動する。

sudo a2enmod rewrite
sudo systemctl restart apache2

フォルダに対する書き込み不可

全フォルダおよびファイルのパーミッションを変更する。この変更はローカル環境限定であり、決して本番サーバーに対して行ってはならない。パーミッション設定については「WordPress ファイルパーミッションの変更」をよく読んで理解しておくこと。

cd
find www -type d -exec chmod 707 {} \;
find www -type f -exec chmod 606 {} \;

これで更新や記事の投稿、プラグインの導入が正常にできるようになる。Apache2に対する設定は記述ミスがあったり、コマンドの実行ミスがあるとApache2が正しく動作しないので気をつける。

さて、これで終わりである…ではない。最後に言っておくことがある。もうひとつのサイトを作るためにフォルダを作成して追加したとしよう。FTP情報の要求とフォルダに対する書き込み不可の問題が発生する。なので、サイトを追加したら、上記の方法で問題を解決しなければならない。

以上。

追記 (2022/06/10)
それでも「更新に失敗しました。返答が正しいJSON レスポンスではありません。」が表示される場合は、[設定]→[パーマリンク]でパーマリンクを変更して[変更を保存]してみる。エラーとならず保存できれば、解消しているはずである。