サイトがクラッシュしました - 私の選択肢は何ですか

2.5.0.beta4 のインストールがあります。
アップグレード中に問題が発生し、サイトが読み込めなくなりました。
ファイルやデータベースなどはすべてあります。Ubuntu 16 の Docker を使用していました。
この問題を解決するにはどうすればよいですか?
シェルについてはまったく知識がないため、誰かに依頼する必要がありますが、手探りで進めるのではなく、何をすべきかを知る必要があります。
何かお手伝いいただければ幸いです。

詳細を教えていただけますか。コンテナはロードされていますか (docker ps)?原因を示唆するエラーメッセージ/ログはありますか?サードパーティのホストですか、それともセルフホスティングですか?

「いいね!」 2

マイクさん、返信ありがとうございます。以下のような結果になります。

./discourse-docto を実行すると、このエラーが発生します。

+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=2 -e UNICORN_SIDEKIQS=1 -e RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 -e
RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e
RUBY_GC_HEAP_INIT_SLOTS=400000 -e
RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e
DISCOURSE_DB_SOCKET=/var/run/postgresql -e
DISCOURSE_DB_HOST= -e
DISCOURSE_DB_PORT= -e
LETSENCRYPT_DIR=/shared/letsencrypt -e
DISCOURSE_FORCE_HTTPS=true -e
DISCOURSE_HOSTNAME=discuss.domain -e
DISCOURSE_DEVELOPER_EMAILS=info@domain -e
DISCOURSE_SMTP_ADDRESS=mail3.domain -e
DISCOURSE_SMTP_PORT=587 -e
DISCOURSE_SMTP_USER_NAME=xxx@domain -e
DISCOURSE_SMTP_PASSWORD=xxx -e
LETSENCRYPT_ACCOUNT_EMAIL=info@domain -h
Ubuntu-1804-bionic-64-minimal-app -e
DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address 02:8d:5a:f6:a3:11 local_discourse/app /sbin/boot

イメージ 'local_discourse/app' をローカルで見つけられません
docker: daemon からの応答エラー: pull アクセスが拒否されました local_discourse/app は存在しないか、'docker login' が必要かもしれません: 拒否されました: リソースへのアクセスが拒否されました。
'docker run --help' を参照してください。
コンテナの再起動に失敗しました。

/launcher rebuild app を試しても同じエラーが発生します。
docker は最新バージョンです。

また、doctor ログでこのエラーも確認できます。

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & find /var/www/discourse ! -user discourse -exec chown discourse {} + がリターン #<Process::Status: pid 1929 exit 1> で失敗しました
失敗の場所: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec は次のパラメータで失敗しました {"cd"=>"$home", "hook"=>"web", "cmd"=>["gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,\\\"\\\"); print $0 }' Gemfile.lock)", "find $home ! -user discourse -exec chown discourse {} \\+"]}
ブートストラップが終了コード 1 で失敗しました
** ブートストラップに失敗しました ** 上にスクロールして、以前のエラーメッセージを探してください。複数ある可能性があります。
./discourse-doctor は問題を診断するのに役立つかもしれません。
f4d0b782e3d1c3deccb5e3d6c186a08ebbaaea22ed37d19a2ff07b7688c83926

どのようなアップグレードを行っていましたか? app.yml ファイルにタイプミスがないか確認してから、再度フルリビルドを実行することをお勧めします。

Dockerのバージョンが古すぎます。これはUbuntuのバージョンが古すぎることが原因です。
バックアップはありますか?Ubuntu 22で新しいVPSを起動し、復元してください。

「いいね!」 2

VPSのバックアップがなく、最後に動作していた時のスナップショットしかありませんが、リストア後にロードできません。

Docker version 23.0.3, build 3e7cbfd

app.ymlはOKで、https://www.yamllint.comで検証済みです

エラーはランチャーのこの行に関するものです。

cidbootstrap=cids/\"$config\"_bootstrap.cid
local_discourse=local_discourse
image=\"discourse/base:2.0.20230409-0052\"
docker_path=`which docker.io 2\u003e /dev/null || which docker`
git_path=`which git`
local_discourse=local_discourse

この状況でデータを取得したり、バックアップしたりする方法はありますか?

データベースファイルにアクセスできるはずです。本番サーバーでは /var/discourse/shared/standalone/postgres_data にありますが、お使いの環境でも同様の場所にある可能性があります。

続行する前に、システム全体を別のサーバーに完全にバックアップすることをお勧めします。特に discourse ディレクトリの下にあるすべてのディレクトリをバックアップしてください。

現在(十分な)バックアップがない場合は、より新しいバージョンの Ubuntu(したがって Docker)を使用して新しいサーバーを作成し、PostgreSQL ファイルを含む、discourse ツリー下のすべてのディレクトリをそこにコピーします。(Discourse サーバーでこれを行う必要があったことはありませんが、20 年間 PostgreSQL データベースを管理してきた経験から、データベースファイルが破損していなければ、それらを再作成/再構築するのに役立ちます。)

このシステムはしばらく更新されていませんか?もしそうであれば、既存のファイルを discourse ディレクトリの下に新しいサーバーにコピーしようとすると問題が発生する可能性があります。なぜなら、それは実際には正しい方法ではないからです。Discourse のバックアップには、PostgreSQL データベースファイルだけでなく、さらに多くのものが含まれています。(だからこそ、たとえ小さなアップグレードであっても、事前にバックアップを取ろうとしますが、常に実行しているわけではないことは認めます。)

最新の Discourse バックアップは、おそらくこのディレクトリと同様の場所にあるでしょう。
/var/discourse/shared/standalone/backups/default

「いいね!」 3

マイクさん、返信ありがとうございます。大変助かります。
アップグレードが失敗し、ある時点でSSLの自動更新が停止しました。これらの作業をすべて行おうとしているうちに、この状況になってしまいました。
これを試してみます。アプリを再構築しようとしていますが、容量不足に直面しています。なぜかディスコースが15GBも使用しています。
再構築以外に、ディスコースを起動コマンドのように開始する方法はありますか?

重ねて感謝いたします。

おそらく、複数のコンテナイメージが残っているのでしょう。

「docker images」を実行すると、それらが一覧表示されます。例えば、私の本番システムでは、それぞれ約3.5GBのイメージが7つリストアップされており、かなりの容量を占めています。サンドボックスシステムでは、20個以上のイメージが表示されます。それらのイメージの一部を削除して容量を解放するか、別のサーバーにコピーすることもできます。

「docker ps」では実行中のコンテナは表示されないと仮定します。

古いコンテナを起動してみて、サイトが上がるかどうか試しましたか?そうすれば、バックアップを取ることができます。

Launcherはそれに対応できるはずです。Dockerコマンドのフロントエンドとして機能する部分が大きいですが、Discourseを起動するために必要な他のタスクも実行する可能性があります。

マイクさん、おかしいことに、コンテナは1つしかありません。ログなどをクリアしてスペースを確保しましたが、うまくいきませんでした。見つけられない別の問題があります。手動でファイルをコピーしたり、データベースを後続のバージョンに移行したりして、起動できるかどうか、あなたの他の指示に従ってみます。
docker run を実行すると、次のエラーが表示されます。

docker run discourse
イメージ 'discourse:latest' をローカルで見つけられませんでした
docker: daemon からのエラー応答: discourse のプルアクセスが拒否されました。リポジトリが存在しないか、'docker login' が必要になる場合があります: 要求されたリソースへのアクセスが拒否されました。

ランチャーを試したらどうなりますか?

./launcher start app
以下が表示されます。

.....truncated
イメージ 'local_discourse/app:latest' がローカルで見つかりません
/usr/bin/docker: エラー応答 from daemon:
local_discourse/app のアクセス拒否、
リポジトリが存在しないか、または 'docker login' が必要です: アクセス拒否:
リソースへのアクセスが拒否されました。

docker images から何を取得できますか?

一つだけです。
discourse/base 2.0.20230409-0052 08afe7103ce8

古いイメージで遊ぶことで、おおよそエラーメッセージを再現できますが、今のところ、そのイメージを読み込ませる方法を見つけられていません。

現時点では、他に提案できることはあまりありません。

マイクさん、先ほどの解決策はいくらか解決しました。ファイルを新しいVPSにすべてコピーし、いくつかの変更を加えた後、機能しました。
皆さん、ご協力ありがとうございました。

「いいね!」 1

修正が見つかってよかったですね。お役に立てて嬉しいです。定期的にバックアップを取るようにしてください。 :slight_smile:

「いいね!」 1

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