今日も8時間睡眠
888文字のブログです

【長文】コアサーバーからエックスサーバーに移行したので、つまづいたところなどを長々とまとめてみる

🎃

先日、このブログを含むいくつかのサイトを運用しているサーバーを、コアサーバーからエックスサーバーに切り替えました。そこで、今回のサーバー移行の際に、やったことや迷ったりつまづいたりしたことをまとめていきたいと思います。

なお、大人の事情により、サーバーの広告が随所に貼りついてます。

一般的な移行作業

移行作業の概要

サーバーの移行とは、自分の管理しているドメイン(http://example.comのようなもの)にアクセスしたときに、今使っているサーバーではなく新しいサーバーのデータを見に行くように設定することです。なので、移行作業でしなければいけないことを大きく分けると

  • サーバーのデータや設定の移行
  • ドメインとサーバーとの対応情報の変更

の2つがあります。

1つ目のデータや設定の移行とは、ファイルの移行、データベースの移行、メールアドレスの設定などです。2つ目の設定は、ネームサーバーの設定です。

以下、細かく見ていきます。

仮申し込み

まずはデータを移行する先のスペースを確保しないといけないので、新サーバーの申し込みをする必要があります。普通はどのサーバーにも無料お試し期間がついています。エックスサーバーのお試し期間は、現時点では10日間です。サイトがうまく表示されるか、動作が遅くないかなどを事前に確認しましょう。

申し込むと、管理画面に入るためのアカウント情報やFTPのアカウント情報がメールで送られてきます。今後使うので、保管しておきましょう。

ドメインの設定とデータの移行

まずは、自分の管理しているドメインの設定を行います。マニュアルのドメイン設定のとおりに設定します。サブドメインがある場合は、マニュアルのサブドメインの設定も見て設定します。設定で難しいところは特にないでしょう。

例えば、example.comのドメインの設定を行うと、サーバー上で/example.comというフォルダが自動作成されます。その下にできるpublic_htmlフォルダに、ファイルをアップしていくことになります。

サブドメインの設定は少し変わっています。xxx.example.comというサブドメインを設定すると、普通はこの名前のフォルダができそうな気がするのですが、エックスサーバーの場合はそうではありません。  /example.com/public_html/xxx というフォルダができます。このxxxフォルダの下に、ファイルをアップしていきます。

個人的にはかなり気持ち悪いのですが、エックスサーバーの場合はこういう仕様らしいです。サーバーの移行が完了すると、次の2つ  http://xxx.example.com  http://example.com/xxx は同じ内容を返すことになります。どちらでもアクセスできます。

「サブフォルダ型は使わず、サブドメインのアクセスだけにしたい」という場合は、/example.com/public_html/xxxフォルダ直下に、次の内容の.htaccessファイルを置きます。

SetEnvIf Host "^xxx.example.com$" host
order deny,allow
deny from all
allow from env=host

こう書くと「xxx.example.com」からのアクセスのみを許可する、という内容になります。なお、このように設定しても、サブドメイン用のファイルを「/example.com/public_html/xxx」下にアップすることは変わりません。

今まで僕が使っていたコアサーバーでは、「/public_html/example.com」や「/public_html/xxx.example.com」というパスだったので、「public_htmlとドメインの順序が逆」「サブドメインのファイルをアップする場所が変わる」といった違いがあります。公開領域より外にあるファイルをインクルードしている場合など、プログラムによってはパスを書き直す必要があるかもしれません。

個人的には、コアサーバーの設定の方が自然だと感じます。

データベースの移行

旧サーバーでデータベースを使っている場合は、データベースの内容も移行します。wordpressを使っている場合などですね。ここに書く方法は一般的な方法ですが、僕の場合は、wordpressをこの方法で移行すると使えなくなってしまうプラグインがあったので、別の方法を使いました。その方法については後で書きます

データベースの移行で一番簡単な方法は、phpMyAdminを使う方法でしょう。旧サーバー内でデータベースのエクスポートを行い、エックスサーバーでインポートするのが一番楽です。

エックスサーバーでは、MySQLを使う前に、データベースを作っておく必要があります。マニュアルの「MySQLの設定」にもありますが、次のステップが必要です。

  • MySQLユーザーの追加
  • MySQL(データベース)の追加
  • MySQLアクセス権の設定

データベースが複数ある場合は、2つ目と3つ目を繰り返します。データベースを作った後、phpMyAdminを使って旧サーバーのデータベースをインポートすると完了です。

なお、phpMyAdmin上でデータベースを追加することはできません。上のマニュアルの通り、管理画面から追加しないといけません。

サイトの動作確認

エックスサーバーでは、ここまでの段階でサイトがきちんと表示されるかどうかを確認できる「サイトの動作確認」機能があります。マニュアルの「動作確認について」にある通り、動作確認用のURLを作って、そこから確認するだけです。

ドメインとサーバーとの対応情報を変える(=ネームサーバーの変更)には時間がかかるんですよね。なので、旧サーバーから新サーバーに切り替えたときに何か問題があっても、すぐに旧サーバーに戻すことができません。それは困りますよね。簡単に事前の動作確認ができるのはいいですね。

ただ、実はwordpressの場合はうまくいきません。例えば、  http://example.com/ の動作確認用URLは、  http://example-com.check-xserver.jp/ というようなものになるのですが、wordpressの場合は管理画面内で行ったURL設定が優先されてしまいます。「管理画面>一般設定>サイトアドレス (URL)」で「http://example.com/」と指定されていれば、サイト内のリンクはこちらで作られます。なので、トップページの動作確認はできますが、サイト内のリンクは正しく作られず、他のページの動作確認ができません。

そのため、wordpressの動作確認は、hostsファイルをいじって確認する必要があります。これについては後で記載します

以上のことから、エックスサーバーにデフォルトで用意されている動作確認機能は、自分の作ったプログラムが動くかどうかの確認には使えますが、wordpressの動作確認(テーマやプラグインが動くかなど)には使えない、ということがわかります。残念ですが、wordpressの仕様なのでしかたないですね。

メールアドレスの設定

旧サーバーでメールアドレスを使っていた場合は、新サーバー用にメールアドレスを設定しなおしましょう。

メールアカウントの追加のように1個1個追加することもできますし、メールアカウントの一括登録のように一気に登録することもできます。

ただし、1点だけ注意があります。エックスサーバーでは、試用期間中はメールの設定ができません。本申し込み後(お金を払った後)に、設定できるようになります。

本申し込みをしてから次に説明する「ネームサーバーの設定」をするまでの間に、メールアドレスの設定を行いましょう。ネームサーバーの設定を行ってもすぐには反映されないので、前のサーバーでのメールアドレスの設定はしばらく残しておきましょう。

ネームサーバー・DNSの設定

ファイルをアップして動作確認まで済んだら、ネームサーバーの設定を行います。設定の反映には数時間かかります。反映が完了すると、サイトのURLにアクセスした場合に、前のサーバーではなく新しいサーバーに接続されるようになります。

これは、エックスサーバーの管理画面で行うのではなく、ドメインを管理しているサイト上で行います。このサイトの場合は、バリュードメインを使っているので、バリュードメインのサイト上で行います。

各ドメインのネームサーバーを設定できるページが、ドメイン管理サイトの管理画面内にあるはずです。そこで、エックスサーバーのネームサーバー情報(申し込みをしたときに送られてきたメールに書いている)を設定します。

サブドメインを別のサーバーに接続したい場合には、DNSの設定も行います。エックスサーバー管理画面内の「DNSレコード設定」を見ると、すでにサーバーのIPアドレスが入っているはずです。ここでサブドメインの設定を行います。マニュアルの「DNS設定」の部分を見るといいでしょう。

ここでも、エックスサーバーの設定で個人的に気持ち悪く感じる点があります。エックスサーバーでは、サブドメインを設定しなくても、「wwwあり」のURLが使えます。例えば、example.comというドメインを登録すると、何も設定しなくてもwww.example.comが作られ、どちらでアクセスしても同じ内容が表示されます。例えば、次の2つ  http://example.com/a.html  http://www.example.com/a.html は同じ内容になります。

.htaccessファイルで設定すれば、「wwwありだけ」や「wwwなしだけ」に統一する運用はできます。wordpressの場合は、管理画面で設定したサイトのURLが使用されるので、勝手にどちらかに統一されます。

wordpressの移行作業

ここからは、wordpressの移行について書いていきます。前半は一般的な話で、後半は自分がつまづいた話を書きます。

wordpressの一般的な移行方法

wordpressの移行方法は、上で書いた一般的な移行作業とだいたい同じです。異なる点を中心に見ていきます。

ドメインの設定を行った後、wordpress関連のファイルをアップしていきます。一旦、旧サーバーからwordpressのファイルをダウンロードしておき、次に述べるようにwp-confing.phpだけを変更して、エックスサーバー側にアップします。

wp-confing.phpで変更する部分は、データベースに関する部分です。次の部分を書き換えます。

/** WordPress のためのデータベース名 */
define('DB_NAME', 'example_wp');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'example_user');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'example_pass');

/** MySQL のホスト名 */
define('DB_HOST', 'mysql○○.xserver.jp');

データベース名の「_(アンダーバー)」より前の部分は、サーバーIDです。申し込み時に自分で指定したものです。「_(アンダーバー)」の後の部分は、MySQLデータベースの追加時に自分で設定するものです。ユーザー名とパスワードも、後で自分で設定するものです。

DB_HOSTは、「localhost」と設定するサーバーが多いかもしれませんが、エックスサーバーの場合は、上のような内容で設定します。○○の部分には数字が入りますが、その数字は、エックスサーバーの管理画面内の「MySQL設定」の部分で確認できます。

次に、データベースの移行を行います。まず、phpMyAdminなどを使って、旧サーバーからデータベースをエクスポートしておきます。エックスサーバーでデータベースを作成し、そこにインポートすればおしまいです。データベースの作成は、上で書いたように、「MySQLユーザーの追加」(まだ済んでいない場合)、「MySQL(データベース)の追加」、「MySQLアクセス権の設定」の3ステップが必要です。

wordpressの移行については、これで完了です。僕もこれで完了するはずだったのですが。。。

wordpressの動作確認

wordpressに関するファイルとデータベースを移行すれば、サイトの移行は終了です。ただ、ネームサーバーの設定をする前に、実際にサイトが動くかどうかを確かめておいた方がいいですよね。

しかし、「サイトの動作確認」の部分で書いたように、wordpressの場合はエックスサーバーの「動作確認」機能が使えません。動作確認用のURLが実質使えないからです。

そのため、「hostsファイルをいじって確認する」という方法をとります。hostsファイルを編集すれば、IPアドレスとドメイン名を対応させることができます。

ネームサーバーの設定を変更していない段階では、http://example.comにアクセスしても昔のサーバーに接続されます。しかし、自分のPC内にあるhostsファイルを編集し、このドメインに新サーバーのIPアドレスが対応するように設定すれば、自分のPCでこのURLにアクセスした場合「だけ」新しいサーバーに接続されます。他のPCからのアクセスは今まで通りなので、安心して動作確認ができます。

windows 10であれば、hostsファイルは  C:\WINDOWS\system32\drivers\etc\hosts にあります。このファイルは管理者権限でないと編集できません。そこで、まずは「windows アクセサリ」の中にある「メモ帳」アイコンを右クリックし、「その他>管理者として実行」を選択します。次に、「ファイル>開く」から、上に書いたhostsファイルを開きます。hostsファイルが表示されない場合は、ファイル名の右側が「テキスト文書(*.txt)」となっているかもしれないので、「すべてのファイル(*.*)」に切り替えます。

hostsファイルを開いたら、一番下の行に、次の内容を追記します。

192.xxx.xxx.xxx example.com
192.xxx.xxx.xxx aaa.example.com

これにより、自分のPCから「http://example.com」や「http://aaa.example.com」にアクセスすると、指定したサーバー「192.xxx.xxx.xxx」につながるようになります。エックスサーバーの管理画面内にある「サーバー情報」を見ると、サーバーのIPアドレスが載っているので、それを記載すればOKです。サブドメインの指定が不要な場合は、1行目だけを追加します。

自分のPCからアクセスすれば新サーバーに、自分のスマホ・タブレットや他のPCからアクセスすれば旧サーバーにつながるようになります。これで、新しいサーバーの動作確認ができます。なお、動作確認を行った後は、hostsファイルに追記した部分は削除するようにしましょう。

プラグインが動かない!

上に書いたように、wordpressのファイルとデータベースを移行し、動作確認を行ってみました。サイトにアクセスすると、移行できたことを表すメッセージが表示され(内容は忘れちゃいましたが)、wordpress自体はきちんと稼働していました。

基本的には、今まで通り動いていたのですが、僕の場合、1個だけ問題がありました。バックアップ目的で入れていた「WP-DBManager」というプラグインが使えなくなっていました。

wordpressの管理画面の上部に「バックアップファイルを保存する場所がない」というエラーが出ていて、昔のサーバーのパスが表示されていました。なるほど、データベースを移行したときに昔のサーバーの情報のまま移行してしまったということですね。

データベース内の該当箇所を直接書き換えればいいや、と考えました。新サーバーのデータベース内を検索すると、まずrecently_editedというオプションにパスの情報が入っていました。これはそもそもwordpressに初めから入っているもので、デフォルトはnullなので、いったん値を空欄にしてみました。しかし、事態は改善しません。

dbmanager_optionsというオプションもあり、ここにもパスの情報が入っていました。どうやら、これが怪しそうです。「WP-DBManager」プラグインのソースを見ると、uninstall.phpの中で、このオプションの値を削除しているようでした。そのため、「旧サーバーでプラグインを停止&削除⇒旧サーバーからデータベースを移行」とすればいいのではないか、と考え実行しました。

しかし、それでもうまくいきません。「WP-DBManager」プラグインを有効化して設定をしようとしても、ソース丸見えの画面が表示されてしまいます。謎の現象です。

このプラグインをあきらめてもよかったのですが、wordpressのバックアップは自動でとれるようにしたいと思ったので、別のプラグインを探しました。

そうすると「BackWPup」というよさげなプラグインを見つけました。さっそくインストールしてみたのですが、「WP-DBManager」のときと同じ現象となりました。

これはもしかしたら、プラグインの問題ではなくて、今まで使っていたwordpressのデータベースとサーバーとの相性の問題なのか。原因はわかりませんが、今このプラグインをあきらめても、今後、他のプラグインを入れたときに同じ問題が起こるかもしれません。苦渋の決断ですが、次に述べる「記事のインポート」で対応することにしました。

記事のインポートでwordpressの移行を実施

wordpressのファイルとデータベースの移行(一般的な方法)では、自分の場合はエラーが出てしまい、あるプラグインが使えなくなってしまいました。そこで、別の方法を試してみます。

まず、旧サーバーのwordpressの管理画面上で、記事を全部エクスポートしておきます。次に、hostsファイルをいじって、ドメインをエックスサーバーの方に設定します。

wordpressのサイトから最新版のwordpressを取得し、ファイル一式をエックスサーバーの方にアップします。さらに、旧サーバーから持ってきた、.htaccessファイルや、wp-contentフォルダの中身、エックスサーバーのMySQLの設定を反映したwp-config.phpをアップします。そして、エックスサーバー上でwordpressを新規にインストールします。こうして、まっさらの状態のwordpressが出来上がります。

次に、はじめから入っているサンプル投稿・固定ページを削除します。それから、URLの設定をし、事前にエクスポートしておいた記事をインポートします。URLの設定をする前にインポートすると、リンクがおかしくなってしまうので、この順番は重要です。

あとは、パーマリンクの設定、テーマの設定、プラグインの設定などを行います。使っているプラグインが多くて、各プラグインの設定項目が多いとかなり大変ですが、僕の場合はもともとプラグインの数を増やさないようにしていたので、そんなに大変ではありませんでした。

こうすれば、使えなかったプラグインも動くようになり、記事も無事に表示されるようになりました。

移行した目的

ちなみに、そもそもなぜ移行したかというのを書いておきます。今までは、コアサーバーのCORE-MINIプランという、月額200円程度のプランを使っていました。今まではこのプランでまったく問題はなかったのですが、「MySQLが10個まで、管理できるドメイン数が50まで」という制限をとりたくなったんですよね。

CORE-Aプランなど、別のプランに簡単にアップグレードできればよかったんですが、それはできないようです。プランを変えると、普通のサーバーの移行と同じ作業をすることになります。それなら、この際もっといいサーバーに変えようかなと思ったのがきっかけです。

ネットではエックスサーバーが大絶賛されていますが、個人的には「言うほどかな?」という印象。確かに、マニュアルの充実度は素晴らしく、コアサーバーやバリュードメインとは大きく違います。でも、サービス自体がすごく優れてるかどうかは、まだよくわかりません。コアサーバーでも十分早かったし、同じサーバーで管理している別のブログが炎上したときに同時閲覧数が200人を超えても落ちなかったし。まぁ、きっと大絶賛されている理由には、アフィリエイト報酬が高いっていうのもあるんだろうなー。

おわりに

コアサーバーからエックスサーバーにサイト移行したときの、作業内容や悪戦苦闘の様子を書いてきました。サーバーを移行するときの参考になれば、と思います。

(8888文字)