移行で苦労する原因の多くは、技術的な問題ではなく順序の間違いです。先に DNS を切り替えてから、データベースが古いままだったと気づく人が少なくありません。以下の順序に従えば、訪問者は移行にほとんど気づきません。
ステップ 1: 早めに DNS の TTL を下げる
移行の少なくとも1日前に、A レコードと AAAA レコードの TTL を 300 秒に設定します。古い値を保持しているキャッシュが期限切れになるまで時間がかかるため、このステップは当日では間に合いません。
ステップ 2: まず新しいサーバーを構築する
新しい VPS を作成し、セキュリティ強化チェックリストを適用して、同じ構成(Web サーバー、PHP または Node のバージョン、データベースエンジン)をインストールします。バージョンを揃えれば、想定外のトラブルの大半を防げます。コンテンツだけでなく設定もコピーしてください。
ステップ 3: ファイルをコピーする
rsync -aHAX --info=progress2 -e ssh /var/www/ user@NEW_IP:/var/www/
今のうちに一度実行しておきます。初回は時間がかかりますが、2回目以降は短時間で終わります。それが狙いです。
ステップ 4: データベースをコピーする
# on the old server
mysqldump --single-transaction --routines --triggers mydb | gzip > mydb.sql.gz
scp mydb.sql.gz user@NEW_IP:~/
# on the new server
gunzip < mydb.sql.gz | mysql mydb
これはリハーサルです。テストに使える動作するコピーが手に入ります。
ステップ 5: 誰かを誘導する前にテストする
hosts ファイルを編集して、自分のコンピューターから新しいサーバーを参照するようにします。NEW_IP example.com www.example.com を追加してください。サイトを閲覧し、ログインし、フォームを送信して、テスト注文を行います。一般の訪問者がまだ旧サーバーを見ている間に、問題を修正します。切り替え前でも動作するよう、TLS 証明書は DNS チャレンジでインストールしてください。
ステップ 6: 凍結、最終同期、切り替え
- 旧サイトをメンテナンスモードまたは読み取り専用モードにします。
rsyncとデータベースのダンプおよびインポートをもう一度実行します。- DNS レコードを新しい IP に変更します。
- hosts ファイルのエントリを削除し、別のネットワークから確認します。
読み取り専用の時間は通常数分です。ショップやログイン機能のあるサイトでは、利用の少ない時間帯に実施してください。
ステップ 7: 様子を見てから旧サーバーを廃止する
旧サーバーは数日間残しておきます。TTL を無視するリゾルバーもあるため、少量のトラフィックは届き続けます。可能であればそのトラフィックを新しい IP に転送またはプロキシし、ログを確認してから、TTL を通常の値に戻します。旧サーバーを削除する前に、新しいサーバーで新しいバックアップを取得してください。
同時に別の法域へ移る場合は、まずオフショアホスティングの法域比較で選択肢を比べてください。