Discourseのサイト、Let's Encryptを有効化せずにインストールした後、読み込まれない

オープンな SSH セッションの前で座っているだけでも危険なほど、私はそれなりに知識があります。先日、インストールを問題なく完了させ、正常に動作していました。

しかし今日、再構築を行う必要がありました(本番環境ではなく開発サーバーでの作業です)。同じ手順を踏んだにもかかわらず、./discourse-setup を実行し、インストール完了後にウェブサイトにアクセスしても何も表示されません。

./launcher start app も実行しましたが、やはり何も起きません。

インストールの問題を特定するために、一般的にどのような対応をすべきでしょうか?

./discourse-setup または ./launcher start app の実行後に、エラーメッセージやその他の種類のメッセージは一切表示されませんか?

環境の違いについて教えてください。

リバースプロキシを使用していますか?CloudFlare は使っていますか?

本番環境のインストールはどこでホストしていますか?

いいえ、インストールは成功したようです。docker infoを確認すると、コンテナも実行されていることが確認できます。

AWS上でAmazon Linux 2を実行しており、この同じOSでは先日まで正常に動作していました。このドメインのDNSにはCloudFlareのみを使用しています。

私が行った手順の正確な順序は以下の通りです。Git、Docker、ncatは、インストール中に指示されたamazon-linux-extrasを介してインストールされました(ただし、数日前には正常に動作していた開発用フォーラムがあったため、これは問題ないはずです)。

  1. Gitのインストール
  2. Dockerのインストールと起動
  3. ncatのインストール
  4. Discourseのインストール
  5. nginx1.12のインストール

なぜそうされたのですか?

まっとうなご質問ですね。:joy: 4 番目のステップの後で動かなかったからです…はは。アンインストールすべきでしょうか?

はい。アンインストールしてください。

おそらく DNS の問題です。

curl localhost の出力は何ですか?

tail /var/discourse/shared/logs/var-log/nginx/access.log は何を表示しますか?

Discourse には、コンテナ内にウェブサーバーが含まれています。

curl: (7) Failed to connect to localhost port 80: Connection refused

tail: cannot open '/var/discourse/shared/logs/var-log/nginx/access.log' for reading: No such file or directory

通常のインストールを実行しましたが、shared フォルダ自体が存在しないことを確認しました。

ご支援ありがとうございます!先ほども言った通り、私は「危険なほど」知識がありますが、それがいつも良い方向に働くとは限りません。:smiling_face_with_sunglasses:

申し訳ありません。

tail /var/discourse/shared/standalone/logs/var-log/nginx/access.log

それでもまだ正しくない場合は、

find /var/discourse/shared -name access.log

を実行して、ログファイルの場所を確認してください。

こちらで見つかりました:

/var/discourse/shared/standalone/log/var-log/nginx/

access.log はありませんでしたが、error.log がありました。

同じ行が何度も繰り返されていました(実際のドメインはここでは example.com に置き換えています):

2020/04/08 19:46:34 [emerg] 2112#2112: cannot load certificate "/shared/ssl/example.com.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

このドメインにはすでに証明書があるため、Let’s Encrypt を経由した証明書取得プロセスは行っていません。それでも Let’s Encrypt も行う必要がありますか?

証明書が必要です。

自分で証明書をインストールする方法を探すと、非常に面倒だと書かれているかもしれませんが、Let’s Encrypt に任せることで無料で、手間もゼロで証明書を取得できます。

まあ、よく見てください。うまくいきました。

@pfaffman さん、そして返信してくださった皆さん、ありがとうございます。:+1:

実は、その発言を取り消します。Chrome は最後の正常なページ読み込みが表示されるモードでウィンドウを読み込みましたが、シークレットモードで再読み込みすると、まだ動作していないことがわかりました。私の完全な失敗です。:man_facepalming:

Let’s Encrypt の証明書を設定する方法に関するリンクはありますか?私が何をしたか(あるいは何をしなかったか)を確認する必要があります。

discourse-setupを実行してください。Let’s Encryptについて尋ねられたら、任意のメールアドレスを入力するか、更新の必要があると判断された際に通知を受け取りたい場合はご自身のメールアドレスを入力してください。

はい、その通りです……インストールガイドに基づいて設定したつもりでしたが、まだ空白のページが表示されてしまいます。

Discourse は /shared/ssl/ ディレクトリに証明書を探しているようですが、実際の証明書の場所は /shared/standalone/ssl/ にあります。

私の app.yml 設定は以下の通りです:

   ## Docker コンテナはステートレスです。すべてのデータは /shared に保存されます
volumes:
  • volume:
    host: /var/discourse/shared/standalone
    guest: /shared
  • volume:
    host: /var/discourse/shared/standalone/log/var-log
    guest: /var/log

以下のコマンドをお試しください。

cd /var/discourse
rm -r shared/standalone/ssl shared/standalone/letsencrypt
./launcher rebuild app

rm の行は記憶に基づいています。もしそのディレクトリが存在しない場合は、本来入力すべきコマンドを特定してください。

なるほど、Let’s Encrypt の「1週間に10回までの証明書発行」という制限に引っかかっているようですね。これで、この先のステップに進めない理由の一部がわかりました。

この問題に複数の再構築後に直面した別のユーザーが見つけた情報はこちらです:Trouble with SSL after lots of rebuilds - #14 by pfaffman

というわけで、今すぐは既に所有している独自の証明書をインストールするしかないのでしょうか?