フォーラムが使用不能になりました

こんにちは。Min.IO サーバーへの S3 バックアップの有効化を試みています。app.yml をドキュメントを反映していると思われる内容に変更して再構築すると、完了時にブラウザには画面中央に 4 つの色の付いたドットしか表示されません。コンソールを確認すると、以下のエラーが表示されます。

Uncaught ReferenceError: I18n is not defined
    at admin?v=103a67b2358b…86c5a58d96d4e91:1:1
wizar d?v=ab2295f1774…85b733472935c34a0:1
Uncaught ReferenceError: I18n is not defined
    at wizard?v=ab2295f1774…b733472935c34a0:1:1

app.yml の変更点は以下の通りです。

  DISCOURSE_BACKUP_LOCATION: 's3'
  DISCOURSE_USE_S3: 'true'
  DISCOURSE_S3_REGION: 'off-cloud-backup'
  DISCOURSE_S3_ENDPOINT: 'http://borg....'
  DISCOURSE_S3_ACCESS_KEY_ID: '(my uid here)'
  DISCOURSE_S3_SECRET_ACCESS_KEY: '(my key here)'
  DISCOURSE_S3_CDN_URL: 'http://borg....'
  DISCOURSE_S3_BUCKET: 'assets'
  DISCOURSE_S3_BACKUP_BUCKET: 'discourse-data'
  DISCOURSE_S3_INSTALL_CORS_RULE: 'false'

Min サーバーでは、リージョンを設定し、次に ‘assets’ という名前のパブリックバケット、そして ‘discourse-data’ という名前のプライベートバケット、そして当然ながらそれに対応する認証情報があります。念のため、一部の例で引用符が使われていないため、変数の周りの引用符を削除して試しましたが、変化はありませんでした。

これらの設定を変更して再起動しても、反映されないようです。有効にするには再構築が必要で、テストサイクルが非常に面倒になります。これらのフィールドがすべて管理設定で利用可能であれば、もう少し簡単になるでしょう。過去にはそうだったようですし、少なくとも一部の人のスクリーンショットには表示されています(?)。

app.yml のすべての _S3 エントリをコメントアウトして再構築すると、正常に動作します。(バックアップは構成されていません)(ENDPOINT と CDN の URL はローカルで正しい IP に解決されます)。

サブスクリプションを含む他のすべての設定は比較的簡単に完了しましたが、これで行き詰まっています。私が間違っていることについて、何かアイデアはありますか?

S3 のバックアップのみをご希望ですか?もしそうであれば、キーとバックアップバケットのみが必要です。

S3 のすべての資産に対して設定されていますが、アセットを事前コンパイルして S3 にプッシュするための rake タスクがある、指示の上部にある部分を省略した可能性があります。

承知いたしました。次に2つのことを試してみます。

  • ACCESS、SECRET、BACKUP_BUCKET(エンドポイントも含むと仮定します)で再構築します。
  • rakeタスクを追加して再構築してみます。

当初はデータのみを求めていたというのはその通りですが、何かが機能し始めたら、おそらくアセットに進むことになるでしょう。

とはいえ、ドキュメントの(非常に貧弱な)解釈により、サイトが事実上機能停止しているように見えることは、初心者にとっては問題となる可能性があります。コンソールがI18nを問題として報告している理由はわかりませんが、コードのマイナーな変更、例えば次のようなものかもしれません。

if (I18n && I18n.xxx) 

ではなく、

if (I18n.xxx)

とすることで、初心者がサイトを壊してしまうのを防ぐことができるかもしれません。私がトロールしてPRを作成しようとすべきでしょうか、それともより専門知識のある人が確認すべきことでしょうか?喜んで試しますが、役に立たない場合は時間を無駄にしたくないので…?

Mmm、OK、少し進みました。設定を簡略化するとページが表示されるようになりましたが、サーバーから「 bad request 」が返ってきます。Discourse マシンから Min.io の「 mc 」ツールを使用して S3 ストレージをテストしたところ、問題なく動作し、バケットをリスト表示できました。しかし、ログには以下のようなエラーが表示されます。

Failed to list backups from S3: Aws::S3::Errors::BadRequest

および

/var/www/discourse/lib/backup_restore/s3_backup_store.rb:140:in `rescue in unsorted_files' 
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:131:in `unsorted_files' 
/var/www/discourse/lib/backup_restore/backup_store.rb:23:in `files' 

タイプミスがないことを確認するために、app.yml の設定を「 mc 」の設定にコピー&ペーストしたので、しばらくの間、途方に暮れています。明日、もう一度試してみます…

バケットの内容を一覧表示しようとしています。

アセットに関連するレークタスクは必要ありません。

「バケットの内容を一覧表示しようとしています。」
「アセットに関連する rake タスクは必要ありません。」

わかりました、ご協力ありがとうございます。それに気づいていましたが、あまり役に立っていません。Min.io と SeaweedFS を試しましたが、どちらもローカルで設定し、Discourse マシンからコマンドラインツールを使用して S3 にファイルを書き込めるようになりました。しかし、どちらのオプションも Discourse 内では機能しません。費やした時間をレビューすると、バックアップがオンラインで S3 にあれば、S3 への直接バックアップのオプションが素晴らしいことは理解できます。しかし、バックアップが「クラウド外」にあり、オプションを使用するためだけに S3 ストレージをエミュレートする必要がある場合、私にとっては時間の面で少し高価になりすぎます。

ちなみに、CloudFlare S3 が動作するようになったという人がいることに気づきました。これは一部の人にとっては良いかもしれません。CloudFlare は無料ティアに 10G の S3 を追加したようですが、私の場合、バックアップは通常、Borg バックアップサーバー上のクラウド外にあります。

代わりに、Discourse ホストマシンをバックアップ VPN に追加し、ホスト上の /var/discourse/shared/standalone/backups および /var/discourse/shared/standalone/log をカバーする borg および borgmatic をインストールし、ローカルバックアップがスケジュールされてから 30 分後にこれを cron に追加しました。

質問: ローカルバックアップで全てがカバーされるのか、それともアップロードをカバーするためにさらに何か必要か教えていただけますか? (追加の rake タスクは S3 用だけですか?)

私の疑い深い性格から、ライブシステムとバックアップの両方をクラウドプロバイダーに任せることを信頼できません。毎回、心配しすぎているのではないかと思うのですが、サーバーが動作しないという顧客からの連絡を受けて、サーバーールーム内でサーバーが落雷に打たれていたのを見つけた時のことを思い出します。

こちらにあるMin.IO固有の手順に従いましたか? Configure an S3 compatible object storage provider for uploads

これらの環境変数を変更するだけであれば、以下を実行できます。

  ./launcher destroy app;./launcher start app

バックアップだけでなくアセットも配置する場合は、アセットをプッシュするRakeタスクをお見逃しなく。

「いいね!」 1

「MinIO 固有の手順をここで確認しましたか?」

はい、確認しました。間違いを認めたり、すべてを読まなかったり、記憶していなかったりするかもしれませんが、適切なドキュメントを検索することはその一つではありませんでした… :wink:

「./launcher destroy app;./launcher start app」

わかりました、これは将来の参考のために役立ちます。停止/開始を試していましたが、Docker が起動時に環境変数をどのように構築するかについてはあまり慣れていませんでした。

「バックアップだけでなく、アセットをそこに配置する場合は、アセットをそこにプッシュする rake タスクを見逃さないでください。」

はい、それは私が少し混乱していた部分でした。追加します。なぜこれらがデフォルトのバックアップの一部ではないのか疑問に思っていました。スペースの問題はわかっていますが、一般的に人々はすべてのコンテンツのバックアップを望んでいるのではないかと予想していましたか?(そして、ほとんどの人がコンテンツを検証していないように見えるため、すべてを優先する方が安全かもしれませんか?)

テストインスタンスで試してみました (!) .. ドキュメントから2行をコピー&ペーストしました .. 何かがどこかで古いのでしょうか?

I, [2023-09-04T18:39:51.544973 #1]  INFO -- : cd /var/www/discourse/plugins & sudo -E -u discourse bundle exec rake s3:upload_assets
bundler: failed to load command: rake (/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/rake)
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:524:in `materialize': Could not find css_parser-1.16.0, oj-3.16.1, rotp-6.3.0, globalid-1.2.0, google-protobuf-3.24.2-x86_64-linux in locally installed gems (Bundler::GemNotFound)
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:197:in `specs'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:254:in `specs_for'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/runtime.rb:18:in `setup'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler.rb:162:in `setup'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/setup.rb:23:in `block in <top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/ui/shell.rb:159:in `with_level'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/ui/shell.rb:111:in `silence'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/setup.rb:23:in `<top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:56:in `require_relative'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:56:in `kernel_load'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:23:in `run'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:492:in `exec'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:34:in `dispatch'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:28:in `start'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/exe/bundle:45:in `block in <top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/exe/bundle:33:in `<top (required)>'
        from /usr/local/bin/bundle:25:in `load'
        from /usr/local/bin/bundle:25:in `<main>'
I, [2023-09-04T18:39:52.163459 #1]  INFO -- : 
I, [2023-09-04T18:39:52.164462 #1]  INFO -- : Terminating async processes

私のフックは次のようになっています。

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets
          - sudo -E -u discourse git clone https://github.com/discourse/docker_manager.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-whos-online
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-solved.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-reactions.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-subscriptions.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-topic-voting.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-calendar.git
          - sudo -E -u discourse git clone https://github.com/sylque/discourse-home-page.git
          - sudo -E -u discourse git clone https://github.com/sylque/discpage.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-onboarding-banner.git

それらのRakeタスクはそこには配置しません。

アップロードがS3上にある場合、S3マネージャーが機能することを期待しているため、バックアップは必要ありません。S3からアセットをダウンロードしてバックアップに含めるための非表示設定がありますが、それはほとんどの場合行いたくないでしょう。

うーん、以前、誰かが何かを間違ったセクションに入れたと話していたのを覚えていますが、それでも同じことをしてしまいました、ええと(!)

注意深く読み直したところ、まだ問題があるようです。以下のものがあります。

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-whos-online
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-reactions.git
          - git clone https://github.com/discourse/discourse-subscriptions.git
          - git clone https://github.com/discourse/discourse-topic-voting.git
          - git clone https://github.com/discourse/discourse-calendar.git
          - git clone https://github.com/sylque/discourse-home-page.git
          - git clone https://github.com/sylque/discpage.git
          - git clone https://github.com/discourse/discourse-onboarding-banner.git

  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

app.ymlhooks セクションに貼り付けるように指示されています。これは正しいように見えますか、それともまだ間違った場所にいますか?現在発生しているエラーは次のとおりです。

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake s3:upload_assets failed with return #&lt;Process::Status: pid 1845 exit 1&gt;
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "cmd"=>["sudo -E -u discourse bundle exec rake s3:upload_assets", "sudo -E -u discourse bundle exec rake s3:expire_missing_assets"]}
bootstrap failed with exit code 1

ログをさらに詳しく調べていますが、何も見つかりません。残念ながら、Rubyでコーディングしたことがないので、何を見ているのか/探しているのかよくわかりません。何かアイデアはありますか?

注:./discourse-doctorを実行するように指示されましたが、実行したところ、何も変わらないように見えました。