GitHubの公式ガイドに従ってDiscourseをインストールしました。
すべて順調に進みましたが、フォーラムにアクセスすると502エラーが発生します。
railsのproductionログを確認しましたが、production_errorやsidekiqのログは見当たりませんでした。
tailコマンドで以下のような出力を確認しました。
Creating scope :open. Overwriting existing method Poll.open.
Creating scope :open. Overwriting existing method Poll.open.
Can’t reach ‘/images/welcome/discourse-edit-post-animated.gif’ to get its dimension.
discourse doctorを実行すると、
Discourse version at forum.abc.com.au: NOT FOUND
と表示されます。
SSLを無効にして再構築したところ、フォーラムにアクセスできるようになりました。
SSLに問題があることは確かですが、原因が特定できません。SSLのインストール中は、IP解決は成功していました。
お手数ですが、ご支援をお願いします。
pfaffman
(Jay Pfaffman)
2
HTTPSを有効にする前に、安全でない画像へのリンクが張られていたようです。
@pfaffman ご返信ありがとうございます。
これは新規インストールです。手動でリンクすることはできません。
すべてのログを調査した結果、このエラーは Let’s Encrypt の証明書発行に起因することがわかりました。同様の問題に直面している方がいらっしゃれば、以下の情報が役立つかもしれません。
まず、Nginx ログで次のエラーを確認しました。
cannot load certificate "/shared/ssl/forum.abc.com.au.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)
次に、SSL ログを確認しました。
forum.abc.com.au:Verify error:CAA record for forum.abc.com.au prevents issuance
サブドメイン用の Discourse インストールスクリプトを実行する前に、メインドメインに CAA レコードが存在するか確認し、証明機関が Let’s Encrypt ではないか(私の場合はメインドメインの CAA は comodoca.com)を確認する必要があります。Let’s Encrypt ではない場合、Discourse 用の Let’s Encrypt 証明書は発行されません。
修正方法:以下の通り、Discourse サブドメイン用に CAA レコードを追加する必要があります
Acme:error:caa :: CAA record for ... prevents issuance - Help - Let's Encrypt Community Support
古い証明書ファイルを削除し、再度ビルドを試みてください。
rm -rf /var/discourse/shared/standalone/ssl
rm -rf /var/discourse/shared/standalone/letsencrypt
./launcher rebuild app
pfaffman
(Jay Pfaffman)
5
それらのレコードを検証する方法で、追加のソフトウェアを必要としないものがあれば、discourse-setup でその検証を行うことも検討しますが、これまでこのような事例は見たことがありません。
それを見つけてくれて、よくやった!
Stephen
(Stephen)
6
ドメインを所有しており、CAA の意味を理解して設定できるのであれば、Let’s Encrypt の影響を理解しているという仮定は妥当です。
@pfaffman
dig caa {domain.tld} でレコードが返されます。
まず、レコードが返されるか検索し、
次に、返された場合に発行機関が letsencrypt.org 以外かどうかを確認します。
ただし、これは非常に稀なケースです。含めるべきかどうかはわかりません。
@Stephen
その通りです。ドメインを所有しているなら、その扱い方も分かっています。
誰かをサポートしていた際、この問題は cPanel を使用し、Comodo などの他社プロバイダーと連携して自動 SSL を提供するホスティング会社で発生する可能性があります。cPanel でサイト(WordPress など)を作成する際、デフォルトで多数のレコードが追加されます。
とにかく、これは非常に稀なケースで、私が目にするのは初めてです。
Stephen
(Stephen)
9
CAAがここでも時折現れます。ドメイン全体の証明書の発行を制限していることを指摘すると、通常返ってくる反応は🤦🏻♂️です。
@Stephen
興味深いですね!確認が必要です。ドメイン全体で証明書の発行をロックできるかどうかはわかりません。
ドメイン全体(つまり、そのすべてのサブドメイン)に対する証明書の発行を制限することですね?
Stephen
(Stephen)
11
@(ドメイン)にCAAレコードを設定した場合、それはトップレベルドメインとサブドメインの両方に適用されます。Let’s Encryptのようなサービスに対して、sub.domain.yourdomain.com に特定のCAAレコードを追加することで、Let’s Encrypt が発行できる証明書の範囲を制限することも可能です。
したがって、以下のように設定します:
domain.com. CAA 0 issue "comodoca.com"
sub.domain.com. CAA 0 issue "letsencrypt.org"
また、issue の代わりに issuewild を指定することで、CA にワイルドカード証明書の発行を許可することもできます。さらに、iodef を使用してポリシー違反時に通知されるメールアドレスを関連付けることもできます。
ここでも同じ問題が発生しています。コマンドを実行しても問題は解決しませんでした。Cloudflare DNSとプロキシに変更しましたが、問題は解決しません。
これを何度も行いましたが、このような経験はありませんでした。しかし、私は間違いなくコーダーでも専門家でも、それに関連するものでもありません。ただの幸せなエンドユーザーです。しかし、これはイライラします。
pfaffman
(Jay Pfaffman)
13
私の推測では、Cloudflareがプロキシに設定されており、Let’s Encryptのレート制限に達するまで何度も再構築したため、証明書を取得するために1週間待たなければならないということです。
迅速かつ簡単な解決策は、新しいサブドメインを選択し、Cloudflare DNSのみを設定して再構築することです。それがうまくいけば、レート制限に関する私の推測は正しかったことになります。新しいサブドメインを気に入るか、もう一度試せるようになるまで1週間待つことができます。
RGJ
(Richard - Communiteq)
14
率直な質問ですが、再構築は毎回新しい証明書をリクエストしていますか?
Benjamin_D
(Benjamin Decotte)
15
私も全く同じことを考えていました。リクエストについてはよく分かりませんが、有効な証明書が見つかった場合(サンドボックスを再構築したばかりです)、新しい証明書は発行されないようです。