WordPress Domain Changerでドメイン変更

2019年6月6日

WordPressサイトのドメインを変更することにした。

WordPressサイトは、基本的に何らかのドメインの相対URL(/fooなど)ではなく、絶対URL(https://foo.com/foo)になってしまっているので、ドメインを変更する際はそれなりに手数がかかるのだが、以下のWordpress Domain Changerを用いてやってみる。

https://github.com/veloper/WordPress-Domain-Changer

バックアップする

wordpres自体とmysqlデータベースをバックアップする。元ドメインのwordpressを残したまま、新たなドメインのwordpressを作成するので、バックアップというよりもコピーを行う。

mysqlデータベースを適当な名前で複製する

こんなところだろうか。

mysqldump -u ユーザ名 -pパスワード foo > foo.sql
mysql -u ユーザ名 -pパスワード 
create database bar default character set utf8;
quit;
mysql -u ユーザ名 -pパスワード  bar < foo.sql

wordpressサイトを適当な名前で複製する

wordpressフォルダを以下のようにコピー

cp -a foo bar

これでまるコピーができたが、wp-config.phpにはデータベース名称が記述されているので、必ず変更しないといけない。

WordPress Domain Changerをインストールする

https://github.com/veloper/WordPress-Domain-Changerの次の場所でzipファイルをダウンロードする。

zipを展開し、wpdcフォルダのみを新たなサイトのwordpressフォルダに入れる。

一応wpdcフォルダ以下をウェブサーバの所有にする。

chown -R apache. wpdc

wpdc/config.phpの「Replace-This-Password」の部分を自分のパスワードにする。すぐに消してしまうので何でもよい。

<?php

// Authentication Password
define( 'WPDC_PASSWORD', 'Replace-This-Password' );

Apacheのセットアップ

当然のことながら、これ以前に新たなドメインのDNS登録を行い、対象とするサーバのIPが指定されていなければならない。その上でApacheをセットアップする。これは省略する。

wpdcにアクセスする

ブラウザで「https://新ドメイン/wpdc」(「http://新ドメイン/wpdc」)にアクセスする。以下のような表示になるはずだ。

ログインすると、以下の表示になる。新たなドメイン用のデータベース名称が指定されているかを十分に確認(赤枠部分)。

Save&Nextで次へ。

ここは何の意味かわからない。とりあえず全テーブルを選択した。

一時的に「テーブル選択がうまく言った」とかのメッセージが出て次になる。旧ドメインと新ドメインがデフォルトで表示されている。Find&Review Changesをクリック。

以下の表示になる。それぞれのリンクをクリックすると、変更用のSQL文が表示されるのだが、しかしこれが正しいのか間違いなのかの判断はつかない。おまかせするしかない。

赤いConfirm & ApplyChangesをクリックすると、Are You Sure?と言われるのでOK。ここまできて「大丈夫か?」と言われても引き下がりようがないだろう。

ここで処理が完了するはずだったのだが。。。

エラー発生

以下のようなエラーになった。

これは検索してもダメだ、わからない。以下の方策をとることにした。

全テーブルを対象としたが、実際に変更箇所が見つかったのは、wp_posts、wp_blc_links, wp_blc_instances, wp_postmeta, wp_redirection_404, wp_options, wp_commentsというテーブルのみだった。

最初のテーブル選択で、これらのテーブルのみを選択する。すると、成功したようだ。

サイトにアクセスする

あとは普通にサイトにアクセスすればよい。管理者ログインし、設定>一般を見てみると、たしかにドメインが変更されている。

適当に拾い読みする限りでは問題は無いようなので、旧サイトを消すことにする。

旧サイトからの転送を行う

転送については、いろんな人がいろんなことを書いているのだが、Apacheの設定をすれば問題無いと思われる。

/etc/httpd/conf/httpd.conf

<VirtualHost *:80>
  Redirect 301 / https://bar.com/
  ServerAdmin info@....
  ServerName foo.com
  ErrorLog logs/foo.com-error_log
  CustomLog logs/foo.com-access_log combined
</VirtualHost>

/etc/httpd/conf.d/ssl.conf

<VirtualHost *:443>
  Redirect 301 / https://bar.com/
  ServerAdmin info@...
  ServerName foo.com
  ErrorLog logs/ssl_foo.com-error_log
  CustomLog logs/ssl_foo.com-access_log combined
  LogLevel warn
  SSLEngine on
  SSLProtocol all -SSLv2 -SSLv3
  SSLHonorCipherOrder ON
  SSLCipherSuite EECDH+HIGH:EDH+HIGH:HIGH:MEDIUM:+3DES:!ADH:!RC4:!MD5:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!PSK:!SRP:!DSS:!KRB5:!DH
  SSLCertificateFile /etc/letsencrypt/live/foo.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/foo.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/foo.com/chain.pem
</VirtualHost>

転送だけなのだから、SSL証明書は不要だろうと思い。省略してやってみると、「apachectl configtest」はうまくいくのに、apacheの再起動はFAILEDになるという現象に遭遇した。

/var/log/httpd/error_logを見てみると、以下のメッセージが出ていた。

[Wed Jun 05 14:51:51 2019] [error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)

/wpdcフォルダを削除する

すべてうまく言ったら/wpdcフォルダを削除しておく。

他の設定変更

サイトによってはいろいろあるだろうが、まずはAnalyticsの設定を変更しないといけない。このサイトを新たに登録し、以前とはトラッキングIDを設定しておく。

バグ

通常運用中にバグらしきものを見つけた。今後何か見つけたら追加することにする。

  • メディアアップロード場所が勝手に設定されている。

なぜか「設定>メディア」でのメディア(画像)等のアップロード場所が勝手に設定されており、いくら画像をアップロードしようとしても(正確な文言は忘れたが)「権限が無いのでアップロードできない」などと言われてしまう。

そして、uploadsフォルダの権限設定を見直しても何の問題もなかった。結局は設定>メディアにおいてアップロード場所が存在しないディレクトリになっていた。