mholt
(Matt)
2020 年 12 月 29 日午後 7:49
1
新しい DigitalOcean ドロップレットへの移行を試みており、マーケットプレイスのイメージを使用しました。しかし、セットアップスクリプトを実行すると、ドメイン名がまだ本番環境の現在のインスタンスを指しているため、早期に失敗してしまいます。
この新しいインストールを起動して、バックアップを復元し、その後 DNS レコードを更新できるようにする必要があります。
エラーメッセージは以下の通りです:
ドメイン名を確認しています...
警告: ホスト名 x を使用して、コンピューターのポート 443 にアクセスできないようです。
警告: x への接続(ポート 80)も失敗しました。
これは、x が、Discourse をインストールしているこのマシンに到達しない何らかの IP アドレスに解決されていることを示唆しています。
最初に行うべきことは、x がこのサーバーの IP アドレスに解決されていることを確認することです。通常、これはドメインを購入した同じ場所で行います。
IP アドレスが正しく解決されていると確信している場合、ファイアウォールの問題である可能性があります。「OPEN PORTS YOUR CLOUD SERVICE」と検索すると役立つかもしれません。
実際には、ドメイン名はポート 80 と 443 で応答しているため、このエラーメッセージ自体も誤っているようです。
jomaxro
(Joshua Rosenfeld)
2020 年 12 月 29 日午後 8:36
2
Matt さん、こんにちは。
Discourse チームは DO マーケットプレイスのイメージを管理していないため、その具体的な問題の解決については、残念ながら限られたお手伝しかできないかもしれません。
mholt
(Matt)
2020 年 12 月 29 日午後 8:41
3
でも、これって管理できますよね?
##
connect_to_port () {
HOST="$1"
PORT="$2"
VERIFY=$(date +%s | sha256sum | base64 | head -c 20)
if ! [ -x "$(command -v nc)" ]; then
echo "In order to check the connection to $HOST:$PORT we need to open a socket using netcat."
echo However netcat is not installed on your system. You can continue without this check
echo or abort the setup, install netcat and try again.
while true; do
read -p "Would you like to continue without this check? [yn] " yn
case $yn in
[Yy]*) return 2 ;;
[Nn]*) exit ;;
*) echo "Please answer y or n." ;;
esac
done
else
echo -e "HTTP/1.1 200 OK\n\n $VERIFY" | nc -w 4 -l -p $PORT >/dev/null 2>&1 &
if curl --proto =http -s $HOST:$PORT --connect-timeout 3 | grep $VERIFY >/dev/null 2>&1; then
return 0
マニュアルインストールの手順にもこのステップが含まれています。
私が初めてこれをする人だとは思えません。皆さんはどうやっているのでしょうか?
jomaxro
(Joshua Rosenfeld)
2020 年 12 月 29 日午後 8:48
4
はい、その管理は行っています。コードは確認していませんが、チェックはマーケットプレイスの画像から行われると想定していました。
./discourse-setup は、新しい Discourse サイトを立ち上げる際に手動でテキストファイルを編集する手間を省くための、簡易的なセットアップ方法として設計されています。しかし、あなたのケースは、セットアップスクリプトが対応する「典型的な」ユースケースではありません。
そのため、最も確実なのは、現在のサーバーから containers/app.yml ファイルを新しいサーバーにコピーすることです。あるいは、75 行目と 76 行目に示されているように、ご自身でファイルを直接編集することも可能です。
mholt
(Matt)
2020 年 12 月 29 日午後 8:53
5
デフォルトの app.yml はどこにありますか?クリーンなデフォルトインストールから始めたいと考えています。
また、セットアップスクリプトなしでサーバーを起動して動作させるにはどうすればよいですか?セットアップスクリプトを実行できないため、IP アドレスへのアクセスは依然として応答しません。
jomaxro
(Joshua Rosenfeld)
2020 年 12 月 29 日午後 9:02
6
デフォルトは samples/standalone.yml にあります。GitHub でも確認可能 。
公式インストールガイドに従っている場合、「Discourse のインストール」の命令を実行した後、以下を行う必要があります。
サンプルからデフォルトの YAML ファイルをコンテナにコピーします:
cp samples/standalone.yml containers/app.yml
ファイルを直接編集します:
nano containers/app.yml
Discourse をブートストラップして起動します:
./launcher rebuild app
mholt
(Matt)
2020 年 12 月 29 日午後 9:24
7
ありがとうございます、少し前進できました。
ただし、一時管理者アカウントを有効化できないため、バックアップをインポートできません。
(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 を無効にする方法はありますか?
jomaxro
(Joshua Rosenfeld)
2020 年 12 月 29 日午後 9:33
8
mholt:
バックアップから直接復元する方法はありますか?
このガイドでは、Discourse の Web UI を使用せずに、コマンドラインから Discourse のバックアップを復元する方法を説明します。
必要なユーザーレベル: 管理者
コンソールアクセスが必要です
ここでは、Discourse の Web UI を起動することなく、コマンドラインから Discourse のバックアップを復元する方法を説明します。これは、サーバーを移行する際に便利です。
前提条件
始める前に、次の手順を完了していることを確認してください。
ソースの Discourse インスタンスから最新のバックアップファイルをダウンロードします。
./discourse-setup を実行するか、既存の app.yml をコピーして、宛先の Discourse インスタンスをブートストラップします。
宛先の Discourse インスタンスが最新バージョンであることを確認します。必要に応じて更新します。
バックアップの転送
宛先サーバーに SSH 接続するか、そこに…
mholt:
それまで CSP を無効化しますか?
サーバーに SSH で接続し、以下を実行してください:
cd /var/discourse
sudo ./launcher enter app
rails c
SiteSetting.content_security_policy = false
exit
exit
ただし、まず CLI からのバックアップ復元を試すことをお勧めします。これにより、現在の障壁(CSP)ではなく、実際に抱えている問題(バックアップの復元)が解決されます。
mholt
(Matt)
2020 年 12 月 29 日午後 9:45
9
ヒントをありがとうございます。
リストアを実行すると、以下のエラーが発生します。
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]
リストアが完了しました。
pfaffman
(Jay Pfaffman)
2020 年 12 月 30 日午前 12:25
10
インデックスが破損しているようです。既存のインスタンスでアップグレードを実行しましたか?それにより解決する可能性があります。
古いインスタンスから生データベース(および Let’s Encrypt)ファイルをコピーする方法についてのトピックがどこかにあります。それが私が取るであろう対応です。
mholt
(Matt)
2020 年 12 月 30 日午前 12:46
11
「rub run」とは何ですか?
既存のインスタンスでのアップグレードは(このエラーとは異なる)エラーが繰り返し発生するため、新しいインスタンスに移行しています。
pfaffman
(Jay Pfaffman)
2020 年 12 月 30 日午前 12:50
13