すでにメインサイトが稼働中で、ルートドメインを一時的であってもフォーラムサーバーに向けることができない場合に、Cloudflareとサブフォルダーをセットアップした手順を共有したいと思います。
主要なポイント
- 既存の
mywebsite.comは現在1.1.1.1を指しており、稼働中です。 mywebsite.com/forum(およびそのサブディレクトリ)を2.2.2.2にルーティングする必要があります。- Discourseのインストール中、ドメインが現在のサーバーを解決しているかを確認するLetsEncryptの検証をパスできないため、DNS検証を使用する必要があります。
app.yml の変更
Letsencrypt の更新
新しいLetsEncryptテンプレートを作成し、このトピックに従って app.yml に設定します: LetsEncrypt DNS Validation Template Using Cloudflare
ただし、その投稿から issue_cert メソッドのみをコピーし、残りのコンテンツは元の web.letsencrypt.ssl.template.yml から取得するようにしてください(トピック投稿後に変更されたため)。
LETSENCRYPT_CF_TOKEN: ""
LETSENCRYPT_CF_ACCOUNT_ID: ""
LETSENCRYPT_CF_ZONE_ID: ""
LETSENCRYPT_DNS_PROVIDER: "dns_cf"
- Cloudflareトークンは、CFのマイプロファイル → 「APIトークン」ページから作成できます。
- アカウントIDとゾーンIDは、ドメインの概要ページに表示されます。
- DNSプロバイダーの値は上記のように設定してください。
サブフォルダーの更新
このトピックに従って Serve Discourse from a subfolder (path prefix) instead of a subdomain 、env: の下に DISCOURSE_RELATIVE_URL_ROOT: /forum を設定し、run: セクションを更新します。
ユーザーIPに関するこの投稿を参照してください: Serve Discourse from a subfolder (path prefix) instead of a subdomain - #111 by varun21
再構築
app.yml を変更した後、再構築コマンドを実行する必要があります。Discourseはドメインが現在のサーバーのIPを解決しているかを確認するため、このチェックをスキップする必要があります(mywebsite.com はすでに 1.1.1.1 を指しており、Discourseはルートドメインをチェックします)。そのため、次を実行します:
./launcher rebuild app --skip-connection-test
Cloudflare のセットアップ
/forum を 2.2.2.2 にルーティングするためにWorkersを使用することを推奨する人もいますが、私はロードバランシングでより簡単に実現できることを見つけました。Workersでは、ロケットローダーやその他の類似設定を無効にしても、CSS/JS関連の問題を解決できませんでした。したがって、
- ロードバランシングを有効にします(トラフィックの下)。
- 「プールを管理」->「作成」を選択します。
- 2つのプール(メインサイト用とフォーラム用)を作成します。それぞれに1つのエンドポイントのみを含める必要があります。
- ホスト名が
mywebsite.comになるようにロードバランサーを作成します。 - エンドポイントセクションで、両方のプールを選択します。
- モニターをスキップします(サーバーのヘルスを監視する必要はありません。メインサイトは常に
1.1.1.1を指し、フォーラムは2.2.2.2を指す必要があります)。トラフィックステアリングをスキップします(デフォルトはオフです)。 - カスタムルールで、パス条件を
/forumとして1つ作成し、フォーラムのエンドポイントにポイントします。
- 保存/デプロイします。
注意点
- 何らかの理由で、サンプル
app.ymlをコピーして再構築しても機能しませんでした(おそらく私が何か間違っていたのでしょう)。そのため、解決策として、最初に別のドメインでdiscourse-setupを実行し、その後、上記の他のapp.ymlの変更とともにホスト名を変更し、最終的な再構築を実行しました。 - DiscourseはLetsEncryptから2つの証明書(
RSA certとECDSA cert)を生成します。LetsEncryptは、1つの正確なドメインあたり週に5つの証明書という制限があります。2回連続で何か間違えると、3回目の試行では1つの証明書しか発行されず、フォーラムは機能しません(このスクリプト GitHub - sahsanu/lectl: Script to check issued certificates by Let's Encrypt on CTL (Certificate Transparency Log) using https://crt.sh で現在の制限を確認できます)。 - CFロードバランシングは無料ではありませんが、(現時点では)500k DNSリクエストあたり5ドルのコストを考慮すると、Nginxなどでの手間と比較して、それだけの価値があると思います。

