Atualizações/Reconstruções falham devido ao fim do suporte do MaxMind DB

Pessoal,

Espero que alguém possa ajudar aqui. Não tive problemas com atualizações do meu fórum, que está rodando em um container Docker na EC2, há mais de 12 meses.

Tentei:

  • Limpeza do launcher, mas não há problemas com espaço em disco
  • Último git pull
  • Várias recompilações do aplicativo
  • Até tentei um discourse-setup e estava pensando em fazer um restore do banco de dados :frowning:
  • Reinício do servidor
  • apt-get update; apt-get upgrade

Aqui está o final do log:

Concluída a compressão de todos os arquivos JS: 88,88 segundos
rake aborted!
SocketError: Falha ao abrir conexão TCP para geolite.maxmind.com:443 (getaddrinfo: Nenhum endereço associado ao nome de host)
/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)>'

Causado por:

SocketError: getaddrinfo: Nenhum endereço associado ao nome de host

/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)>'

Tarefas: TOP => assets:precompile

(Veja o rastreamento completo executando a tarefa com --trace)

I, [2019-12-30T18:56:27.608998 #1] INFO -- : Baixando MaxMindDB...
Comprimindo Javascript e Gerando Source Maps
I, [2019-12-30T18:56:27.633923 #1] INFO -- : Encerrando processos assíncronos
I, [2019-12-30T18:56:27.637383 #1] INFO -- : Enviando INT para 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 -- : Enviando TERM para exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 166
166:signal-handler (1577732187) Recebeu SIGTERM agendando desligamento...
2019-12-30 18:56:27.639 UTC [49] LOG: recebida solicitação de desligamento rápido
2019-12-30 18:56:27.654 UTC [49] LOG: abortando quaisquer transações ativas
166:M 30 Dec 2019 18:56:27.666 # Usuário solicitou desligamento...
166:M 30 Dec 2019 18:56:27.694 * Salvando o snapshot final do RDB antes de sair.
2019-12-30 18:56:27.702 UTC [49] LOG: processo worker: lançador de replicação lógica (PID 58) saiu com código de saída 1
2019-12-30 18:56:27.711 UTC [53] LOG: desligando
2019-12-30 18:56:27.819 UTC [49] LOG: sistema de banco de dados desligado
166:M 30 Dec 2019 18:56:27.885 * Banco de dados salvo no disco
166:M 30 Dec 2019 18:56:27.886 # Redis agora está pronto para sair, tchau tchau...

FALHA
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile' falhou com retorno #<Process::Status: pid 507 exit 1>
Localização da falha: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec falhou com os parâmetros {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake assets:precompile'"]}
fcf17d793c27c4e87616420ead222cc3f4a9fc163f239a5542b1c9a092579b30

** FALHA NO BOOTSTRAP ** por favor, role para cima e procure por mensagens de erro anteriores, pode haver mais de uma.
./discourse-doctor pode ajudar a diagnosticar o problema.

Realmente espero que alguém possa esclarecer isso.

Obrigado a todos.

Caso alguém queira continuar usando os últimos arquivos publicados sob a antiga licença, salvei todos eles no archive.org.

Todos os arquivos foram criados pela MaxMind e distribuídos sob a Licença Internacional Creative Commons Atribuição-CompartilhaIgual 4.0.

URL do archive.org Hash MD5 Cabeçalho Last-Modified
GeoLite2-City.tar.gz 7ba2c58b4e0eac6c08c6399aebdae26c Ter, 24 dez 2019 17:46:00 GMT
GeoLite2-Country.tar.gz dc6224c648350d90f344a0c5c3ca5474 Ter, 24 dez 2019 17:40:42 GMT
GeoLite2-ASN.tar.gz f3c9c5775fd226db6e8098675ff65861 Ter, 24 dez 2019 14:16:58 GMT
GeoLite2-City-CSV.zip 89e5bf01a970b5668d74cf29a242d546 Ter, 24 dez 2019 17:45:52 GMT
GeoLite2-Country-CSV.zip f50b518341de54fe48c5e34f13e24e99 Ter, 24 dez 2019 17:40:41 GMT
GeoLite2-ASN-CSV.zip 463ccd73c104c52547fa50a84fc2f86e Ter, 24 dez 2019 14:16:58 GMT

Arquivo da página de informações (Captura de tela)

Agora, damos suporte à maneira oficialmente recomendada de obter bancos de dados, conforme:

Se você deseja receber atualizações regulares do MaxMind, precisará acessar GeoLite sign up | MaxMind para registrar uma conta e gerar uma chave de licença.

Em seguida, você deverá modificar seu container para incluí-la na seção env::

env:
   DISCOURSE_MAXMIND_LICENSE_KEY: ...sua chave aqui...

A correção garante que não haja mais nenhuma “bomba-relógio”. Se não houver uma chave de licença, nunca tentaremos baixar os arquivos.

Estamos discutindo com o MaxMind a possibilidade de incluir os bancos de dados atualizados em nossas novas imagens base. Para quem faz hospedagem própria, há duas alternativas, dependendo do resultado:

  1. Sem resolução de IP na página de perfil do usuário e na página de administração até que uma licença seja adicionada.

  2. Resolução de IP desatualizada por até N dias desde que você obteve a imagem base (ou seja, executou ./launcher rebuild app).

É muito provável que a opção (1) seja o resultado para quem faz hospedagem própria.

Também estamos investigando outras alternativas, mas nossas opções são bastante limitadas.

Sou bastante contra adicionar funcionalidades ao núcleo que realizam consultas de IP por meio de um serviço web, pois isso expõe informações a terceiros. Existem apenas duas grandes alternativas reais no mercado, e ambas exigem registro.

@sam Tenho um pequeno pedido de recurso: seria possível adicionar uma configuração no painel de administração para inserir a chave de licença do MaxMind?

Improvável no futuro próximo, esta é uma configuração global; por site em uma Multissite não faz sentido.

Alguém mais está recebendo esse erro ao tentar se cadastrar na conta do MaxMind?

Posso confirmar que conseguimos criar uma conta sem problemas. Você precisará entrar em contato com a MaxMind para suporte com questões de conta; não há nada que possamos ajudar aqui.

Estou tentando fazer a atualização da versão 2.3.8 para a 2.3.9, mas nada funciona.

O erro relevante, pelo que pude perceber, é o discutido neste tópico.

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

No meu app.yml, tentei os valores 30, 100 e 0 para essa flag env:

DISCOURSE_REFRESH_MAXMIND_DB_DURING_PRECOMPILE_DAYS: 0

Mas isso nunca parece fazer diferença (fico me perguntando se está sendo reconhecido corretamente).

O que mais posso tentar?

Obrigado a todos que trabalharam na correção rápida nas últimas semanas. Tive que fazer o mesmo com o Matomo, o que foi muito mais doloroso (manual).

Isso me leva à minha pergunta: Onde exatamente os dados do MaxMind são utilizados? Apenas nos casos de administradores visualizando os endereços IP dos usuários? Alguma outra coisa que não estou lembrando?

Obviamente já tenho a conta do MM, mas estou me perguntando se vale a pena o esforço fazer isso com urgência.

Ele realiza consultas geográficas de endereços IP. Recentemente, realizei várias instalações e atualizações sem configurar uma chave de API, e as reconstruções funcionaram perfeitamente (a versão atual é a beta 10).

Além disso, não é difícil obter uma chave para baixar o banco de dados.

Espero atualizar o discourse-setup para permitir a configuração da chave na próxima semana.

Correto, é utilizado para consulta de IP de usuários pelos administradores. Também para a lista de “dispositivos usados recentemente” nas preferências do usuário e para alertas de administrador quando um novo login é detectado na conta a partir de um local diferente.

Desculpe a intrusão, mas gostaria de perguntar se está previsto manter a possibilidade de desativar a consulta de IP. Parece-me que obrigar os administradores a assinar um serviço de terceiros não é uma boa ideia. Eu mesmo já possuo uma chave de licença para outros usos, então estou falando de forma geral aqui.

Se você não inserir uma chave de licença, ela será desativada. Nada obriga os administradores a configurá-la.

Além disso, caso haja qualquer confusão, o Discourse nunca envia endereços IP para terceiros. O Discourse baixa um banco de dados completo de localizações de IP da MaxMind e realiza a consulta internamente.

Ótimo, obrigado pela esclarecimento!

Revisando isso… isso foi backportado para a versão estável.