WordPressを二つ動かす

/ と /labo/suzuki で二つのWordPressを動かす。

dockerコンテナを用意する

Dockerを使ってWordPressの動くウェブサーバーを立ち上げるに従って、二組のコンテナを立ち上げる。
以後/で動かしたいほうをwpa、/labo/suzukiで動かしたいほうをwpbとする。

apacheの設定

dockerのホストで稼働しているapacheの設定をする。

/etc/httpd/conf.d/wordpress.conf

<VirtualHost *:80>
ServerName biochemistry.isc.chubu.ac.jp
ProxyPreserveHost On
ProxyPass / http://localhost:pa/    # paはwpaの稼働するポート番号
ProxyPassReverse / http://localhost:pa/    # 上と同じ

<Location /labo/suzuki>
    ProxyPass http://localhost:pb/labo/suzuki    # pbはwpbの稼働するポート
    ProxyPassReverse http://localhost:pb/labo/suzuki    # 上と同じ
</Location>
</VirtualHost>

WordPressの設定

wpaの設定

普通に http://biochemistry.isc.chubu.ac.jp/ にアクセスして設定する。

サイトアドレスは http://biochemistry.isc.chubu.ac.jp にする。

wpbの設定

http://biochemistry.isc.chubu.ac.jp/labo/suzuki/ にアクセスして設定する。

サイトアドレスは http://biochemistry.isc.chubu.ac.jp/labo/suzuki にする。

.htaccess の修正

wpbのWordPressの設定をすると.htaccessが自動で更新されます。
ここで/labo/suzuki 以下へのアクセスだけをindex.phpに向けるようにwpbの.htaccessを編集します。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^labo/suzuki(.*) /$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

.htaccessを不意にWordPressが変更しないように、アクセス権を変えておくといいです。

失敗したときの対処法

WordPressのサイトアドレスやWordPressアドレスを間違えると、設定画面にたどり着けなくなります。

その場合はデータベースに接続して、直接値を書き換えます。

# mysql -u root -p # -- mysqlのデータベースにログイン
Enter password: (コンテナ作成時にMYSQL_ROOT_PASSWORDとして設定したパスワードを入力)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |  # <-- これがwordPressのデータベース。WordPressの設定時に変更しているかも
+--------------------+

mysql> connect wordpress; # -- データベースへ接続

mysql> show tables;  # -- テーブル一覧
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
12 rows in set (0.00 sec)

mysql> desc wp_options;  # -- テーブルの詳細
+--------------+---------------------+------+-----+---------+----------------+
| Field        | Type                | Null | Key | Default | Extra          |
+--------------+---------------------+------+-----+---------+----------------+
| option_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| option_name  | varchar(191)        | NO   | UNI |         |                |
| option_value | longtext            | NO   |     | NULL    |                |
| autoload     | varchar(20)         | NO   |     | yes     |                |
+--------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> select * from wp_options where option_name in ('siteurl', 'home');
+-----------+-------------+-----------------------------+----------+
| option_id | option_name | option_value                | autoload |
+-----------+-------------+-----------------------------+----------+
|         2 | home        | http://www.example.com:8000 | yes      |  # -- WordPressを設定したときに開いたURL
|         1 | siteurl     | http://www.example.com:8000 | yes      |
+-----------+-------------+-----------------------------+----------+

mysql> update wp_options set option_value = 'http://main.example.com' where option_id in (1, 2);

mysql> exit  # -- mysqlを終了する