Discourseのイントラネットへのインストール - bootstrapがexit code 17で失敗

こんにちは。

イントラネット環境にDiscourseをインストールしています。再構築プロセス中に、このエラーに遭遇することがあります。

pups::exec_error: cd /var/www/discourse && su discourse -c 'bundle install --retry 3 --jobs 4' failed with return #<process::status: pid 645 exit 17>
失敗場所: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn’
exec failed with the params {“cd”=>“$home”, “hook”=>“bundle_exec”, “cmd”=>[“su discourse -c ‘bundle config --local deployment true’”, “su discourse -c ‘bundle config --local without \"development test\"’”, “su discourse -c ‘bundle install --retry 3 --jobs 4’”]}
bootstrap failed with exit code 17
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
6ef3d42536c82021bdb1f24980cbd860572869f207e4eb2001e59e8923b182cf
root@wpyb3816:/var/discourse# cat /etc/docker/daemon.json

原因をご存知の方はいらっしゃいますか?
よろしくお願いします。

ビルドログの他の箇所で、これより前にエラーメッセージは表示されていますか?

「いいね!」 3

I, [2024-03-29T14:58:21.260866 #1] INFO – :
I, [2024-03-29T14:58:21.261079 #1] INFO – : > su postgres -c ‘createdb discourse’ || true
2024-03-29 14:58:21.298 UTC [55] postgres@postgres ERROR: database “discourse” already exists
2024-03-29 14:58:21.298 UTC [55] postgres@postgres STATEMENT: CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR: database “discourse” already exists
I, [2024-03-29T14:58:21.299606 #1] INFO – :
I, [2024-03-29T14:58:21.299710 #1] INFO – : > su postgres -c ‘psql discourse -c “create user discourse;”’ || true
2024-03-29 14:58:21.334 UTC [59] postgres@discourse ERROR: role “discourse” already exists
2024-03-29 14:58:21.334 UTC [59] postgres@discourse STATEMENT: create user discourse;
ERROR: role “discourse” already exists

and then another error before the crash …

[2024-03-29T14:59:48.410149 #1] INFO – : > cd /var/www/discourse && su discourse -c ‘bundle install --retry 3 --jobs 4’
Retrying fetcher due to error (2/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn’t have the CA certificates needed for verification. For information about OpenSSL certificates, see OpenSSL Errors and Rails – Certificate Verify Failed · RailsApps.
Retrying fetcher due to error (3/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn’t have the CA certificates needed for verification. For information about OpenSSL certificates, see OpenSSL Errors and Rails – Certificate Verify Failed · RailsApps.
Retrying fetcher due to error (4/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn’t have the CA certificates needed for verification. For information about OpenSSL certificates, see OpenSSL Errors and Rails – Certificate Verify Failed · RailsApps.
Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most
likely your system doesn’t have the CA certificates needed for verification. For
information about OpenSSL certificates, see
OpenSSL Errors and Rails – Certificate Verify Failed · RailsApps.
I, [2024-03-29T14:59:49.328710 #1] INFO – : Fetching source index from https://rubygems.org/

これが問題です。インターネットがrubygemsへのアクセスをブロックしているようです。

Discourseはhttpsを必要とし、標準のインストールは証明書を取得するために公開IP経由でアクセス可能である必要があります。このため、あなたも同様に問題が発生するでしょう。

「いいね!」 1

承知いたしました。イントラネット環境では、デフォルトですべてのURLが閉じられているため、URLを開くための内部リクエストを行いました。

完了次第、結果をお知らせします。ありがとうございます。

https://rubygems.org/ を開いた場合も同様のエラーが発生します…

すべてのサイトにサーバーを開けない場合は、メッセージを自分で読み、読み込まれた各サイトを 1 つずつ開く必要があります。6 日のターンアラウンドでは、1 ~ 2 か月かかるでしょう。

インターネットにアクセスできないプライベートイントラネットで Discourse を動作させることは、実際にはサポートされていません。どこかでイメージをビルドしてから、イントラネットで起動しようとすることができます。HTTPS 証明書を取得する方法も自分で見つける必要があります。

「いいね!」 1

こんにちは。

以下に実行した手順を示します。

  • PC上のイントラネット外からイメージを作成しました。
  • リポジトリにアップロードしました。
  • イントラネット上のVMにイメージをプルし、コンテナを起動しました。
    ./launcher start app --run-image my image

コンテナは正常に動作していますが、ポート80/443にアクセスできないようです(nmapで確認したところ、開いています!)。ブラウザからアプリにアクセスできません。: curl -v localhost:80 と入力すると、このエラーが発生します。

* プロキシ環境変数 no_proxy == 'localhost,127.0.0.1,.laposte.fr' を使用しています
* 127.0.0.1:80 に接続しようとしています...
* localhost (127.0.0.1) のポート 80 に接続しました (#0)

> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.81.0
> Accept: */*
>
* 受信失敗: Connection reset by peer
* 接続 0 を閉じます
curl: (56) 受信失敗: Connection reset by peer

証明書がなく、nginxが失敗していると推測します。sslとlet’s encryptのテンプレートを削除し、新しいイメージをビルドする必要があります。その後、証明書を持つリバースプロキシが必要になります。

代わりに、自分で生成した証明書を使用できる可能性があります。let’s encryptが存在する前のトピックがまだあると思います。

エラーを確認するには、nginxのログを確認できます。

app.yml ファイルで letsencrypt テンプレートを有効にしていないため、この削除リクエストは気にする必要はないはずですよね?独自の証明書を持つフロントエンド VIP を使用しています。