Ubuntu 20.04.3 LTS で新規インストールが失敗する

新しい EC2 インスタンスへの標準設定での新規インストールが失敗しました。AWS で Ubuntu 20.04.3 の EC2 インスタンスを起動し、最新の Ubuntu アップデートをすべて適用しました。その後、こちら にあるシンプルな標準インストール手順を実行しました。

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

./discourse-setup

唯一の注意点として、セットアップ実行時に HTTP(S) を介したサーバーへの接続に失敗しました。AWS で2つの受信ポートを開くのを忘れていたためです。そのため、AWS のセキュリティグループでポートを開いた後、app.yml ファイルを手動で設定し、./launcher rebuild app を実行しました。

しかし、ブラウザは接続できず、production ログには以下が表示されます。

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'

この問題が発生したため、以前Discourseをインストールした際に全く同じ問題(production ログにも同じエラー)が発生した再利用サーバーから離れ、新たにEC2インスタンスを起動しました。単純に最初からやり直して問題を解決しようと考えた次第です。

再起動を試みましたか?

はい、インスタンスを起動して停止し、コマンドラインから再起動しましたが、解決しませんでした。

はい、Ubuntu 20.04.3(最新アップデート適用済み)と Discourse インストーラーの間に問題があることはほぼ確実です。先ほどインストーラーを再度実行しましたが、今回はポートを開放しておくことを確実にしたため、app.yml ファイルを手動で編集する必要(人為的ミスの排除)はありませんでした。インストールは円滑に進み、ドメインも正常に検出されたように見えました。しかし……サイトが表示されません。プロダクションログには以下が表示されています。

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:365:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:117:in `block in connect'

今回は単純な作業しか行っていないため、私が何か間違ったことはあり得ません。スクリプトを実行しただけです。

別の Redis がインストールされていませんか?

メモリはどれくらいありますか?スワップ領域は作成されましたか?

何もインストールしていません。新しい t2.small EC2 インスタンスなので、RAM は 2GB です。標準で作成されるスワップを確認する必要があります。

RAM とスワップの情報を以下に示します。これは、すべての標準的な Ubuntu アップデートを適用したばかりの、変更・追加・設定・修正が一切行われていないバニラの AWS EC2 t2.small インスタンスです。インストール前に使用したコマンドは、基本的な sudo apt updatesudo apt upgrade のみです。同じ OS(Ubuntu 20.04.3)の 2 つの異なるインスタンスで、3 回目にバニラの Discourse インストールを試みました。そのため、インストーラーと最近のバージョンに何らかの問題があるのではないかと考えています。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       973Mi       131Mi        36Mi       875Mi       855Mi
Swap:         2.0Gi       0.0Ki       2.0Gi

参考までにディスク容量も記載します。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        39G  7.8G   31G  20% /

新しい Digital Ocean ドロップレットにインストールを実行しましたが、問題なく動作しました。インストーラー自体に問題はないようです。

最も可能性が高い推測ですが、Redis エラーが発生する理由としては不自然です。おそらく、インストーラーを何度も実行した結果、Let’s Encrypt のレート制限に達してしまったことが真の原因ではないでしょうか。

別のドメイン名(例:forum2.example.com)で再度お試しください。

「いいね!」 2

ビンゴ!また正解でした、成功しましたね。

さて、私は古いサーバーからフォーラムを移行するテストを行っていたため、何度も再構築を繰り返しています。

いったいどうすればこの問題を回避できるのでしょうか?私は Let’s Encrypt を使用していません。正常にインストールした後、app.yml ファイルを編集してドメインを変更し、app.yml 内の Let’s Encrypt テンプレートのコメントアウトを確認して再構築しましたが、それでも解決せず、同じ「Redis の失敗」というエラーが発生します。Let’s Encrypt の呼び出しがインストーラーに組み込まれているため、私は行き詰まっているのでしょうか?

リバースプロキシを使用して HTTPS を提供していない場合、その方法は使えません。HTTPS は必須です。また、Lets Encrypt を削除する場合は、HTTPS テンプレート(名称は様々です)も削除する必要があります。

Redis エラーが発生している理由についてはよくわかりませんが、Lets Encrypt をコメントアウトした際に Redis もコメントアウトしてしまったのかもしれません。それが最も考えられる原因です。

2 つ目のドメイン名を追加するには、Set up Let’s Encrypt with multiple domains / redirects の手順に従ってみるか、1 週間待つことをお勧めします。

ええと、スレッドを一通り読めば、新規インスタンスへの単純なインストールだったことがわかります。そのため、インストールプログラムが質問に基づいて app.yml を作成する仕組みになっている以上、私が何かをコメントアウトすることはできませんでした。つまり、Redis の失敗は Let’s Encrypt のレート制限に直接関連しています。これが開発チームの役に立てば幸いです。

私はプロキシ、正確には Cloudflare を使用して SSL 証明書を配信し、HTTPS のみで接続・配信を行っています。

https テンプレート「templates/web.ssl.template.yml」をコメントアウトし、もちろん Let’s Encrypt テンプレートもコメントアウトした状態で launcher rebuild app を実行してテストしましたが、同じ現象が発生しました。Redis エラーです。つまり、私は行き詰まっているのでしょうか?Let’s Encrypt の呼び出しをバイパスする方法を提供しないという、あまりにもひどいインストールプログラムの判断です。他に試せるものを提供していただけない限り、忍耐が美徳となるでしょう。ご支援いただき、心より感謝申し上げます。私はひたすらフラストレーションを抱えつつも、謙虚に待機しています。

「いいね!」 1

それでは状況がさらに複雑になり、Discourse を壊さずに Cloudflare を使用する方法を慎重に調査しない限り、後々別の問題に直面することになります。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.