ダウンタイムなしでDiscourseをDigitalOceanのドロップレット間で移行する

新しい DigitalOcean ドロップレットへの移行を試みており、マーケットプレイスのイメージを使用しました。しかし、セットアップスクリプトを実行すると、ドメイン名がまだ本番環境の現在のインスタンスを指しているため、早期に失敗してしまいます。

この新しいインストールを起動して、バックアップを復元し、その後 DNS レコードを更新できるようにする必要があります。

エラーメッセージは以下の通りです:

ドメイン名を確認しています...
警告: ホスト名 x を使用して、コンピューターのポート 443 にアクセスできないようです。
警告: x への接続(ポート 80)も失敗しました。

これは、x が、Discourse をインストールしているこのマシンに到達しない何らかの IP アドレスに解決されていることを示唆しています。

最初に行うべきことは、x がこのサーバーの IP アドレスに解決されていることを確認することです。通常、これはドメインを購入した同じ場所で行います。

IP アドレスが正しく解決されていると確信している場合、ファイアウォールの問題である可能性があります。「OPEN PORTS YOUR CLOUD SERVICE」と検索すると役立つかもしれません。

実際には、ドメイン名はポート 80 と 443 で応答しているため、このエラーメッセージ自体も誤っているようです。

Matt さん、こんにちは。

Discourse チームは DO マーケットプレイスのイメージを管理していないため、その具体的な問題の解決については、残念ながら限られたお手伝しかできないかもしれません。

でも、これって管理できますよね?

マニュアルインストールの手順にもこのステップが含まれています。

私が初めてこれをする人だとは思えません。皆さんはどうやっているのでしょうか?

はい、その管理は行っています。コードは確認していませんが、チェックはマーケットプレイスの画像から行われると想定していました。

./discourse-setup は、新しい Discourse サイトを立ち上げる際に手動でテキストファイルを編集する手間を省くための、簡易的なセットアップ方法として設計されています。しかし、あなたのケースは、セットアップスクリプトが対応する「典型的な」ユースケースではありません。

そのため、最も確実なのは、現在のサーバーから containers/app.yml ファイルを新しいサーバーにコピーすることです。あるいは、75 行目と 76 行目に示されているように、ご自身でファイルを直接編集することも可能です。

デフォルトの app.yml はどこにありますか?クリーンなデフォルトインストールから始めたいと考えています。

また、セットアップスクリプトなしでサーバーを起動して動作させるにはどうすればよいですか?セットアップスクリプトを実行できないため、IP アドレスへのアクセスは依然として応答しません。

デフォルトは samples/standalone.yml にあります。GitHub でも確認可能

公式インストールガイドに従っている場合、「Discourse のインストール」の命令を実行した後、以下を行う必要があります。

サンプルからデフォルトの YAML ファイルをコンテナにコピーします:

cp samples/standalone.yml containers/app.yml

ファイルを直接編集します:

nano containers/app.yml

Discourse をブートストラップして起動します:

./launcher rebuild app

ありがとうございます、少し前進できました。

ただし、一時管理者アカウントを有効化できないため、バックアップをインポートできません。

(6) スクリプト ‘\u003cURL\u003e’ の読み込みが拒否されました。これは、以下のコンテンツセキュリティポリシー(CSP)ディレクティブに違反しているためです: "script-src \u003cURL\u003e \u003cURL\u003e \u003cURL\u003e \u003cURL\u003e \u003cURL\u003e \u003cURL\u003e \u003cURL\u003e \u003cURL\u003e \u003cURL\u003e \u003cURL\u003e"。‘script-src-elem’ が明示的に設定されていないため、フォールバックとして ‘script-src’ が使用されています。

バックアップからの直接復元方法、またはそれまで CSP を無効にする方法はありますか?

サーバーに SSH で接続し、以下を実行してください:

cd /var/discourse
sudo ./launcher enter app
rails c
SiteSetting.content_security_policy = false
exit
exit

ただし、まず CLI からのバックアップ復元を試すことをお勧めします。これにより、現在の障壁(CSP)ではなく、実際に抱えている問題(バックアップの復元)が解決されます。

ヒントをありがとうございます。

リストアを実行すると、以下のエラーが発生します。

ERROR:  could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
DETAIL:  Key (path, incoming_domain_id)=(/s/free+proxy+hideip.me, 1009) is duplicated.
EXCEPTION: psql failed: DETAIL:  Key (path, incoming_domain_id)=(/s/free+proxy+hideip.me, 1009) is duplicated.
/var/www/discourse/lib/backup_restore/database_restorer.rb:87:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:51:in `run'
script/discourse:143:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
script/discourse:284:in `<top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli.rb:497:in `exec'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/exe/bundle:49:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/exe/bundle:37:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
ロールバックを試みています...
ロールバック中...
不要なファイルを整理中...
discourse_functions スキーマからの関数を削除中...
/tmp '/var/www/discourse/tmp/restores/default/2020-12-29-214249' ディレクトリを削除中...
sidekiq の一時停止を解除中...
リストアを完了としてマーク中...
リストアの終了を 'system' に通知中...
完了!
[FAILED]
リストアが完了しました。

インデックスが破損しているようです。既存のインスタンスでアップグレードを実行しましたか?それにより解決する可能性があります。

古いインスタンスから生データベース(および Let’s Encrypt)ファイルをコピーする方法についてのトピックがどこかにあります。それが私が取るであろう対応です。

「rub run」とは何ですか?

既存のインスタンスでのアップグレードは(このエラーとは異なる)エラーが繰り返し発生するため、新しいインスタンスに移行しています。

そのリンクをお持ちですか?

rsync と cron を使用したバックアップの転送かもしれません