Les mises à niveau/reconstructions échouent en raison de la fin de vie de la base de données MaxMind

Salut à tous,

J’espère que quelqu’un pourra m’aider. Je n’ai rencontré aucun problème avec les mises à jour de mon forum, qui tourne dans un conteneur Docker sur EC2, depuis plus de 12 mois.

J’ai essayé :

  • Nettoyage du launcher, mais aucun problème d’espace disque
  • Dernier git pull
  • Plusieurs rebuilds de l’application
  • Même une réinstallation complète de discourse-setup, et j’allais essayer une restauration de la base de données :frowning:
  • Redémarrage du serveur
  • apt-get update ; apt-get upgrade

Voici la fin du journal :

Terminé la compression de tous les fichiers JS : 88,88 secondes
rake aborted!
SocketError: Échec de l'ouverture de la connexion TCP vers geolite.maxmind.com:443 (getaddrinfo: Aucune adresse associée au nom d'hôte)
/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)>'

Causé par :

SocketError: getaddrinfo: Aucune adresse associée au nom d'hôte

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

Tâches : TOP => assets:precompile

(Voir la trace complète en exécutant la tâche avec --trace)

I, [2019-12-30T18:56:27.608998 #1] INFO -- : Téléchargement de MaxMindDB...
Compression de JavaScript et génération des cartes sources
I, [2019-12-30T18:56:27.633923 #1] INFO -- : Arrêt des processus asynchrones
I, [2019-12-30T18:56:27.637383 #1] INFO -- : Envoi de INT à 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 -- : Envoi de TERM à exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 166
166:signal-handler (1577732187) SIGTERM reçu, planification de l'arrêt...
2019-12-30 18:56:27.639 UTC [49] LOG : demande d'arrêt rapide reçue
2019-12-30 18:56:27.654 UTC [49] LOG : annulation de toutes les transactions actives
166:M 30 Dec 2019 18:56:27.666 # Arrêt demandé par l'utilisateur...
166:M 30 Dec 2019 18:56:27.694 * Sauvegarde du dernier snapshot RDB avant la fermeture.
2019-12-30 18:56:27.702 UTC [49] LOG : processus worker : lanceur de réplication logique (PID 58) terminé avec le code de sortie 1
2019-12-30 18:56:27.711 UTC [53] LOG : arrêt en cours
2019-12-30 18:56:27.819 UTC [49] LOG : le système de base de données est arrêté
166:M 30 Dec 2019 18:56:27.885 * Base de données sauvegardée sur le disque
166:M 30 Dec 2019 18:56:27.886 # Redis est maintenant prêt à quitter, au revoir...

ÉCHEC
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile' a échoué avec le code de retour #<Process::Status: pid 507 exit 1>
Emplacement de l'échec : /pups/lib/pups/exec_command.rb:112:in `spawn'
exec a échoué avec les paramètres {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake assets:precompile'"]}
fcf17d793c27c4e87616420ead222cc3f4a9fc163f239a5542b1c9a092579b30

** ÉCHEC DU BOOTSTRAP ** Veuillez faire défiler vers le haut et rechercher les messages d'erreur antérieurs, il peut y en avoir plus d'un.
./discourse-doctor peut aider à diagnostiquer le problème.

J’espère vraiment que quelqu’un pourra éclaircir cette situation.

Merci à tous.

Au cas où quelqu’un souhaiterait continuer à utiliser les derniers fichiers publiés sous l’ancienne licence, je les ai tous sauvegardés sur archive.org.

Tous les fichiers sont créés par MaxMind et distribués sous la licence Creative Commons Attribution-Partage dans les mêmes conditions 4.0 International.

URL archive.org Hash MD5 En-tête Last-Modified
GeoLite2-City.tar.gz 7ba2c58b4e0eac6c08c6399aebdae26c Mar, 24 déc. 2019 17:46:00 GMT
GeoLite2-Country.tar.gz dc6224c648350d90f344a0c5c3ca5474 Mar, 24 déc. 2019 17:40:42 GMT
GeoLite2-ASN.tar.gz f3c9c5775fd226db6e8098675ff65861 Mar, 24 déc. 2019 14:16:58 GMT
GeoLite2-City-CSV.zip 89e5bf01a970b5668d74cf29a242d546 Mar, 24 déc. 2019 17:45:52 GMT
GeoLite2-Country-CSV.zip f50b518341de54fe48c5e34f13e24e99 Mar, 24 déc. 2019 17:40:41 GMT
GeoLite2-ASN-CSV.zip 463ccd73c104c52547fa50a84fc2f86e Mar, 24 déc. 2019 14:16:58 GMT

Archive de la page d’information (Capture d’écran)

Nous prenons désormais en charge la méthode officiellement recommandée pour obtenir les bases de données, comme indiqué ici :

Si vous souhaitez recevoir les mises à jour régulières de MaxMind, vous devrez vous rendre sur GeoLite sign up | MaxMind pour créer un compte et générer une clé de licence.

Ensuite, vous devrez modifier votre conteneur pour l’inclure dans la section env :

env:
   DISCOURSE_MAXMIND_LICENSE_KEY: ...votre clé ici...

Cette correction garantit qu’il n’y a plus de « bombe à retardement ». Si aucune clé de licence n’est présente, nous n’essaierons jamais de télécharger les fichiers.

Nous discutons avec MaxMind de la possibilité d’inclure les bases de données mises à jour dans nos nouvelles images de base. Il existe deux alternatives pour les auto-hébergeurs, selon l’issue de ces discussions :

  1. Aucune résolution d’adresse IP sur la page de profil utilisateur et la page d’administration tant qu’une licence n’est pas ajoutée.

  2. Une résolution d’adresse IP obsolète pendant un maximum de N jours après l’obtention de l’image de base (c’est-à-dire après avoir exécuté ./launcher rebuild app).

Il est très probable que l’option (1) soit retenue pour les auto-hébergeurs.

Nous explorons également d’autres alternatives, mais nos options sont assez limitées.

Je suis fermement opposé à l’ajout dans le cœur du système de fonctionnalités effectuant des recherches d’IP via un service web, car cela expose des informations à un tiers. Il n’existe que deux grandes alternatives réelles, et toutes deux nécessitent une inscription.

@sam J’ai une petite demande de fonctionnalité : serait-il possible d’ajouter un paramètre dans le panneau d’administration pour saisir la clé de licence MaxMind ?

Peu probable dans un avenir proche, il s’agit d’un paramètre global ; le faire par site dans un Multisite n’a pas de sens.

Quelqu’un d’autre rencontre-t-il cette erreur en essayant de créer un compte MaxMind ?

Je peux confirmer que nous avons pu créer un compte sans problème. Vous devrez contacter MaxMind pour obtenir de l’aide concernant les problèmes de compte, car nous ne pouvons pas vous aider sur ce sujet ici.

J’essaie de passer de la version 2.3.8 à la 2.3.9, mais rien ne fonctionne.

L’erreur pertinente, d’après ce que je comprends, est celle abordée dans ce sujet.

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

Dans mon fichier app.yml, j’ai essayé les valeurs 30, 100 et 0 pour ce paramètre env :

DISCOURSE_REFRESH_MAXMIND_DB_DURING_PRECOMPILE_DAYS: 0

Mais cela ne semble jamais faire aucune différence (je me demande s’il est correctement pris en compte).

Que puis-je essayer d’autre ?

Merci à tous ceux qui ont travaillé sur le correctif rapide au cours des dernières semaines. J’ai dû faire la même chose avec Matomo, ce qui était beaucoup plus pénible (manuel).

Cela m’amène à ma question : Où exactement les données MaxMind sont-elles utilisées ? Uniquement dans les cas où les administrateurs consultent les adresses IP des utilisateurs ? Y a-t-il autre chose à laquelle je ne pense pas ?

J’ai déjà un compte MM, bien sûr, mais je me demande s’il vaut la peine de faire l’effort de le faire avec urgence.

Elle effectue des recherches géographiques sur les adresses IP. J’ai réalisé plusieurs installations et mises à jour récemment sans définir de clé API, et les reconstructions fonctionnent parfaitement. (la version actuelle est la bêta 10)

De plus, il n’est pas très difficile d’obtenir une clé pour télécharger la base de données.

J’espère mettre à jour discourse-setup pour permettre l’ajout de la clé la semaine prochaine.

C’est exact, elles sont utilisées pour la recherche d’adresses IP des utilisateurs par les administrateurs. Elles servent également à la liste des « appareils récemment utilisés » dans les préférences de l’utilisateur, et pour les alertes administrateur lorsqu’une nouvelle connexion est détectée à partir d’un autre emplacement pour leur compte.

Désolé de vous déranger, mais je voulais savoir s’il est prévu de conserver la possibilité de désactiver la recherche d’adresse IP. Il me semble que forcer les administrateurs à souscrire à un service tiers n’est pas une bonne idée. Personnellement, j’ai déjà une clé de licence pour d’autres usages, donc je parle ici de manière générale.

Si vous ne saisissez pas de clé de licence, elle sera désactivée. Rien n’oblige les administrateurs à la configurer.

De plus, pour éviter toute confusion, Discourse n’envoie jamais d’adresses IP à un tiers. Discourse télécharge une base de données complète des localisations d’adresses IP depuis MaxMind, puis effectue la recherche en interne.

Super, merci pour les précisions !

Révision de ceci… cela a été rétroporté sur la version stable.