Notre installation Discourse, une installation standard basée sur le dépôt officiel mais utilisant l’intégration SSO comme unique système de connexion, fonctionne depuis plusieurs années et dessert une large base d’utilisateurs, tournant sur un serveur dédié basé sur Ubuntu qui héberge d’autres applications, sans problème majeur, je suis heureux de le dire.
Malheureusement, elle a récemment subi une panne spontanée et ne semble plus fonctionner du tout.
Les premiers rapports indiquaient que le site présentait de nombreuses erreurs 500 apparemment aléatoires et que les notifications n’étaient pas livrées, mais qu’il fonctionnait toujours par ailleurs. Le contexte était que l’installation avait été mise à jour il y a un ou deux mois et qu’aucun changement n’avait été apporté à celle-ci ou à l’environnement du serveur, ce fut donc un développement surprenant.
Nous avons confirmé que des erreurs 500 se produisaient, et avons d’abord essayé de redémarrer le serveur et le conteneur sans succès. Un « apt-get update » a été exécuté pour mettre à jour tous les paquets. Nous avons également essayé de mettre à jour Discourse via le backend, mais bien qu’en se connectant avec le lien administrateur, aucun lien de connexion n’était envoyé par e-mail, et après le redémarrage du conteneur, la page de connexion administrateur générait uniquement une erreur 500.
J’ai également vérifié l’environnement du serveur pour toute anomalie matérielle, logicielle ou autre, et rien ne semblait défectueux.
Ensuite, nous avons tenté une reconstruction complète et une mise à jour « git pull » via la ligne de commande. Cela a échoué lors des migrations de base de données de la mise à niveau avec l’erreur suivante :
I, [2022-08-09T23:15:21.229857 #1] INFO -- : > cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2022-08-09T23:15:23.938876 #1] INFO -- : docker_manager is already at latest compatible version
I, [2022-08-09T23:15:23.939220 #1] INFO -- : > cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2022-08-09 23:15:28.956 UTC [835] discourse@discourse ERROR: duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
2022-08-09 23:15:28.956 UTC [835] discourse@discourse DETAIL: Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
2022-08-09 23:15:28.956 UTC [835] discourse@discourse STATEMENT: UPDATE bookmarks
SET bookmarkable_id = post_id, bookmarkable_type = 'Post'
WHERE NOT bookmarks.for_topic AND bookmarkable_id IS NULL
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
ERROR: duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
DETAIL: Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
S’il y a une incohérence dans la base de données, je n’ai aucune idée de la façon dont elle s’est produite… Je peux fournir le reste de l’historique de la console si nécessaire.
L’exécution de « ./discourse-doctor » s’est terminée sans problème apparent, à l’exception d’un avertissement concernant la configuration du serveur de messagerie - « certificate verify failed (self signed certificate) » - ce qui pourrait expliquer pourquoi les e-mails n’étaient pas envoyés. Auparavant, ils étaient envoyés avec la configuration actuelle, et le serveur de messagerie semble fonctionner par ailleurs sans problème, donc je ne suis pas sûr de cela.
Actuellement, le site est complètement hors service (il renvoie simplement des erreurs 500 après la mise à jour échouée). Nous n’avons vraiment aucune idée de la façon de procéder à ce stade, au-delà de chercher un support externe. Toute aide serait grandement appréciée !