メインコンテンツまでスキップ

ワイルドカード DNS のセットアップ

ワイルドカード DNS により、acme.yourdomain.comtechcorp.yourdomain.com などのテナントサブドメインが使用できます。これはオプションです — FeedbackPulse はワイルドカード DNS なしでもスラッグベースの URL(例:/wall/acme-corp)で問題なく動作します。


ワイルドカード DNS は必要ですか?

シナリオワイルドカード DNS が必要?
テナントがスラッグベースのパブリックページを使用(/wall/acme-corp不要
テナントが独自のサブドメインを希望(acme.yourdomain.com必要
テナントが独自のカスタムドメインを持ち込む(feedback.acme.com不要(CNAME を使用)

必要なもの

  1. ワイルドカード DNS A レコード: *.yourdomain.com → サーバー IP
  2. ワイルドカード SSL 証明書: *.yourdomain.com をカバー
  3. Web サーバー設定: すべてのサブドメインを受け入れる

ステップ 1:DNS レコードの追加

ドメインレジストラーの DNS 管理パネルに移動して以下を追加します:

タイプ名前/ホストTTL
A*123.456.789.0(サーバー IP)300

ルートドメインの通常の A レコードも必要です:

タイプ名前/ホスト
A@123.456.789.0

プロバイダー別の手順

Cloudflare

  1. Cloudflare ダッシュボード にログインします
  2. ドメインを選択します
  3. DNSRecords に移動します
  4. Add Record をクリックします
  5. タイプ:A | 名前:* | IPv4:サーバー IP | プロキシ:DNS のみ(グレークラウド)
  6. Save をクリックします

重要: ワイルドカードサブドメインの場合、Cloudflare プロキシをDNS のみ(グレークラウド)に設定してください。プロキシ済み(オレンジクラウド)にしないでください。Cloudflare の無料プランはワイルドカードサブドメインをプロキシしません。

Namecheap

  1. ログイン → Domain List → ドメインを Manage
  2. Advanced DNS に移動します
  3. Add New Record をクリックします
  4. タイプ:A Record | ホスト:* | 値:サーバー IP | TTL:Automatic
  5. 保存します

GoDaddy

  1. ログイン → My Products → ドメインの DNS
  2. Add Record をクリックします
  3. タイプ:A | 名前:* | 値:サーバー IP | TTL:600
  4. 保存します

Google Domains / Google Cloud DNS

  1. Google Domains に移動します
  2. ドメインを選択 → DNS
  3. Custom Records の下に追加:
  4. ホスト:* | タイプ:A | データ:サーバー IP
  5. 保存します

AWS Route 53

  1. Route 53Hosted Zones → ドメインを選択します
  2. Create Record をクリックします
  3. レコード名:* | レコードタイプ:A
  4. 値:サーバー IP | TTL:300
  5. Create Records をクリックします

DigitalOcean DNS

  1. NetworkingDomains に移動します
  2. ドメインを選択します
  3. 追加:タイプ A | ホスト名 * | 送信先:サーバー IP | TTL:300

Hetzner DNS

  1. Hetzner DNS Console に移動します
  2. ゾーンを選択します
  3. レコードを追加:タイプ A | 名前 * | 値:サーバー IP

ステップ 2:ワイルドカード SSL 証明書の取得

オプション A:DNS チャレンジを使用した Let's Encrypt(無料)

Let's Encrypt のワイルドカード証明書は DNS-01 チャレンジが必要です(HTTP ではありません):

# DNS プロバイダー用の Certbot プラグインをインストール
# 例:Cloudflare
sudo apt install certbot python3-certbot-dns-cloudflare

# Cloudflare 認証情報ファイルを作成
sudo mkdir -p /etc/letsencrypt
sudo nano /etc/letsencrypt/cloudflare.ini

Cloudflare API トークンを追加します:

dns_cloudflare_api_token = your_cloudflare_api_token_here
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

# ワイルドカード証明書を取得
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d yourdomain.com \
-d "*.yourdomain.com"

他のプロバイダー向けの DNS プラグイン

プロバイダーCertbot プラグインインストール
Cloudflarepython3-certbot-dns-cloudflaresudo apt install python3-certbot-dns-cloudflare
Route 53python3-certbot-dns-route53sudo apt install python3-certbot-dns-route53
DigitalOceanpython3-certbot-dns-digitaloceansudo apt install python3-certbot-dns-digitalocean
Google Cloudpython3-certbot-dns-googlesudo apt install python3-certbot-dns-google

オプション B:手動 DNS チャレンジ

DNS プロバイダーに Certbot プラグインがない場合:

sudo certbot certonly --manual --preferred-challenges dns \
-d yourdomain.com -d "*.yourdomain.com"

Certbot が TXT レコードの作成を求めます。プロンプトに従ってください。

手動チャレンジの注意事項: 90 日ごとに手動で更新し、その都度 DNS TXT レコードを更新する必要があります。

オプション C:有料ワイルドカード証明書

以下のプロバイダーから購入できます:

  • Comodo/Sectigo(年間約 $70)
  • DigiCert(年間約 $400)
  • RapidSSL(年間約 $125)

ステップ 3:Web サーバーの設定

以下のワイルドカードセクションを参照してください:

  • Apache 設定 — 「ワイルドカードサブドメインサポート」セクションを参照
  • Nginx 設定 — 「ワイルドカードサブドメインサポート」セクションを参照

ポイント:ServerAlias *.yourdomain.com(Apache)または server_name yourdomain.com *.yourdomain.com;(Nginx)を使用します。


ステップ 4:動作確認

# サブドメインの DNS 解決をテスト
dig test.yourdomain.com

# ANSWER セクションにサーバー IP が返されるはずです

# curl でテスト
curl -I https://anything.yourdomain.com
# 200 またはリダイレクトが返されるはずです(「could not resolve host」ではなく)

ステップ 5:FeedbackPulse の設定

.env ファイルを更新します:

# サブドメイン間で Cookie が機能するようにセッションドメインを設定
SESSION_DOMAIN=.yourdomain.com

# メインアプリ URL(サブドメインなし)
APP_URL=https://yourdomain.com

SESSION_DOMAIN=.yourdomain.com の先頭のドットに注意してください — これによりセッション Cookie がすべてのサブドメインで機能します。


FeedbackPulse でのサブドメインの仕組み

acme.yourdomain.com へのリクエストが届くと:

  1. ResolveTenant ミドルウェアがサブドメイン(acme)を抽出します
  2. subdomain = 'acme' のテナントを検索します
  3. 見つかった場合、そのテナントを現在のコンテキストとして設定します
  4. ユーザーはテナントのログインページまたはダッシュボードを表示します

テナントは登録時にサブドメインを設定します。管理パネルで手動で設定することもできます。


次のステップ