Обновление / пересборка не удаются из-за прекращения поддержки MaxMind DB

Ребята,

Надеюсь, кто-то сможет помочь. У меня уже больше 12 месяцев не возникало проблем с обновлением моего форума, который работает в контейнере Docker на EC2.

Я пробовал:

  • очистку launcher, но проблем с местом на диске нет
  • последнюю команду git pull
  • многократную пересборку приложения
  • даже пробовал выполнить discourse-setup и собирался попробовать восстановление базы данных :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.

Очень надеюсь, что кто-то сможет пролить свет на эту ситуацию.

Спасибо всем.

На случай, если кто-то захочет продолжать использовать последние файлы, опубликованные под старой лицензией, я сохранил все их в archive.org.

Все файлы созданы компанией MaxMind и распространяются под Международной лицензией Creative Commons Attribution-ShareAlike 4.0.

URL archive.org MD5-хэш Заголовок Last-Modified
GeoLite2-City.tar.gz 7ba2c58b4e0eac6c08c6399aebdae26c Вт, 24 дек 2019 17:46:00 GMT
GeoLite2-Country.tar.gz dc6224c648350d90f344a0c5c3ca5474 Вт, 24 дек 2019 17:40:42 GMT
GeoLite2-ASN.tar.gz f3c9c5775fd226db6e8098675ff65861 Вт, 24 дек 2019 14:16:58 GMT
GeoLite2-City-CSV.zip 89e5bf01a970b5668d74cf29a242d546 Вт, 24 дек 2019 17:45:52 GMT
GeoLite2-Country-CSV.zip f50b518341de54fe48c5e34f13e24e99 Вт, 24 дек 2019 17:40:41 GMT
GeoLite2-ASN-CSV.zip 463ccd73c104c52547fa50a84fc2f86e Вт, 24 дек 2019 14:16:58 GMT

Архив страницы с информацией (Скриншот)

Теперь мы поддерживаем официально одобренный способ получения баз данных согласно:

Если вы хотите получать регулярные обновления от MaxMind, вам необходимо перейти на GeoLite sign up | MaxMind, зарегистрировать учётную запись и сгенерировать лицензионный ключ.

Затем вам нужно будет изменить конфигурацию вашего контейнера, добавив ключ в секцию env::

env:
   DISCOURSE_MAXMIND_LICENSE_KEY: ...ключ здесь...

Это исправление гарантирует, что больше не будет «бомбы замедленного действия». Если у нас нет лицензионного ключа, мы никогда не будем пытаться загружать файлы.

Мы обсуждаем с MaxMind возможность включения обновлённых баз данных в наши новые базовые образы. В зависимости от исхода для самохостеров есть два варианта:

  1. Отсутствие разрешения IP-адресов на странице профиля пользователя и в панели администратора до добавления лицензии.

  2. Устаревшее разрешение IP-адресов в течение N дней с момента получения базового образа (то есть после выполнения команды ./launcher rebuild app).

Скорее всего, для самохостеров будет реализован вариант (1).

Мы также рассматриваем другие альтернативы, но наши возможности здесь довольно ограничены.

Я категорически против добавления в ядро функциональности для поиска IP-адресов через веб-сервис, так как это раскрывает информацию третьей стороне. Существует только два основных варианта, и оба требуют регистрации.

@sam У меня небольшая просьба о новой функции: можно ли добавить в панель администратора настройку для ввода ключа лицензии MaxMind?

В ближайшем будущем это маловероятно, так как это глобальная настройка; для отдельного сайта в рамках Multisite это не имеет смысла.

У кого-то еще возникает эта ошибка при попытке зарегистрироваться в аккаунте MaxMind?

Могу подтвердить, что мы смогли зарегистрировать аккаунт без проблем. По вопросам, связанным с аккаунтом, вам необходимо обратиться в службу поддержки MaxMind; мы не можем помочь с этим здесь.

Я пытаюсь обновиться с версии 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 я пробовал устанавливать значения 30, 100 и 0 для флага env:

DISCOURSE_REFRESH_MAXMIND_DB_DURING_PRECOMPILE_DAYS: 0

Но это, похоже, не даёт никакого эффекта (интересно, правильно ли этот параметр распознаётся).

Что ещё можно попробовать?

Спасибо всем, кто работал над быстрым исправлением в последние несколько недель. Пришлось проделать то же самое с Matomo, что было гораздо более болезненно (вручную).

Это подводит меня к моему вопросу: Где именно используются данные MaxMind? Только в случаях, когда администраторы просматривают IP-адреса пользователей? Или есть что-то ещё, о чём я не подумал?

Очевидно, что у меня уже есть аккаунт MM, но я задаюсь вопросом, стоит ли прилагать усилия для этого с какой-либо срочностью.

Она выполняет географический поиск по IP-адресам. Я недавно выполнил множество установок и обновлений без настройки API-ключа, и пересборки работали без проблем. (текущая версия — beta 10)

Кроме того, получить ключ для загрузки базы данных несложно.

Я надеюсь, что на следующей неделе обновлю утилиту discourse-setup, чтобы добавить поддержку ключа.

Верно, они используются администраторами для определения IP-адресов пользователей. Также для списка «недавно использованные устройства» в настройках пользователя и для оповещений администраторов при обнаружении входа в аккаунт с нового местоположения.

Извините за вторжение, но я хотел спросить, планируется ли сохранить возможность отключения поиска по IP. Мне кажется, что принуждение администраторов к подписке на сторонний сервис — не лучшая идея. У меня уже есть лицензионный ключ для других целей, поэтому я говорю в общем смысле.

Если вы не введёте лицензионный ключ, он будет отключён. Никаких принудительных требований для администраторов по его настройке нет.

Также, на случай возможной путаницы, Discourse никогда не передаёт IP-адреса третьим сторонам. Discourse загружает полную базу данных геолокации IP-адресов от MaxMind и затем выполняет поиск внутренними средствами.

Отлично, спасибо за уточнение!

Пересмотр этого… это было перенесено обратно в стабильную версию.