nginxを設定できません: [emerg] 証明書 "/var/discourse/shared/standalone/ssl/ssl.crt" を読み込めません: BIO_new_file() が失敗しました

(SSL: error:02001002:system library:fopen:No such file or directory:fopen('/var/dis (…)

このエラーに関する記述が見つかりません。ガイドに従っているのですが。

こんにちは @slivo さん

このコマンドの出力を見てみましょう:

cd   /var/discourse/shared/standalone/ssl
ls -l

何か手がかりはありますか?

「いいね!」 1

cd ssl: そのようなファイルまたはディレクトリはありません

こんにちは @slivo さん

これは、最後にコンテナを再構築した際に、Let’s Encrypt の設定が証明書を作成しなかったことを示しています。

もちろん、それはすでにご存知のことと思います!

今週、似たようなインストール失敗がありました。

./launcher rebuild app

を実行してみてください。

「いいね!」 2

再度再構築しました。ガイドラインに従って設定しました。認証済み SSL を設定しました(/etc/nginx/sites-enabled/discourse.conf)が、エラーが発生します。

SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE

nginx が全く起動しません。

 nginx.service: Control process exited, code=exited status=1
 nginx.service: Failed with result 'exit-code'.

Process: 3840 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 25108 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=1/FAILURE)

// 高性能な Web サーバーおよびリバースプロキシサーバーの起動に失敗しました。

@slivo さん、こんにちは

セットアップの進捗についてのご報告、ありがとうございます。

リバースプロキシをコンテナ外に設置せず、標準的な Docker ビルドで Discourse を設定されているのでしょうか?

はい、また私はこのガイドも使用しています Run other websites on the same machine as Discourse

@slivo さん、こんにちは

上記のリンクは、UNIX ソケットを介してリバースプロキシにアプリケーションを公開し、Docker コンテナ内で Discourse を実行する概要です。

その場合、コンテナの yml ファイルで SSL を有効にしてはいけません。SSL は、コンテナ外部のリバースプロキシ上で certbot を使用して設定してください。

一般的な高レベルのアーキテクチャは以下のようになります。

WEB ユーザー <-- HTTPS --> リバースプロキシ <-- HTTP --> Docker コンテナ

パスワードとメールアドレスを xxxx して yml ファイルを投稿してください。どのような設定になっているか確認しましょう。

ありがとうございます。

「いいね!」 1

でも、今は理解できません。certbot を使って新しい証明書を作成しました。以下のように表示されています。

/etc/letsencrypt/live/myadress.com/fullchain.pem
キーファイルはここに保存されました:
/etc/letsencrypt/live/myadress.com/privkey.pem

このファイル内のアドレスを変更する必要がありますか?それとも /etc/nginx/sites-enabled/discourse.conf のような設定ファイルを変更すべきでしょうか?あるいは、完全に間違っているのでしょうか?

こんにちは、@slivo さん

Nginx インスタンスで別のアプリの前にリバースプロキシを設定する際、設定ファイルの場所(コンテナ内かコンテナ外か)について非常に明確にする必要があります。

完全に理解できているかどうかわかりませんが、Nginx の背後に Discourse を設置したいと考えています。サーバー上には他のアプリケーションはありませんが、外部からのアクセスに対する保護を強化したいと考えています。

@slivo さん、こんにちは

お困りの状況は理解できます。丁寧に説明させていただきます。

上記の投稿のいずれかで、以下のように書かれています。

/etc/letsencrypt/live/myadress.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/myadress.com/privkey.pem

Docker コンテナ内にあるのか、コンテナ外にあるのかについては言及されていません。

ご存知の通り、あなたのケースでは nginx はホスト上で直接実行されていると同時に、アプリ(Docker コンテナ)内でも実行されています。

以下のように投稿された場合:

/etc/letsencrypt/live/myadress.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/myadress.com/privkey.pem

詳細を記載されない限り、外部の者があなたが何を指しているのか正確に知ることはできません。その設定はコンテナ内にあるのか、それとも外にあるのか?私たちは「推測」や「仮定」をして「コンテナ外について話しているのだろう」と考えることもできますが、これらの詳細が提供されていない以上、確実なことは言えません。私の経験では、問題と解決策の間の最短距離は、何も仮定せず、詳細に注意を払うことです。

さらに、yml ファイルを投稿されていません。また、コンテナ外の nginx 設定ファイルも投稿されていません。そのため、実際の設定で何を行っているのかを「確認」することができません。

参考になれば幸いです。

「いいね!」 1