WordPress Domain Changerでドメイン変更
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フォルダの権限設定を見直しても何の問題もなかった。結局は設定>メディアにおいてアップロード場所が存在しないディレクトリになっていた。