コピーが WordPress の移行を壊すことはめったにありません。壊すのは、誰も書いていなかったものです。cron、webhook、古い hostname を一行に焼き込んだプラグイン、まだ古いサーバーから出るメールボックス。棚卸しを移行そのものとして扱います。ファイル転送は、そのあとに来る楽な午後です。
触る前にシステムを書き出す
ファイルが動く前に、知らない人でも使える一ページを書きます。PHP の版。データベースの大きさ。cron の行と、WordPress の中の予約アクション。これは同じ一覧ではありません。メールは、誰が、何を通して送り、SPF がそのホストをすでに名指ししているか。サイトを呼ぶ、またはサイトが呼ぶ連携のすべて。決済の webhook と CRM の同期はよくある驚きです。誰も書き出していないプラグイン設定の中にいるからです。
この店にとって「動く」が何を意味するかも書きます。実物の商品を一つ購入する。仮想の商品を一つ購入する。ログイン。パスワードの再設定。問い合わせフォームと、届くべきメール。カタログが検索に依存するなら検索。道に名前を付けられないなら、DNS を変える準備はできていません。
| 行 | なぜここにあるか |
|---|---|
| PHP、データベース容量、オブジェクトキャッシュ | 新しいホストは「上がって」いても、実行環境が違いうる。 |
| Cron と予約アクション | 取りこぼした夜間ジョブは、朝の報告が空になるまで大丈夫に見える。 |
| メールの経路 | サイトは開く。そのあいだ、注文メールは新しい機械の上で全部死ぬ。 |
| Webhook と外向き API | たいてい文書になっていない。そしてホスト名に最初に気づく。 |
| お金を生む五つの経路 | トップの確認ではそれらを歩かない。 |
前日に TTL を下げる
切り替えの前日に、DNS の TTL を 300 秒にします。これを飛ばして新しいホストが間違っていると、受け手の一部は古いレコードを何時間も持ち続けます。短くしていないキャッシュは急かせません。障害の最中にその待ちを見つけるより、一日をわざと待ちます。
ステージングの URL は本番のホスト名ではない
新しいサーバーを上げ、公開の DNS がまだ古いホストを向いているあいだ、hosts ファイルで自分のマシンだけを向けます。それから本物の名前で道を歩きます。staging の URL は、本番のドメインをデータベースに保存したプラグインを隠します。リクエストに本物の名前が入るまで大人しく、その瞬間こそ驚きが欲しくないときです。
本番のホスト名でクリティカルパスを歩いていなければ、移行はテストされていない。
古いホストは温存する
移行の週に古いホスティングは解約しません。少なくとも二週間、読み取り専用のまま残します。費用はわずかです。まだ使う必要のなかったバックアップに依存しない、唯一の戻り道です。新しいホストが三日目におかしくなっても、古いレコードにはまだ意味があります。
メールは忘れられる確認
サイトは完成に見えて、注文メールはすべて新しい機械で死んでいることがあります。From アドレス、リレー、ポート 25 が開いているかどうかまで書きます。複数のホストでは開いておらず、動く道は 587 の認証付きリレーだけです。SPF にはすでにレコードが一つあります。二つ目は足しません。SPF のレコードが二つあっても合体しません。両方無効になり、それまで届いていたメールは、ほかはうまくいった移行の翌週から消え始めます。
移行を完了と呼ぶ前に、新しいホストから、自分が開ける受信箱へ、本物の注文メールとパスワード再設定を1通ずつ送ります。ログの “sent” は、受信箱のメッセージと同じではありません。試験になるのは後者です。
apex と www に HTTPS。証明書は自分で更新します。メールはまだ出ます。五つの道はまだ最後まで通ります。そのあと一日、ホームページではなくエラーログを見ます。ホームページは、監視がすでに祝っている場所です。ログは、webhook が決済事業者に 404 を返し始めた場所です。
このやり方の移行は退屈です。それが狙いです。移行の面白い話は、ほとんどが棚卸しに一行足りなかった話です。
