MaxMind DB の EOL に起因するアップグレード/リビルドの失敗

皆さん、

お手伝いできる方がいれば幸いです。12 ヶ月以上、EC2 上の Docker コンテナで動作しているフォーラムのアップグレードに問題はありませんでした。

試したことは以下の通りです:

  • launcher cleanup(ディスク容量に問題なし)
  • 最新の git pull
  • 複数のアプリの再ビルド
  • discourse-setup の実行(DB のリストアを試そうかと思っていましたが、ここで止まりました :frowning:
  • サーバーの再起動
  • apt-get update; apt-get upgrade

ログの末尾は以下の通りです:

Done compressing all JS files : 88.88 secs
rake aborted!
SocketError: Failed to open TCP connection to geolite.maxmind.com:443 (getaddrinfo: No address associated with hostname)
/var/www/discourse/lib/final_destination.rb:411:in `safe_session'
/var/www/discourse/lib/final_destination.rb:362:in `safe_get'
/var/www/discourse/lib/final_destination.rb:131:in `get'
/var/www/discourse/lib/file_helper.rb:51:in `download'
/var/www/discourse/lib/discourse_ip_info.rb:30:in `mmdb_download'
/var/www/discourse/lib/tasks/assets.rake:220:in `block (3 levels) in <top (required)>'
/var/www/discourse/lib/tasks/assets.rake:219:in `each'
/var/www/discourse/lib/tasks/assets.rake:219:in `block (2 levels) in <top (required)>'

Caused by:

SocketError: getaddrinfo: No address associated with hostname

/var/www/discourse/lib/final_destination.rb:411:in `safe_session'
/var/www/discourse/lib/final_destination.rb:362:in `safe_get'
/var/www/discourse/lib/final_destination.rb:131:in `get'
/var/www/discourse/lib/file_helper.rb:51:in `download'
/var/www/discourse/lib/discourse_ip_info.rb:30:in `mmdb_download'
/var/www/discourse/lib/tasks/assets.rake:220:in `block (3 levels) in <top (required)>'
/var/www/discourse/lib/tasks/assets.rake:219:in `each'
/var/www/discourse/lib/tasks/assets.rake:219:in `block (2 levels) in <top (required)>'

Tasks: TOP => assets:precompile

(See full trace by running task with --trace)

I, [2019-12-30T18:56:27.608998 #1] INFO -- : Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps
I, [2019-12-30T18:56:27.633923 #1] INFO -- : Terminating async processes
I, [2019-12-30T18:56:27.637383 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/10/bin/postmaster -D /etc/postgresql/10/main pid: 49
I, [2019-12-30T18:56:27.639770 #1] INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 166
166:signal-handler (1577732187) Received SIGTERM scheduling shutdown...
2019-12-30 18:56:27.639 UTC [49] LOG: received fast shutdown request
2019-12-30 18:56:27.654 UTC [49] LOG: aborting any active transactions
166:M 30 Dec 2019 18:56:27.666 # User requested shutdown...
166:M 30 Dec 2019 18:56:27.694 * Saving the final RDB snapshot before exiting.
2019-12-30 18:56:27.702 UTC [49] LOG: worker process: logical replication launcher (PID 58) exited with exit code 1
2019-12-30 18:56:27.711 UTC [53] LOG: shutting down
2019-12-30 18:56:27.819 UTC [49] LOG: database system is shut down
166:M 30 Dec 2019 18:56:27.885 * DB saved on disk
166:M 30 Dec 2019 18:56:27.886 # Redis is now ready to exit, bye bye...

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile' failed with return #<Process::Status: pid 507 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake assets:precompile'"]}
fcf17d793c27c4e87616420ead222cc3f4a9fc163f239a5542b1c9a092579b30

** 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.

本当に、どなたかこの問題の解決策をご存知ないでしょうか。

よろしくお願いいたします。

「いいね!」 6

古いライセンスの下で公開された最後のファイルを引き続き使用したい方のために、それらをすべて archive.org に保存しました。

すべてのファイルは MaxMind によって作成され、クリエイティブ・コモンズ 表示 - 継承 4.0 国際ライセンスの下で配布されています。

archive.org URL MD5 ハッシュ Last-Modified ヘッダー
GeoLite2-City.tar.gz 7ba2c58b4e0eac6c08c6399aebdae26c Tue, 24 Dec 2019 17:46:00 GMT
GeoLite2-Country.tar.gz dc6224c648350d90f344a0c5c3ca5474 Tue, 24 Dec 2019 17:40:42 GMT
GeoLite2-ASN.tar.gz f3c9c5775fd226db6e8098675ff65861 Tue, 24 Dec 2019 14:16:58 GMT
GeoLite2-City-CSV.zip 89e5bf01a970b5668d74cf29a242d546 Tue, 24 Dec 2019 17:45:52 GMT
GeoLite2-Country-CSV.zip f50b518341de54fe48c5e34f13e24e99 Tue, 24 Dec 2019 17:40:41 GMT
GeoLite2-ASN-CSV.zip 463ccd73c104c52547fa50a84fc2f86e Tue, 24 Dec 2019 14:16:58 GMT

情報ページのアーカイブ (スクリーンショット)

「いいね!」 10

Discourseの公式に推奨されるデータベース取得方法が、以下のコミットに基づいてサポートされるようになりました:

MaxMindの定期的な更新情報を入手したい場合は、GeoLite sign up | MaxMind にアクセスしてアカウントを登録し、ライセンスキーを生成する必要があります。

その後、コンテナの設定を以下のように変更して、env: セクションにライセンスキーを含めてください:

env:
   DISCOURSE_MAXMIND_LICENSE_KEY: ...ここにキーを記述...

この修正により、タイムボム問題は解消されました。ライセンスキーがない場合、ファイルのダウンロードを試みることはありません。

現在、MaxMindと協議中で、更新されたデータベースを新しいベースイメージにバンドルする可能性を検討しています。その結果に応じて、セルフホスト環境では以下の2つの選択肢が考えられます:

  1. ライセンスキーを追加するまで、ユーザープロフィールページおよび管理ページでのIPアドレスの解決が行われない

  2. ベースイメージを取得してから最大N日間(つまり、./launcher rebuild appを実行してから)、古いIPアドレスの解決結果が表示され続ける

セルフホスト環境では、おそらく (1) が採用される見込みです。

他にも代替案を検討していますが、現状では選択肢が限られています。

私は、Webサービスを通じてIPアドレスを照会する機能をコアに追加することに強く反対しています。それは第三者に情報を漏洩させるリスクがあるためです。現在、実用的な代替手段は2つしかなく、どちらも登録が必要です。

「いいね!」 30

@sam 小さな機能リクエストがあります。管理パネルに MaxMind のライセンスキーを追加する設定を追加することはできますか?

「いいね!」 5

近いうちに実現する可能性は低いです。これはグローバル設定であり、マルチサイトではサイトごとに設定するのは意味がありません。

「いいね!」 6

MaxMind アカウントへのサインアップ時に、他の皆様もこのエラーが発生していますか?

アカウント登録に問題なく行えたことを確認いたしました。アカウントに関するサポートは、MaxMind にご連絡いただく必要がございます。こちらではお手伝いすることができません。

「いいね!」 6

2.3.8 から 2.3.9 へのアップグレードを試みていますが、何も機能しません。

私の判断では、関連するエラーは、このトピックで議論されているものです。

rake aborted!
SocketError: Failed to open TCP connection to geolite.maxmind.com:443 (getaddrinfo: Name or service not known)

app.yml では、その env フラグに対して 30、100、0 の値を試しました。

DISCOURSE_REFRESH_MAXMIND_DB_DURING_PRECOMPILE_DAYS: 0

しかし、全く効果がないようです(正しく認識されているのか疑問です)。

他に試せることはありますか?

「いいね!」 1

過去数週間、迅速な修正に取り組んでくださった皆様に感謝いたします。Matomoでも同様の対応が必要となり、こちらははるかに苦痛でした(手動対応でした)。

そこで質問です:MaxMindのデータはどこで使用されていますか?管理者がユーザーのIPアドレスを確認する場合のみでしょうか?他に思い当たらない用途はありますか?

もちろん、すでにMaxMindのアカウントは保有していますが、これを優先的に行う価値があるかどうか迷っています。

「いいね!」 3

IP アドレスの地理的検索を行います。最近、API キーを設定せずに多数のインストールとアップグレードを行いましたが、リビルドは正常に動作しています(現在のバージョンはベータ 10)。

また、データベースをダウンロードするためのキーを取得するのはそれほど難しくありません。

来週には discourse-setup を更新して、キーの設定を可能にしたいと考えています。

「いいね!」 4

その通りです。管理者によるユーザーの IP 照査に使用されます。また、ユーザー設定の「最近使用したデバイス」リストや、異なる場所からの新しいログインが検出された際の管理者アラートにも使用されます。

「いいね!」 3

ご邪魔をして申し訳ありませんが、IP 照会の無効化機能を維持する予定があるかどうかお伺いしたいのです。管理者にサードパーティのサービスへの加入を強制することは、良いアイデアではないように思われます。私自身はすでに他の用途向けのライセンスキーを持っていますが、ここでは一般的な観点から発言しています。

ライセンスキーを入力しない場合、無効化されます。管理者が設定を強制されることはありません。

また、混乱を避けるために補足しますが、Discourse は IP アドレスをサードパーティに送信することはありません。Discourse は MaxMind から IP 位置情報のデータベース全体をダウンロードし、内部で照会を行います。

「いいね!」 9

ありがとうございます、 clarification してくれて!

「いいね!」 4

これを修正しています…これは安定版にバックポートされました。

「いいね!」 12

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