WordPress はセキュリティの観点からも最新の状態に保つ必要があります。
しかし、バージョンアップによってプラグインやテーマ、または PHP などのサーバー仕様が原因で正常に表示できなくなるケースも見受けられます。
とくにメジャーバージョンアップの際はこれらのリスクが非常に高くなります。
では、どうすればよいか?
これを防ぐには事前に動作の検証確認を行うこと。
今回は本番同様のテストを行うためのいわゆるステージングサーバーのようにも使える、既存サイトの複製方法を紹介します。
複製サイトの構築
検証環境といえば、ローカル環境の構築をイメージされる方も多いと思います。
しかし、 OS によってやり方は異なりますし、 PC が得意でなければここで挫折してしまうでしょう。
もっとも手軽な方法はサーバー内にもうひとつ WordPress をインストールすること。
つまり、サブディレクトリやサブドメインにサイトを複製することです。
WordPress の複製に必要なバックアップファイル
静的 HTML サイトであれば、基本的にサーバー内のファイルが構成データのすべてです。
しかし、 WordPress で構築されたサイトはそうではありません。
サーバー内には下記のファイルが格納されています。
- WordPress プログラム本体
- デザイン&機能(テーマ)
- 追加機能(プラグイン)
- 投稿に使用される画像などメディアファイル
そして、実際の投稿データと各種設定データはデータベースに保存されています。
移設や複製にはこの2つが必要となります。
例えば、実際のサイトがexample.com
で検証のための複製先がサブドメインのexample.com/proto-site/
だとします。
手動でサイトを複製する場合はいわゆる FTP で確認できるサーバー内のファイルをすべて proto-site にコピーします。
加えてデータベースの複製が必要となるのですが、このケースではサブディレクト配下になるため、 URL が変わります。
データベース内の URL をすべて書き換える必要がありますが、この中にはシリアライズという内容が含まれており、単純に一括で置き換えればよいというわけではありません。
WordPress にそれなりに精通していれば、これらの作業はさほど難しくないのですが、やはり少々敷居が高い感じられる方も多いでしょう。
ここからは WordPress サイトの移設・複製を簡単に行える「Duplicator」というプラグインを使用した WordPress の複製を解説します。
Duplicator プラグインの使い方
事前準備
検証用 WordPress 用のデータベースを作成します。
既存のデータベースに加えるのではなく、必ず新規のデータベースを生成ください。
Duplicator で複製の際にデータベース情報が必要となります。
- データベース名
- MySQL データベースのユーザー名
- MySQL データベースのパスワード
- MySQL のホスト名
※この記事では同一ドメイン内での検証環境の作成を想定していますが、異なるサーバーへの移設の際は新サーバーで行う作業となります。
データベースの作成方法が分からない場合
レンタルサーバーの「自動インストール」などでサブディレクトリなどに新規の WordPress インストールしてそのデータベースを使用します。
例えば、元のドメインがexample.com
であった場合にexample.com/proto-site/
にインストールします。
そのwp-config.php
より上記のデータベース情報を控えます。
その上でwp-config.php
を含めてインストールした WordPress は削除してしまいます。(proto-site ディレクトリを空にする)
つまり、データベースだけを使用するということです。
※インストーラの実行の際に上書きされるだけなので、ほとんどの場合で削除しなくても問題ありません。
プラグインのインストール
新規追加より「 Duplicator WordPress Migration Plugin 」で検索してインストール、有効化します。
セッティング
Duplicator メニュー settings→General タブの Storage 項目で「 Disable .htaccess File In Storage Directory Disable if issues occur when downloading installer/archive files.」をチェックします。(バックアップフォルダに.htaccess
を生成が原因で処理がエラーとなるケースがあるため、対処しておきます。)
バックアップデータの作成
それでは複製データを作りましょう。
Packages→右の Create New タブをクリックします。
以下のような画面になりますので、分かりやすい名称を入力して、 Next で進みます。
バックアップデータのチェックが行われます。
緑の「 Good 」であれば問題ありませんので、「 Yes. Continue with the build process!」をチェックして Build へ進みます。
もし、「 Notice 」が表示された場合は内容をチェックします。
下記はよくあるパターンの警告ですが、実際には問題なく完了するケースも多いので、まずはそのまま作成してみることをお勧めします。
Size Checks
タイムアウトする場合があるというファイルサイズについての警告です。
→チェックして複製対象から外し、手動でコピーする。
Addun Sites
サブディレクトリの中に別の WordPress があるということです。
→Quick Filters でチェックして除外します。
Name Checks
ファイル名に特殊文字が含まれるという警告です。
→画像名などに不適切な文字が使われているようなケースです。これは無視して進んで、問題があれば、複製後に修正するのが現実的かと思います。
これでバックアップデータが生成されます。
複製先にコピーする installer(installer.php
)と Archive(名称+data_xxxxx.zip
)の2つをクリックしてダウンロードします。
複製サイトでの復元
先にインストール済みの複製先 WordPress フォルダにダウンロードしたバックアップファイル2つをアップロードします。
この際にセキュリティの観点からサブディレクトリへインストールが推奨されています。
example.com/proto-site
のような形です。
そして、検証サイトの URL にinstaller.php
を付与してアクセスします。
上記であれば、example.com/proto-site/installer.php
となります。
下記の赤 Notice は WordPress のルート階層へバックアップデータをアップロードしているために警告が表示されています。(実際の復元には支障はありません)
事前準備で確認した複製用の WordPress のデータベース情報を入力します。
データベース情報に間違いがなければ、新しい複製サイトの情報が表示されますので、「 Next 」で実行します。最後に複製したサイトにログインし、 Duplicator の Tools→「 Data Cleanup 」実行すると、先にコピーした2つは削除されます。
以下は Duplicator で生成される可能性のあるファイル一覧です。
サーバー内を確認しこれらが残っている場合は削除しましょう。
wp-snapshots
installer.php
installer-backup.php
dup-installer-data_xxxxx.sql
dup-database_xxxxx.sql
dup-installer-log_xxxxx.txt
xxxxx _archive.zip
htaccess.xxxxx.orig
実はこの「 Duplicator 」は重大な脆弱性が発見されたことがあります。
もちろん、現在は対処済みでそれだけ多く使われているということでしょう。
いずれにしても、サーバー内にデータベースを書き換えるような処理を行うファイルが存在すること自体、好ましくありません。
複製で使用されたファイルは削除するとともにプラグインそのものも、必要がなければ停止、もしくは削除しましょう。
※複製元である本サイトにも「 wp-snapshots 」が生成されていますので、作業完了後は削除することをお勧めします。
サイト複製の注意点
これまで紹介した手順はもちろんサーバー移転でも使えます。
- 検証のためのテスト環境作成
- 異なるサーバーへの移設
ただし、ドメインが同一で移設を行う場合には新規サイトのセットアップを先に行わなければなりません。
このような際には hosts ファイルを使った仮想的に新サーバーにアクセスすることができます。
なお、メジャーバージョンアップに備えて検証環境の構築というような趣旨であれば、公開環境の元サイトでは自動更新を停止しておきましょう。
WordPress のルート階層のwp-confing.php
の最下部に下記の1行を追加します。
これで自動更新機能がキャンセルされます。
define( 'AUTOMATIC_UPDATER_DISABLED', true );
本番ドメイン内に検証サイトを構築する上での注意点はひとつだけ。
検索エンジンにインデックスされないよう対処することです。
表示設定の検索エンジンでの表示で「検索エンジンがサイトをインデックスしないようにする」をチェックすることで検索エンジンにインデックスを拒否する noindex タグが出力されます。
さらに強力に検証サイトをガードしたい方は WordPress 全体の閲覧制限を実施することをお勧めします。