La reconstruction échoue toujours lorsque la limite quotidienne de MAXMIND est atteinte

J’ai vient d’essayer une reconstruction maintenant et elle a échoué à ce stade :

 - dist/javascripts/media-optimization-worker.js : 5.01 Ko (1.74 Ko compressé)
 - dist/javascripts/pikaday/1.8.2/pikaday.js : 42.54 Ko (9.67 Ko compressé)
 - dist/javascripts/squoosh/mozjpeg_enc.js : 39.03 Ko (10.81 Ko compressé)
 - dist/javascripts/squoosh/squoosh_resize.js : 4.53 Ko (1.28 Ko compressé)
Terminé en 355.08s.

I, [2024-07-08T07:59:42.015855 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'SKIP_EMBER_CLI_COMPILE=1 bundle exec rake themes:update assets:precompile'
Purging temp files
Bundling assets
I, [2024-07-08T07:59:57.247206 #1532]  INFO -- : Writing /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
I, [2024-07-08T07:59:57.264957 #1532]  INFO -- : Writing /var/www/discourse/public/assets/service-worker-9764e1cd771b38dbe65a0d1e42d89cb2cb5f72b266ab7316e55d3371cb0ac870.js
I, [2024-07-08T07:59:57.271269 #1532]  INFO -- : Writing /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js
I, [2024-07-08T07:59:57.277082 #1532]  INFO -- : Writing /var/www/discourse/public/assets/scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js
I, [2024-07-08T07:59:59.103776 #1532]  INFO -- : Writing /var/www/discourse/public/assets/locales/ar-dfed7a58f30378bc60d7a2cc8d6347524f68b272ae012f0232604f730e442f91.js
I, [2024-07-08T08:00:00.112555 #1532]  INFO -- : Writing /var/www/discourse/public/assets/locales/be-e12ac4c99df2289f422efd371dd3da766754aecb1189ea763fe003376aca9028.js
rake aborted!
Zlib::BufError : erreur de tampon (Zlib::BufError)
1 « J'aime »

J’ai une question. Utilisez-vous S3 ? Je le soupçonne aussi.

Non :baymax_no: Pas de S3 pour moi.

1 « J'aime »

Je ne sais pas si cela n’arrive que lorsque la limite quotidienne est épuisée. Mais cela arrive tout le temps ici depuis 2-3 mois maintenant. D’autres personnes semblent avoir le même problème :

Peut-être serait-il judicieux de fournir les fichiers Maxmind à partir d’un répertoire local ? Je les télécharge de toute façon pour d’autres usages, donc ils sont déjà là.

Et peut-être serait-il encore mieux de fournir les fichiers Maxmind dans un répertoire partagé dans le conteneur Discourse pour toujours avoir la version à jour ? Comme je l’ai dit, je les télécharge de toute façon et mets à jour les fichiers une fois par jour.

1 « J'aime »

Je pense que le problème n’est pas lié à la limite. Autrement dit, une erreur se produit également lorsqu’une mauvaise clé ou un mauvais ID de compte est saisi. Voici comment nous pouvons résoudre le problème ici : en cas d’erreur, faites en sorte qu’il utilise l’ancienne base de données et continuez à la reconstruire. Bien sûr, il est très important de déterminer la cause principale de ce problème.

J’ai essayé de créer un exemple il y a deux jours et cela a généré une erreur. Cela n’avait rien à voir avec la limite car c’était ma première reconstruction ce jour-là. Ensuite, j’ai créé une nouvelle clé et j’ai essayé et cela a fonctionné. Il y a une situation ici : lorsque vous créez une clé, il faut un certain temps pour qu’elle devienne active. Si vous la recréez immédiatement, cela génère une erreur.

intéressant :slight_smile:

Eh bien, mes clés sont anciennes, je ne les ai jamais changées depuis que je les utilise. Pourquoi cela fonctionne-t-il lorsque vous créez une nouvelle clé ? Vous avez dit qu’il faut un certain temps avant qu’elle ne devienne active. Donc, cela devrait générer une erreur alors ?

C’est une bonne idée. Ou proposer les fichiers à partir d’un répertoire local, comme je l’ai suggéré. Tout est optionnel. Mais cela me dérange vraiment que la reconstruction soit comme une loterie depuis de nombreuses semaines…

1 « J'aime »

Ceci est contraire aux conditions d’utilisation de Maxmind, c’est pourquoi nous devons demander à chacun de fournir les clés API pour télécharger les fichiers individuellement.

Je m’assigne pour examiner le problème lorsque la limite quotidienne est atteinte.

2 « J'aime »

J’ai eu un échec de reconstruction, puis j’ai construit l’image avec les paramètres maxmind désactivés. Et ensuite, à l’intérieur du conteneur, j’ai réactivé les paramètres et exécuté la tâche rake avec succès.

Peut-être est-il possible de reconstruire sans télécharger la base de données, puis de faire télécharger la base de données au démarrage du conteneur ?

De plus, j’ai ajouté une PR qui devrait permettre au bootstrap de réussir (elle a été fusionnée) même si le téléchargement échoue, mais cela provoque toujours l’échec du bootstrap.

2 « J'aime »

Oui, je pense que vous avez raison. Maxmind n’est pas une fonctionnalité critique, il n’est donc pas nécessaire que nous provoquions l’échec du démarrage lorsque nous ne pouvons pas télécharger des éléments.

6 « J'aime »

Je pense que vous n’avez pas compris ce que j’essayais de dire. Laissez-moi réessayer :

J’ai un script qui télécharge les fichiers Maxmind tous les quelques jours. Avec mes propres clés API, bien sûr. Les fichiers sont utilisés sur le serveur pour plusieurs choses comme les statistiques web AWstats, les plugins WordPress, etc.

Donc, j’ai les fichiers sur la machine de toute façon. Pourquoi télécharger les fichiers (encore) lorsque je reconstruis le conteneur Discourse ?

C’est une idée brillante. :slight_smile:

1 « J'aime »

Ouais. Ce serait formidable de pouvoir avoir ceux-ci dans un stockage persistant, surtout s’ils pouvaient être partagés entre les instances. J’ai une poignée de sites Discourse sur la même machine derrière traefik, donc s’ils pouvaient tous partager le même mmdb, cela économiserait la conservation et le téléchargement d’un tas de copies séparées. Même sur une installation standard, ils pourraient persister entre les builds. Peut-être que c’est déjà possible ? Peut-être simplement monter /var/www/discourse/vendor/data quelque part de persistant ?

Aha. Je pense que c’est à cela que sert GlobalSetting.maxmind_backup_path. Donc, je pense que si vous avez un maxminddb pour une raison quelconque, vous pouvez définir DISCOURSE_MAXMIND_BACKUP_PATH sur quelque chose qui est disponible dans le conteneur.

Aussi, pourquoi avons-nous besoin de mmdb pour précompiler les actifs ?

2 « J'aime »

Alors, est-ce que cela fonctionne déjà ? La configuration de DISCOURSE_MAXMIND_BACKUP_PATH dans app.yml (en tant que lien interne depuis l’intérieur du conteneur ou lien absolu sur l’hôte Docker ?) désactivera-t-elle un téléchargement depuis Maxmind lors de la reconstruction ?

C’est dans le code. Je ne l’ai jamais utilisé. Il semble que si vous y incluez un chemin, il le trouvera. Je ne me souviens pas, mais je pense que c’est un chemin vers le répertoire.

D’accord, je pourrais essayer. J’ai plusieurs instances et l’une d’elles est uniquement pour les tests.

Puis-je voir si les fichiers ont été pris localement ou s’ils ont été téléchargés ?

Donc quelque chose comme /var/discourse/maxmind sur l’hôte Docker ?

Désolé. Je ne suis pas tout à fait sûr. Il semble qu’il veuille un répertoire, et vous pouvez le nommer comme vous voulez, donc peut-être ajouteriez-vous un volume dans votre app.yml comme

  - volume:
      host: /data/
      guest: /data

et DISCOURSE_maxmind_backup_path=/data/mmdb (correction de la casse pour la variable d’environnement)

voici le code

Merci encore. J’ai créé /var/discourse/shared/discourse_test/data/mmdb et voici ce que j’ai fait à app.yml :

  ## La clé de compte MaxMind pour la recherche d'adresses IP de géolocalisation
  ## voir https://meta.discourse.org/t/-/137387/23 pour les détails
  DISCOURSE_MAXMIND_ACCOUNT_ID: 123456
  DISCOURSE_MAXMIND_LICENSE_KEY: abcdefg
  DISCOURSE_MAXMIND_BACKUP_PATH: /data/mmdb

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/discourse_test
      guest: /shared
  - volume:
      host: /var/discourse/shared/discourse_test/log/var-log
      guest: /var/log
  - volume:
      host: /var/discourse/shared/discourse_test/data
      guest: /data

J’ai ajouté DISCOURSE_MAXMIND_BACKUP_PATH et un troisième volume.

Le répertoire pour DISCOURSE_MAXMIND_BACKUP_PATH est-il correct ? Le chemin est-il celui à l’intérieur du conteneur ?

Dois-je supprimer DISCOURSE_MAXMIND_ACCOUNT_ID et DISCOURSE_MAXMIND_LICENSE_KEY maintenant ?

Désolé, trop excité et aussi un peu confus. :wink:

D’accord :smiley:

MaxMindDB de sauvegarde détecté (téléchargé : 2024-07-17 23:15:02 +0000) à /data/mmdb
Copie de MaxMindDB de /data/mmdb vers /var/www/discourse/vendor/data
Téléchargement de MaxMindDB ignoré car il a été téléchargé pour la dernière fois le 2024-07-17 23:15:02 +0000

Je pense que c’est ce que je (ou plutôt « nous ») voulions voir. :smiley:

3 « J'aime »

Je pense que vous auriez pu omettre le volume supplémentaire et faire

DISCOURSE_MAXMIND_BACKUP_PATH: /shared/data

Mais si vous avez un autre processus qui maintient cette base de données à jour ailleurs, vous pourriez monter ce répertoire afin de n’avoir qu’une seule copie locale sur votre disque et n’auriez besoin de mettre à jour que cette copie.

2 « J'aime »

Je pense que je vais laisser les choses ainsi. À mes yeux, c’est une configuration plus claire qui pourra encore être comprise dans quelques mois. Elle pourrait également être plus générique et convenir à plus de cas d’utilisation que le mien.

Je copie les trois fichiers mmdb de Maxmind dans ce répertoire lors de leur téléchargement. J’ai juste ajusté le script que j’utilise (au fait, pour le téléchargement, j’utilise geoipupdate, qui est également disponible en tant que paquet pour Debian (et très probablement d’autres distributions Linux)).

Je viens de terminer la reconstruction de quatre conteneurs Discourse différents, tous sans aucune erreur ! Cela n’était pas arrivé depuis des mois ici. C’est super ! :slight_smile:

3 « J'aime »

Ce problème persiste. Je vais expliquer l’incident en détail :
J’ai effectué une mise à jour depuis l’administrateur, elle s’est arrêtée à mi-chemin. J’ai donc lancé une recompilation depuis le panneau ssh. Boum, une erreur s’est produite, un exemple d’erreur est ci-dessous.

Ensuite, j’ai créé une nouvelle clé maxmind et je l’ai recompilée, elle a encore donné une erreur, la même erreur. (Intéressant, peut-être que la clé n’a pas été activée).

Ensuite, j’ai désactivé le paramètre maxmind dans le fichier app.yml. Je l’ai recompilé et la compilation a réussi.

Les modules complémentaires que j’ai utilisés sont montrés dans l’image, autres choses que j’ai utilisées :

  • Cloudflare R2
  • serveur postgresql séparé
  • cloudflare

Je ne parviens plus à déterminer la cause du problème.

1 « J'aime »