Postgres 12 のアップグレード失敗により再構築できません

どのガイドですか?
ポート 2045 は、何か思い当たるのですが、はっきりとは特定できません :thinking:

数ヶ月前にインストールが数回失敗した後、2045に変更しましたが、#でコメントアウトされているためこれは関係ありません。問題はあのポートではありません。

このガイドに従いました discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

まあ…変更されてしまいましたね、手が滑ることはありますよね :sweat_smile:

なるほど、でも 2045 にたどり着くためには、何かしらの経路を辿ってここに到達したはずです。
私も同じ投稿を辿ったのだと思います。なぜか Nginx の設定に 2045 のプロキシが記述されているのですが、その理由が思い出せないんです…

:狂った顔:

@Benjamin_D 私の nginx ファイルには 2045 ポートは存在しません。スクロールして確認してください。app.yml のその行は # でコメントアウトされているため、なぜ皆さんがそれを指摘するのか理解できません。問題はその場所にはないことは確かです。そうでなければ、エラーメッセージがそれを指摘するはずです。

もしよろしければ、その行を app.yml ファイルから削除することもできますが、結果は以前と同じになります。

私が初めてインストールした当時、コンテナがポート 80 または 443 が使用されていると表示されたため、どこかでランダムなポートを追加すればよいと読んだのかもしれません。しかし、その行は # でコメントアウトされており、無視されるべきものです。

いいえ、私たちは単にあなたの手順を再現し、私たちの設定と比較しようとしているだけです。

このエラーは、Postgres のアップグレード失敗に間違いなく関連しています。

問題を解決するには、メタトピックをご覧ください。

「いいね!」 2

Postgres のアップグレードに関するトピックを確認します。他のエラーが発生した場合は、改めてご連絡いたします。

Postgresを10から12にアップグレードした後でも、以下のコマンドを実行しても問題が解決しません。

sudo ./launcher rebuild app
fatal: not a git repository (or any of the parent directories): .git
Stopping old container
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Already up to date.
I, [2020-07-13T13:34:21.635079 #1]  INFO -- : Loading --stdin
I, [2020-07-13T13:34:21.643465 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-07-13T13:34:21.713536 #1]  INFO -- : Generating locales (this might take a while)...
Generation complete.

I, [2020-07-13T13:34:21.713917 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-07-13T13:34:21.720693 #1]  INFO -- :
I, [2020-07-13T13:34:21.721042 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-07-13T13:34:21.724919 #1]  INFO -- :
I, [2020-07-13T13:34:21.725387 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-07-13T13:34:21.728768 #1]  INFO -- :
I, [2020-07-13T13:34:21.729117 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-07-13T13:34:21.732712 #1]  INFO -- :
I, [2020-07-13T13:34:21.733008 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-07-13T13:34:21.735981 #1]  INFO -- :
I, [2020-07-13T13:34:21.736200 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
2020/07/13 13:34:21 socat[27] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No such file or directory
I, [2020-07-13T13:34:21.751266 #1]  INFO -- :
I, [2020-07-13T13:34:21.752242 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-07-13T13:34:21.757300 #1]  INFO -- :
I, [2020-07-13T13:34:21.757817 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-07-13T13:34:21.761287 #1]  INFO -- :
I, [2020-07-13T13:34:21.761706 #1]  INFO -- : > mkdir -p /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.765114 #1]  INFO -- :
I, [2020-07-13T13:34:21.765725 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.770573 #1]  INFO -- :
I, [2020-07-13T13:34:21.781057 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.791681 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.800244 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.808363 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.809170 #1]  INFO -- : > chown -R root /var/lib/postgresql/10/main
chown: cannot access '/var/lib/postgresql/10/main': No such file or directory
I, [2020-07-13T13:34:21.817357 #1]  INFO -- :


FAILED
--------------------
Pups::ExecError: chown -R root /var/lib/postgresql/10/main failed with return #<Process::Status: pid 42 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cmd"=>["chown -R root /var/lib/postgresql/10/main", "[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/10/bin/initdb -D /shared/postgres_data || exit 0", "chown -R postgres:postgres /shared/postgres_data", "chown -R postgres:postgres /var/run/postgresql"]}
3e7af3d49be0616ae52ee03d6ee0867d25e5db96de40d92c7ec7abeded5d3262
** 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.

何が起きているのか理解できません。もう諦めます… ;/

「fatal: not a git repository (or any of the parent directories): .git」というメッセージの意味は何ですか?

また、以下のエラーも表示されます。

sudo ./discourse-setup
The configuration file containers/app.yml already exists!

. . . reconfiguring . . .


Saving old file as app.yml.2020-07-13-153931.bak
Stopping existing container in 5 seconds or Control-C to cancel.
+ /usr/bin/docker stop -t 10 app
app

Found 4GB of memory and 2 physical CPU cores
setting db_shared_buffers = 1024MB
setting UNICORN_WORKERS = 4
containers/app.yml memory parameters updated.

Hostname for your Discourse? [cp2077.eu]:

Checking your domain name . . .
WARNING: Port 443 of computer does not appear to be accessible using hostname:    cp2077.eu.
WARNING: Connection to http://cp2077.eu (port 80) also fails.

This suggests that cp2077.eu resolves to some IP address that does not reach this
machine where you are installing discourse.

The first thing to do is confirm that cp2077.eu resolves to the IP address of this server.
You usually do this at the same place you purchased the domain.

If you are sure that the IP address resolves correctly, it could be a firewall issue.
A web search for "open ports YOUR CLOUD SERVICE" might help.

This tool is designed only for the most standard installations. If you cannot resolve
the issue above, you will need to edit containers/app.yml yourself and then type

./launcher rebuild app

ウェブサイトはポート443(SSL)を使用して安全に起動・稼働していますが、なぜウェブサイト unreachable と表示されるのか理解できません。他にできることがわかりません。どうか助けてください。

リバースプロキシを使用しているため、discourse-setup は利用できません。また、設定ファイルから Let’s Encrypt のテンプレートを削除する必要があるでしょう。

Postgres の問題については、何が原因か分かりません。

「いいね!」 2

nginx ファイルの proxy に関する行のことですか?

以前のインストール(2 月のもの)の上に Discourse を再インストールしようとしていませんか?そのため、最初の投稿のスクリーンショットにある既存の app.yml が存在し、PostgreSQL を 10 から 12 へアップグレードする必要があるのです(エラーメッセージを見る限り、おそらく行っていないと思われます。ホスト上では行ったかもしれませんが、データコンテナ内では行っていない可能性があります。そのコンテナはもはや存在しないかもしれません。以前のインストールの状態はわかりません)。何かバックアップはありますか?それとも新規インストールを希望しますか?

「いいね!」 1

@pfaffman さんは、リバースプロキシ(nginx)を使用しているため、discourse-setup スクリプトが機能しない可能性があると言っているのだと思います(私はリバースプロキシを使用して Discourse を動かしたことがないので、これが正しいかどうかはわかりません)。app.yml を正しく設定すれば、discourse-setup を実行しなくても問題ないはずです。

これは、PostgreSQL 10 がインストールされていないコンテナ内でこのコードを実行しようとしているようです(おそらくバージョン 12 を使用しているのでしょう)。もしそれが意図したものであり、最初の投稿で定義した templates/postgres.template.yml をテンプレートとして使用しているなら、お使いのマシン(/var/discourse)にある discourse_docker リポジトリが古くなっている可能性があります。

インストールされている Discourse は最近のものですか、それとも古いものですか?リポジトリを更新すればこの問題が解決するかもしれません。

cd /var/discourse
git pull

その後、再構築ステップを実行してください。

また、古いコンテナを使用しないよう、Discourse コンテナを停止・起動するだけでなく、破棄して再作成していることを確認してください(Discourse の再構築では既にこれが行われるはずですが、念のため…)。

それでも動作せず、バックアップがある場合は、@Benjamin_D さんが述べたように、新しいインスタンスに新規インストールすることをお勧めします。

「いいね!」 1

@Benjamin_D

以前インストールしたドメインの上に、別のドメインで Discourse をインストールしようとしています。正確には、同じサーバーに 2 つのドメインを設定したいのです。私の無知をお許しください。app.yml のどの部分で PostgreSQL に関する設定が見つかるのでしょうか?私の app.yml を確認しましたが、それに関連する記述が見当たりません。

古いファイルのバックアップは持っています。前のインストールからいくつかの情報をコピーして、新しいサーバー用の新しい app.yml に追加しました。

@lucasbasquerotto

こちらも私の無知をお許しください。「proxy nginx」と言われるとき、皆さんはこの行を指しているのでしょうか?

location / {
        proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;

以前は PostgreSQL 10 を使用していましたが、昨日 12 にアップグレードしました。

この場合、新しいインスタンスを立ち上げたいと考えています。古いものを完全に削除して、すべてを新規インストールするにはどうすればよいでしょうか?よろしくお願いいたします。

同じサーバー上で2つのDiscourseインスタンスを動かす、つまりマルチサイト構成の話ですね、それはまた別のお話です :smile:
現時点では、まず最初のサイトのバックアップを確実に取り、pg12へのアップグレードを完了させて動作確認をした上で、マルチサイト構成への挑戦を試みるのが最善かと。その方面については私には全くの門外漢ですが :sweat_smile:

「いいね!」 2

ベンジャミン、ありがとう。

最初からやり直したいです。最初のサイトのバックアップはありますが、試行錯誤の段階で、もう必要ありません。きれいな状態から始めたいと思います。

古いコンテナとすべてのデータを削除して、新しい状態で始めるにはどうすればよいでしょうか?

discourse_docker リポジトリをローカル(/var/discourse)で更新しようとしたことはありますか?うまくいかなかったのでしょうか?

リバースプロキシについては、nginx がリクエストの中間にあり、正しいサービスへルーティングしているため(この場合、インターネットに直接公開されている discourse サービスではなく)、nginx がリバースプロキシとして機能しています。インターネットに公開されているポート(80 と 443)は nginx サービスに属しています。

不思議なことに、Discourse のセットアップは 2 月に私のドメインの 1 つで正常に動作していました。Benjamin さんもご存知の通り、以前からそれに関連する投稿もしていました。そのため、これまで誰も nginx を使わずに Discourse を運用したことがないとは驚きです。正直なところ、昨日まで完璧に動作していました。しかし、昨日同じサーバーを使って別のドメインに Discourse をインストールしようとしたところ、問題が発生しました。

discourse_docker で具体的に何を確認すべきでしょうか?そのフォルダの内容は以下の通りです。

discourse_docker$ ls
bin   containers        discourse-setup  launcher  README.md  scripts  templates
cids  discourse-doctor  image            LICENSE   samples    shared

リポジトリを更新するには、git pullを実行してください(ローカルリポジトリ自体は /var/discourse ディレクトリです)。これは上記の投稿のいずれかで述べたとおりです:

その後、rebuild コマンドを実行してください。

nginx を前面に配置している他のユーザーもいますが、Discourse 専用マシンへの標準インストールに比べれば、そのケースは非常に少ないはずです。また、それが discourse-setup を壊すかどうかはわかりません。あなたの結果に基づいて推測しているにすぎません。エラーは DNS とオープンポートの確認時に発生しました(ホストのポート 80 と 443 を使用しているのはあなたの Discourse コンテナではないことを念頭に置いてください)。

はい、Lucas が言っていた discourse_docker フォルダに行き、そのフォルダ内の containers に app.yml ファイルをコピーして、./launcher rebuild app コマンドを実行しました。

エラーも出ずに何かが起こり、おそらく正常に動作していると思います。

まだ油断はしたくないので、新しいアカウントのセットアップを試してみます :smiley: