Après des efforts considérables, je pense que le problème est résolu.
Cependant, je ne suis pas particulièrement « fier » de la solution, mais bon, c’est Google : ils ne parlent ni n’expliquent rien. Voici donc mes conclusions :
-
Tout d’abord, une leçon importante : n’activez pas IPv6 sur DigitalOcean si vous utilisez Discourse, car leur plage IPv6 est bloquée par YouTube.
-
Une fois le problème IPv6 résolu, et en raison de l’augmentation du trafic, quel que soit l’hébergeur (j’en ai changé plusieurs fois, quelle aventure !), ce qui s’est produit ensuite, c’est que YouTube a commencé à bloquer mon installation Discourse par adresse IP, en raison du nombre élevé de vidéos YouTube publiées sur le site et de la manière dont Discourse les charge.
-
Pour vérifier ce blocage, vous devez soit utiliser votre serveur comme proxy vers une machine disposant d’un navigateur, soit effectuer une requête curl et rechercher cette ligne : « Désolé pour l’interruption. Nous recevons un grand volume de requêtes provenant de votre réseau. » (il existe ce sujet à titre de référence).
-
Grâce à l’aide de @riking, @neounix et @Overgrow, j’ai exécuté une série de commandes (que vous pouvez lire ci-dessus) pour tenter d’arrêter, de limiter ou de modifier la fréquence à laquelle nous régénérons les intégrations YouTube. Pour la plupart des sites, cela suffirait, mais nous avons dû faire face à la complication supplémentaire d’une migration après avoir essayé plusieurs hébergeurs, ce qui signifiait que tous les messages précédents devaient être régénérés. En fait, limiter la régénération à une par heure a en quelque sorte résolu le problème au début. Mais je suppose que ma communauté aime vraiment partager des vidéos, car cela n’a pas duré longtemps.
-
Évidemment, il n’y a aucun retour ni aucune aide de la part de YouTube, si ce n’est quelques fils de discussion sur leur forum mentionnant l’erreur, avec tous les commentaires disant « oui, j’ai aussi ce problème », mais aucune solution proposée.
-
Compte tenu des circonstances, et en me souvenant de la logique des publicités télévisées : « Il doit bien y avoir une autre solution ! », j’ai opté pour une approche « Rambo » : j’ai acheté une autre adresse IP, puis ajouté un cron qui change l’adresse IP sortante toutes les heures. Problème résolu.
Il est à prévoir que, si le site continue de croître et que les gens continuent de partager cet amour de YouTube, je pourrais avoir besoin d’acquérir une troisième adresse IP. Mais bon, tant que je n’aurai pas trouvé le bon moyen de mettre en place un « Discourse distribué » sur Kubernetes ou autre, c’est la meilleure solution possible.
Ce n’est pas la solution la plus élégante, je le sais.
Une fois de plus, merci pour toute l’aide (et surtout la patience, car je sais que je suis très débutant avec la combinaison Rails/Sidekiq/RubyConsole, mais j’essaie de m’améliorer en lisant le code de Discourse).
Merci !