記事一覧

Cloudflare Workers で動かしている EmDash ブログに独自ドメインを設定した

workers.dev で公開していた EmDash のブログを、お名前.com で取得した独自ドメインのサブドメイン(blog.haai-to.com)に移しました。DNS の Cloudflare への移管から、EmDash 側の Site URL とパスキーの移行までの手順です。

前回の記事で、EmDash のブログを Cloudflare Workers に公開しました。このときのアドレスは tech-blog.yu-maeda.workers.dev でした。今回は、お名前.com で取得している独自ドメイン haai-to.com のサブドメイン blog.haai-to.com に移した手順をまとめます。

全体の流れ

  1. haai-to.com の DNS を Cloudflare に移す
  2. Worker に blog.haai-to.com を割り当てる
  3. EmDash の Site URL を変更し、パスキーを移す

ドメイン直下(haai-to.com)ではなくサブドメインにしたのは、将来ドメイン直下にホームページなどを置く余地を残しておくためです。

1. DNS を Cloudflare に移す

Workers に独自ドメインを割り当てるには、そのドメインの DNS を Cloudflare で管理している必要があります。お名前.com の DNS に CNAME を追加するだけの方法(パーシャルセットアップ)は、Business プラン以上でないと使えません。

DNS の管理を Cloudflare に移しても、ドメインの契約はお名前.com のままです。Cloudflare の DNS は Free プランで使えます。

既存のレコードを確認する

Cloudflare のダッシュボードで「ドメインを追加」すると、既存の DNS レコードが自動で読み込まれます。haai-to.com ではメールに Google Workspace を使っているので、メール関係のレコードが全部取り込まれているかを特に気をつけて確認しました。

  • MX(haai-to.com):smtp.google.com
  • TXT(google._domainkey):DKIM の公開鍵
  • TXT(haai-to.com):google-site-verification

スキャン結果が正しいかは、移行前の DNS に実際に問い合わせて照らし合わせました。手元に dig がない環境だったので、DNS over HTTPS で確認しています。

curl -s "https://cloudflare-dns.com/dns-query?name=haai-to.com&type=MX" \
  -H "accept: application/dns-json"

読み込まれた3件は、移行前の DNS と一致していました。ドメイン直下や www に A レコードがないという警告も出ますが、まだ Web サイトを置いていないので問題ありません。

DNSSEC がオフになっていることを確認する

Cloudflare から「DNSSEC がオフになっていることを確認してください」と案内されます。DNSSEC がオンのままネームサーバーを切り替えると、署名が合わなくなり、ドメイン全体(メールも含む)が一時的に引けなくなるおそれがあるためです。

DS レコードと DNSKEY レコードがなかったので、もともとオフだと分かりました。

curl -s "https://cloudflare-dns.com/dns-query?name=haai-to.com&type=DS" \
  -H "accept: application/dns-json"

同じ画面にある「オリジンでは Cloudflare の IP アドレスのみを許可する」は、自前のサーバーでサイトを動かしている場合の案内です。Workers で動かすなら関係ありません。

ネームサーバーを切り替える

お名前.com Navi の「ネームサーバーの変更」で「他のネームサーバーを利用」を選び、Cloudflare に指定された2つのネームサーバーを入力しました。今回は数分ほどで、Cloudflare 側の状態が Active になりました。

お名前.com と Cloudflare に同じレコードが入っているので、切り替えている間もメールは止まりません。

2. Worker に独自ドメインを割り当てる

wrangler.jsonc に routes を追加して、デプロイするだけです。DNS レコードと SSL 証明書は Cloudflare が自動で作ってくれます。

"routes": [
  { "pattern": "blog.haai-to.com", "custom_domain": true }
],
// パスキーを移し終えるまでは workers.dev も有効にしておく
"workers_dev": true,
npm run deploy

ここで workers_dev を有効のままにしておくのが大事です。理由は次の章で説明します。

3. EmDash の Site URL を変えて、パスキーを移す

パスキーはアドレスごとに登録される

EmDash の管理画面にはパスキーでログインします。パスキーは登録したアドレス(ドメイン)でしか使えません。そのため、tech-blog.yu-maeda.workers.dev で登録したパスキーでは、blog.haai-to.com の管理画面にログインできません。

これに備えて、EmDash にはドメインを変えた後でログイン状態を新しいアドレスへ引き継ぐ機能があります。

Site URL を変更する

旧アドレス(workers.dev)の管理画面にログインしたまま、Settings → General の Site URL を変更します。

  • 入力するのは https:// を付けないドメイン名だけです(blog.haai-to.com)
  • 保存すると、EmDash はそのアドレスでサイトが表示されるかを確認します。今回は「名前解決結果が公開アドレスではありません」と表示されました。ブラウザからは問題なく表示できていたので、Worker の中から同じ Cloudflare 上のドメインを確認したことによる誤判定だと思われます。「確認せずに使用」を選んで進めました

新しいアドレスでパスキーを登録する

Site URL を保存すると、「Continue on blog.haai-to.com」というボタンが表示されます。押すと、新しいアドレスに5分間だけ有効なサインインリンクでログインでき、そのままパスキーを追加する画面が開きます。ここでパスキーを登録すれば完了です。

この手順は旧アドレスの管理画面から始める必要があります。新しいアドレスにはまだパスキーがないので、先に workers_dev を無効にしてしまうと管理画面に入れなくなります。

反映を確認する

Site URL を変えると、記事の正式な URL(canonical)、RSS、サイトマップが新しいアドレスに切り替わります。

curl -s https://blog.haai-to.com/robots.txt | grep -i sitemap
# Sitemap: https://blog.haai-to.com/sitemap.xml

つまずいたポイント

  • Site URL の欄にはドメイン名だけを入れる:URL ではなく blog.haai-to.com の形で入力します
  • 公開アドレスかどうかの確認が通らない:実際に外から表示できているなら、確認を飛ばしてかまいません
  • パスキーの移行は旧アドレスから始める:移し終えるまでは workers.dev を無効にしないようにします
  • 手元で DNS の変更がすぐ反映されない:古い DNS 情報がキャッシュに残っていることがあります。Windows なら ipconfig /flushdns で消せます

次にやること

  • 移行が落ち着いたら workers_dev を false にして、workers.dev のアドレスを無効にする(同じ内容が2つのアドレスで見える状態をなくすため)
  • Cloudflare 側で DNSSEC を有効にする

コメント

No comments yet