Discourse-appコンテナが起動してからサイレントに停止します

コミュニティの皆様へ

公式ドキュメント discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub に従って、Discourse のプライベートインスタンスをインストールしようとしました。スクリプトは非常に複雑に見えましたが、container.ymldiscourse-setup ファイルを自分で設定するように手動で変更する必要がありました…

最初の問題:複雑さにもかかわらず、インストールスクリプトでは公開ポートの変更が許可されていません!ポート 80/443 は nginx によって使用されているため、私のサーバーでは使用できません。そのため、Discourse にアクセスするために必要なポートとしてポート 3080/3443 を設定するように、セットアップスクリプトを再度調整する必要がありました。

その後、すべてのコンテナを起動して実行させることができました。Portainer でスタックを見ると、アプリケーションが起動して静かに停止し、ログからはその理由に関する多くの情報が得られないことがわかりました。redis と postgres はポートを公開していないため、discourse アプリはこれらのコンポーネントに接続できないために失敗する可能性がありますか?何を見落としたか、または間違ったことをしましたか?

_discourse-app_logs.txt (10.4 KB)

ご協力ありがとうございます!

Caused by:

Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for [::1]:6379

RedisのIPv6ループバックアドレスへの接続に失敗しているようです。

リチャードさん、早速のご回答ありがとうございます!私はITの専門家ではありませんが、ツールをいじって遊ぶのが好きです。この問題の解決策はどうなりますか?

アドバイスをよろしくお願いいたします!

RedisとPostgres用に別々のコンテナをセットアップするなど、標準のインストールから逸脱しているようですので、既製の回答は用意できません。Discourse内でRedisの設定をどのように構成しましたか?

また、redis:4-alpineが見えます。Discourseはバージョン6.20以上を必要とするため、Redisの新しいバージョンに移行する必要があります。ただし、これが問題の原因だとは思いません。

「いいね!」 2

セットアップスクリプトは標準セットアップでのみ機能します。より複雑なことを行う場合は、手動で yml を編集する必要があります。スクリプトを変更するよりもはるかに簡単です。

Discourse は標準以外のポートでは動作しません。前面にリバースプロキシが必要です。たとえば、Run other websites on the same machine as Discourse のようなトピックを参照してください。

提供された postgres と redis を使用しない場合は、ご自身で原因を特定する必要があります。原因を推測したり推論したりするには、あまりにも多くの要因が考えられます。複雑なセットアップを試す前に、標準的なインストールを別の仮想マシンで行って、どのように機能するかを確認することをお勧めします。

「いいね!」 3

ドキュメントに記載されているとおりに、GitHubからすべてのものをダウンロードし、公開ポートを変更してスクリプトを実行しただけで、「非標準」のインストールは実行していません。

  • Redisの構成もPostgresも何も変更していません。
  • Redisのバージョンも何も変更していません。
    これらのソフトウェアは、正規のdiscourse-setupスクリプトによってインストールされました。

@pfaffman 「ymlを手動で編集する」とはどういう意味ですか?どのymlについて話していますか?「containers」にはたくさんの.ymlファイルがあります…

ちなみに、このボックスにはすでにリバースプロキシがあり、単純な構成のようです。複数のサブドメイン.confファイルがリダイレクションサブドメイン:80 → ポートXXXを定義しています。これは必要とされていることですか?

複雑なセットアップを試す前に、まず標準インストールを別のVMに実行することを推奨します。

複雑なセットアップは望んでいません😊、Dockerが設計されているとおり、他のコンテナと一緒にDiscourseを実行したいだけです…

ご協力ありがとうございます!

一般的に、discourse-setup は個別の postgres および redis インスタンスをインストールしません。ましてやバージョン 12 と 4 をインストールすることはありません。

設定と、container.yml およびスクリプトに加えた変更を投稿していただけますか?機密情報の設定は必ず削除してください。
また、discourse_docker リポジトリのどのコミットを使用しているかもお知らせください。

「いいね!」 3

あなたは discourse-setupdiscourse-docker を更新すると上書きされるファイルを編集しました。app.yml 以外のものを変更するのは、明らかに標準的ではありません。

なぜですか?そして、そこに加えた変更は、その方法ではありません。それらの変更は app.yml に記述する必要があります。

Discourse は標準的でないポートでは動作しないため、これは標準的なインストールではありません。

標準的なインストールには、単一コンテナに postgres と redis が含まれます。指摘されているように、redis と postgres のサポートされていないバージョンを使用しています。また、ここで説明されているように、2 つのコンテナをインストールすることもできます。スタンドアロン コンテナから個別の Web およびデータ コンテナに移動する (また、./discourse-setup --two-container を使用して、discourse-setup に個別のデータおよび Web コンテナを作成させることができますが、保守は少し複雑になります (データ コンテナをいつ更新する必要があるかを知る必要があります)。

「いいね!」 1

OK、次に実行する必要があるのは次のとおりです。

  • 変更されたスクリプトでインストールされたすべてのソフトウェアをワイプします(これが簡単に元に戻せることを願っています)。
  • スクリプトを再度ダウンロードします。現在のインストール用に ````git clone GitHub - discourse/discourse_docker: A Docker image for Discourse /var/discourse``` を使用しましたが、これで問題ありませんか?
  • ./discourse-setup を実行する前に、app.yml ファイルで設定を変更する必要があるかもしれません。
  • 標準インストール用のインストールスクリプトを実行します(単一コンテナを希望します)。
  • Nginxプロキシを設定して、discourse.example.com:80/443 を適切なコンテナにルーティングします。この部分に関するヒントはドキュメントにありますか?

もし私が何か手順をスキップしていたら、リストを完成させてください!

重ねて、ご協力ありがとうございます!

:white_check_mark:

Run other websites on the same machine as Discourse を参照してください。

「いいね!」 2

インストールされるのはDockerのみです。

問題なさそうです。

app.ymldiscourse-setup によって作成されます。ポートにアクセスできない場合、discourse-setup を実行することはできませんが、ソースを読めば ./discourse-setup --skip-connection-test を実行してそれでも実行できることがわかります。

Nginx が Let’s Encrypt を担当するため、Let’s Encrypt のテンプレートをコメントアウトする必要があります。これは、上記および以下のリバースプロキシのトピックで説明されていると思われます。

Using Nginx Proxy Manager to manage multiple sites with Discourse または Run other websites on the same machine as Discourse (すでにリンクされています) を参照してください。

「いいね!」 1

Hi @pfaffman

Discourseと同じマシンで他のウェブサイトを実行する のドキュメントを読んで、いくつか確認が必要です。

  • ポストには次のように書かれています。

他のサーバーがポート 80 または 443 を使用している場合、./discourse-setup を使用して Discourse をセットアップすることはできません。samples/standalone.yml をお気に入りのテキストエディタでコピーして編集する必要があります。

そして、導入部分で既に述べられているように、discourse-setup を実行する前に app.yml を変更する必要があることを理解しています。

他のサーバーがポート 80 または 443 を使用している場合、./discourse-setup を使用して Discourse をセットアップすることはできません。samples/standalone.yml をお気に入りのテキストエディタでコピーして編集する必要があります。

以下のプロセスで確認していただけますでしょうか。

  • Github からすべてのものをダウンロードする
  • --skip-connection-test オプションを付けて discourse-setup を一度実行する → これにより containers/app.yml が作成されます
  • 上記のドキュメントに記載されているように app.yml を変更する
  • /var/discourse/launcher rebuild app でソフトウェアを更新する
  • Nginx サイトを作成して Discourse ソケットを指し、Nginx を再起動する
  • 最後にブラウザを起動して、サーバー IP を指す https://discourse.mydomain.com で Discourse にアクセスする

アドバイスをお待ちしております!

更新:

  • Githubからすべてのものをダウンロードする:完了
  • --skip-connection-testオプションでdiscourse-setupを一度実行する:スクリプトが終了するまで問題なく実行されましたが、スクリプトは次のように返されました。
docker: Error response from daemon: driver failed programming external connectivity on endpoint app (784361985c928eb26b149d829f37882056562d9b1e77ef4ce71fbfe30c5d80b1): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use.

コンテナが既存のWebサーバーと同じポートにアクセスしようとしているため、これは正常に見えます。ただし、ディスコースコンテナが作成されていない(docker container lsによって返された)ため、nginx構成を進める前にこれを確認したいと思います…

ご協力ありがとうございます!

ポートをコメントアウトする必要があると思います。

「discourse-setup を実行する前」ということですか?その場合、スクリプトを実行する前に app.yml が存在しないのですが、どのファイルを変更すればよいのでしょうか?1 コンテナのアプリをインストールしたいのですが、同じ discourse-setup スクリプトを再度実行する必要がありますか、それとも /var/discourse/launcher rebuild app コマンドを実行する必要がありますか?

ちなみに、上記の私のプロセスは正しいですか?

nano などで既存のファイルを編集し、ポートをコメントアウトします。./launcher rebuild app

おそらく、あなたのケースでは --skip-rebuild も使用できるでしょう。その場合、以下を実行します。

./discourse-setup --skip-connection-test --skeip-rebuild
nano containers/app.yml
./launcher rebuild app

お手数をおかけして申し訳ありませんが、専門家ではないので100%確信したいです😉:

  • もう一度 ./discourse-setup --skip-connection-test --skip-rebuild を実行します(以前の実行は --skip-rebuild オプションなしでした)。以前の実行でインストールされたものを削除する必要はありません
  • 次に、既存の app.yml ファイルを編集してポートをコメントアウトします(すでにコメントアウトされています)。
  • 次に ./launcher rebuild app を実行します。

お時間をいただきありがとうございました!

discourse-setup を再度実行する必要はありません(RAMの量が変更され、デフォルトの推奨設定にメモリ設定を更新したい場合を除く)。

ポートを編集して再構築するだけです。

こんにちは、ジェイさん。

今朝の再構築の結果は以下の通りです。

  • ./launcher rebuild app = OK、警告がいくつかありますが、dockerによると local_discourse/up は起動しています。
  • Run other websites on the same machine as Discourse の指示に従ってnginxサイトを設定し、nginxを再起動しました = OK。
  • discourse.mydomain.com がサーバーのIPアドレスを指すようにDNSエントリを設定しました = OK。
  • ブラウザで discourse.mydomain.com を開くと…サーバーで実行されているNextcloudインスタンスが表示されます。トラフィックがdiscourseコンテナに正しくルーティングされていないため、設定を修正する必要があるようです…

NPMは堅牢なツールではないと読んだので、インストールしたくありません。また、discourseの設定ではIPアドレスのハードコーディングが必要ですが、それでもインストールすべきでしょうか?

アドバイスをお待ちしています!

これは、Discourse インストール環境の前面にあるリバースプロキシ nginx の問題のようですね。

待ってください… 何ですか? なぜコンテナの外に NPM をインストールする必要があるのですか?

「いいね!」 2