Problèmes de connexion à Patreon, forçage HTTPS et problèmes S3 CDN (trois)

Je devrai peut-être diviser cela en trois publications distinctes, mais elles sont liées, je vais donc commencer par une seule.

Il y a quelques jours, j’ai utilisé ce tutoriel (How to Scale a Discourse Deployment with a Load Balancer and Managed Database Cluster | DigitalOcean) quasiment à la lettre et j’ai migré mon Droplet Discourse autonome sur Digital Ocean vers deux Droplets à l’intérieur d’un équilibreur de charge, jusqu’ici tout va bien.

J’ai ensuite suivi ce tutoriel (Configure an S3 compatible object storage provider for uploads), mais après avoir reconstruit Discourse depuis la ligne de commande, mon site Discourse n’affichait qu’un écran vide. J’ai regardé dans l’inspecteur du navigateur pour constater que le navigateur bloquait tout mon contenu car il était servi en HTTP et non en HTTPS. C’est probablement parce que l’équilibreur de charge est terminé SSL, donc tout ce qui est externe est en HTTPS, mais les serveurs eux-mêmes fonctionnent en HTTP.

À ce stade, j’ai complètement cassé mes serveurs à nouveau, en essayant de les faire fonctionner avec HTTPS à l’intérieur de l’équilibreur de charge, mais ce n’était tout simplement pas possible. Je n’ai pas pu faire fonctionner l’espace/CDN Digital Ocean avec S3/CDN selon ce tutoriel (Configure an S3 compatible object storage provider for uploads). Je l’ai parcouru méticuleusement et inspecté chaque aspect plusieurs fois, mais cela n’a pas fonctionné. La seule façon d’obtenir la reconstruction de Discourse a été de supprimer le paramètre DISCOURSE_S3_ENDPOINT: https://sfo3.digitaloceanspaces.com de app.yml, mais ensuite, même s’il avait été reconstruit, je n’ai pas pu obtenir de réponse du serveur. J’ai obtenu soit une erreur 503 serveur ne répond pas, soit une erreur normale de navigateur serveur ne répond pas ou serveur déconnecté. Cela variait en fonction de l’équilibreur de charge et des paramètres de l’espace/CDN DO que j’essayais. J’ai essayé toutes les combinaisons possibles de paramètres et rien n’a pu me permettre de servir une page.

Lorsque j’ai conservé le paramètre DISCOURSE_S3_ENDPOINT, j’ai obtenu l’erreur suivante lors de la reconstruction de Discourse, mais elle a disparu lorsque j’ai commenté le paramètre S3_ENDPOINT.
Aws::S3::Errors::InvalidAccessKeyId: Aws::S3::Errors::InvalidAccessKeyId

Tous mes fichiers ont été synchronisés avec S3, donc je pense qu’il est sûr de supposer que la clé d’accès était correcte, et que le problème était causé d’une manière ou d’une autre par le paramètre S3_ENDPOINT.

Aujourd’hui, j’ai abandonné en essayant de faire fonctionner la tentative précédente, et j’ai restauré une sauvegarde de mes Droplets qui ne faisaient que de l’équilibrage de charge avec uniquement HTTP et j’ai finalement réussi à le faire fonctionner à nouveau en suivant ce tutoriel (Set up file and image uploads to S3) mais cette fois, j’ai modifié les paramètres S3 via le panneau d’administration de Discourse plutôt que de modifier app.yml avec les paramètres du tutoriel recommandé. Cela a finalement fonctionné, mais la différence importante est que j’ai délibérément omis les paramètres CDN S3. J’ai confirmé que les images téléchargées dans les publications sont stockées sur S3 et que je peux sauvegarder Discourse directement sur S3, et c’est vraiment tout ce que je veux, mais j’ai maintenant trois problèmes qui me hantent, un est critique et deux sont ignorables, bien que j’aimerais confirmer ici si possible.

Le problème critique est que les utilisateurs ne peuvent plus se connecter en utilisant le bouton de connexion Patreon sur la page de connexion Discourse. Ce message s’affiche :
Désolé, une erreur s’est produite lors de l’autorisation de votre compte. Veuillez réessayer.

L’URL est la suivante :
https://mbp.community/auth/failure?message=invalid_credentials&origin=https%3A%2F%2Fmbp.community%2Flogin&strategy=patreon

J’apprécierais vraiment des conseils sur ce que je pourrais essayer pour que cela fonctionne, mais encore une fois, je me demande si c’est parce qu’en interne les serveurs ne fonctionnent pas en HTTPS. Comme vous pouvez le voir dans l’URL, en externe ils sont en HTTPS, il est donc difficile de savoir avec certitude. Je suppose que j’espère que quelqu’un ici a de l’expérience avec l’équilibrage de charge Digital Ocean, etc. avec Discourse.

Les deux autres problèmes sont signalés maintenant dans la console d’administration comme ci-dessous :

Quelques conseils basés sur les paramètres actuels de votre site

  • Votre site Web utilise le SSL. Mais [force_https](https://mbp.community/admin/site_settings/category/all_results?filter=force_https) n’est pas encore activé dans les paramètres de votre site.
  • Le serveur est configuré pour télécharger des fichiers sur S3, mais aucun CDN S3 n’est configuré. Cela peut entraîner des coûts S3 coûteux et des performances de site plus lentes. Voir “Utilisation du stockage d’objets pour les téléchargements” pour en savoir plus.

Donc, je ne suis pas contre essayer d’activer force_https, mais je crains que cela ne me bloque l’accès à mon serveur car en interne les serveurs équilibrés en charge ne fonctionnent pas en HTTPS et en raison des problèmes que j’ai eus hier, je suis réticent à passer encore douze heures à me cogner la tête contre un mur en regardant d’innombrables reconstructions de Discourse de 15 minutes pour n’arriver nulle part. Encore une fois, si quelqu’un sait qu’il est sûr d’activer force_https avec mes configurations, faites-le moi savoir.

Et le deuxième problème, encore une fois, ne s’est pas bien passé via les paramètres ajoutés au fichier app.yml, donc je suis réticent à essayer cela à nouveau non plus. Pouvez-vous confirmer que cela ferait essentiellement la même chose que les paramètres ajoutés au fichier app.yml ? Si oui, j’ignorerai simplement ce deuxième message. Inversement, si c’est pour une raison quelconque sûr à essayer, faites-le moi savoir et je ferai une sauvegarde et j’essaierai.

Désolé pour le long post. J’espère que vous pourrez comprendre ce sur quoi j’essaie d’obtenir des conseils.

1 « J'aime »

Alors vous avez vraiment besoin d’aide là-bas car tout ce qui est réellement pris en charge ici est une installation standard.

Vous attendez plus de 200 000 vues de page par jour ? Sinon, un seul droplet de 8 Go avec CDN sera beaucoup plus facile à gérer et probablement moins cher. Et d’après ce que je peux voir, il y a au moins quelques façons dont ces instructions ne fonctionneront probablement pour personne.

Premièrement, avez-vous configuré un redis externe comme décrit à l’étape 5 ? Sinon, je m’attendrais à ce que les choses soient au moins un peu cassées. Ils impliquent que l’utilisation de sticky “réparera” cela, mais ce n’est pas le cas. Vous pouvez donc vous attendre à des erreurs fantômes difficiles à diagnostiquer. Et ils ne spécifient pas de moyen de s’assurer que toutes vos instances exécutent exactement la même version de Discourse, ce qui risque également de tout casser.

Vous auriez vraiment dû faire cela en premier, sinon, en fait, cette configuration ne peut pas fonctionner, car certains téléchargements seront sur un serveur et d’autres sur un autre, et ces instructions ne mentionnent pas le mot “téléchargement”, donc je m’attends à ce que si vous l’utilisez pour plus que des tests, vous ayez un sacré bazar et que vous deviez synchroniser les téléchargements entre vos multiples droplets.

Il est spécifiquement indiqué que le CDN de Digital Ocean ne fonctionne pas avec Discourse.

Avez-vous utilisé un autre CDN comme il le recommande ? Bunny.net est assez facile et simple à configurer.

2 « J'aime »

Oh là là, je ne sais pas qui a écrit ce guide, mais ce n’était certainement pas quelqu’un de très familier avec Discourse à grande échelle.

La dernière étape indique que vous pouvez ajouter d’autres backends à l’équilibreur de charge en utilisant la fonctionnalité d’instantané de Droplet, mais comme le guide ne mentionne pas l’utilisation du stockage d’objets pour les téléchargements, cela cassera complètement les téléchargements des utilisateurs. De plus, si vous suivez ce guide, les mises à jour deviendront non triviales.

Mon conseil à @Martin_Bailey est de ne rien suivre de ce qui est indiqué là-bas. Cela ne résultera qu’une installation défectueuse, comme vous l’avez constaté.

Veuillez suivre notre guide d’installation officiel si vous souhaitez une installation rapide et saine de Discourse. S’écarter de cette voie peut rapidement devenir un travail à temps plein.

3 « J'aime »

Drôle. J’ai laissé un commentaire là-bas décrivant certains des problèmes et incluant un lien vers le post de Rafael, mais il a été supprimé.

3 « J'aime »

Wow ! OK, donc je pensais que ça s’était bien passé bien qu’il y ait eu quelques choses que j’ai remarquées comme étant incorrectes, mais j’ai maintenant une installation à répartition de charge. Bien sûr, la première chose que j’ai trouvée a été que les téléchargements d’images étaient cassés, c’est pourquoi j’ai utilisé S3 pour stocker les images.

En l’état, il faudra encore une charge de travail pour revenir à un seul serveur, alors y a-t-il quelque chose que je puisse faire concernant le problème de connexion Patreon ? J’ignorerai les deux autres problèmes.

Merci pour votre aide dans tous les cas. Vous faites un si bon travail ici.

Salut Jay, merci pour ton aide. En réponse à tes questions…

Je ne m’attends pas à beaucoup d’utilisateurs, car il s’agit d’une communauté Patreon fermée. Mon objectif principal était de pouvoir mettre à jour un serveur sans que cela n’arrête le site. J’ai en fait confirmé que c’était possible, donc j’étais satisfait de la configuration. Oui, j’ai bien fait l’étape cinq, donc l’état est stocké sur un droplet Redis externe.

L’autre chose que j’ai dû comprendre, ce qui m’a bloqué pendant un certain temps, c’est que j’ai également dû ajouter le paramètre ci-dessous à app.yml, sinon la reconstruction échouait constamment car elle essayait de se connecter à Postgres sur le port par défaut, malgré la présence du port réel dans le paramètre DISCOURSE_DB.

DISCOURSE_DB_BACKUP_PORT: 25060

Je n’avais pas pensé aux téléchargements avant d’avoir tout fait fonctionner sur la base du premier tutoriel, et cela a initialement tout cassé lorsque j’ai essayé de configurer S3, mais c’était parce que les paramètres CDN de DO Space que vous fournissez ici ne fonctionnent pas.

Il est spécifiquement indiqué que le CDN de Digital Ocean ne fonctionne pas avec Discourse.

Je sais, mais ensuite le tutoriel nous fait ajouter ceci :
DISCOURSE_S3_ENDPOINT: https://sfo3.digitaloceanspaces.com

Ce qui vient de DO Space, n’est-ce pas ? Je n’ai aucune idée, d’après tout ce que j’ai lu dans ces tutoriels, comment je pourrais travailler avec un CDN différent, mais je ne suis pas préoccupé à ce stade, car j’y reviendrai dans un moment.

Non, je n’ai pas utilisé de CDN différent. Je suis en fait très bien sans utiliser de CDN. Je laisserai les paramètres CDN vides. Comme mise à jour supplémentaire, et sur la base des conseils que vous m’avez tous aimablement fournis jusqu’à présent, j’allais simplement revenir à ma sauvegarde de la semaine dernière, mais j’ai pensé essayer d’activer l’option force_https d’abord, et l’activation de celle-ci a résolu le problème de connexion Patreon, comme je le pensais. Rien n’a été modifié sur les serveurs, donc le problème de connexion Patreon était probablement causé par une logique interne de Discourse, bien que, encore une fois, je réalise (maintenant) que je fais quelque chose que vous ne recommandez pas ou ne supportez pas.

Donc, à ce stade, ma configuration est pratiquement conforme à ce que recommande le premier tutoriel, mais les images et les sauvegardes vont toutes vers S3, sans CDN en place. Cela fonctionne très bien. J’apprécie que vous me recommandiez d’utiliser simplement l’installation autonome, mais arrêter le site pendant 15 minutes à chaque nouvelle mise à jour est vraiment pénible. Hier encore, j’ai trouvé vos références à data.yml et web_only.yml pour une configuration multi-serveurs, mais je n’ai pas réussi à comprendre ce que je devais faire, alors j’ai abandonné.

Je vais continuer avec ce que j’ai pour l’instant. Merci pour votre aide, et pour tout ce que vous faites.

OK les gars, vous avez gagné. :slight_smile:

J’ai commencé à voir plus de problèmes avec des images qui ne se chargeaient pas à nouveau car elles étaient parfois partagées via http et non https. Vous avez raison, c’est un désordre.

J’ai annulé la plupart de ces changements, en laissant la base de données Postgres en place mais en revenant à un seul serveur droplet, sans équilibreur de charge, et avec les images/Redis stockés localement. J’ai laissé S3 en place pour les sauvegardes du site cependant. J’adore la fluidité de son fonctionnement.

Je suis de retour aux pannes de 15 minutes à chaque mise à niveau, je suppose, mais j’ai passé un total d’environ cinq jours complets sur cela jusqu’à présent, et je ne peux plus y passer de temps, donc je suis heureux que vous ayez tous pu me remettre sur la bonne voie concernant ce tutoriel original que j’ai suivi. C’est presque comme s’ils voulaient juste que les gens paient pour plus de Droplets. :slight_smile:

Merci encore pour votre aide.

En fait, si je pouvais juste demander, existe-t-il un tutoriel pour nous aider à configurer Discourse de manière à éviter cette interruption de 15 minutes à chaque mise à jour. J’ai vu la note sur data.yml et web_only.yml mais je n’ai aucune idée de ce que je dois faire pour que cela se produise.

Avoir des fichiers yml séparés pour data et web_only provient de la configuration à deux conteneurs :

1 « J'aime »

Cela fonctionnera et résoudra certains problèmes. Et si jamais vous êtes bloqué pour une (autre) raison, vous pouvez toujours utiliser launcher enter app pour revenir et désactiver le paramètre du site depuis la console Rails.

Comme d’autres l’ont déjà dit, il est préférable de suivre un autre guide.

1 « J'aime »

Salut tout le monde,

J’ai écrit cet article sur DigitalOcean, il semble que j’aie fait quelques erreurs, désolé !

J’aimerais mettre à jour l’article pour corriger ces problèmes.

Je voudrais donc juste poser quelques questions pour m’assurer que je fais les choses correctement avec la version corrigée.

Dans l’article, j’ai dit que vous pouviez éventuellement utiliser une instance Managed Redis, ma pensée à l’époque était qu’en utilisant des sessions persistantes, vous pourriez utiliser le Redis intégré dans l’image Discourse. Est-ce correct ? Peut-être que ce n’est pas suffisant et qu’une instance Redis externe devrait être une exigence obligatoire.

Je suis d’accord avec le commentaire de @Falco concernant le stockage d’objets, c’est un oubli de ma part. Je peux mettre à jour l’article pour inclure des instructions sur l’utilisation des espaces DigitalOcean pour gérer les téléchargements d’images.

Je pense que supprimer tout état des Droplets est la solution pour résoudre les problèmes d’installation, j’espérais que l’utilisation d’un Redis externe était facultative en raison des sessions persistantes, mais je pourrais me tromper.

Je suis également d’accord pour dire que cela rend votre installation Discourse plus compliquée à mettre à niveau. Je pense cependant que si vous supprimez tout état des Droplets, vous devriez pouvoir mettre à niveau un Droplet, le sauvegarder et simplement remplacer les autres Droplets par de nouveaux créés à partir des sauvegardes (un peu comme les déploiements Kubernetes, sauf que vous effectuez le redéploiement manuellement).

Je suis également d’accord qu’il existe probablement de meilleures façons de mettre à l’échelle Discourse, j’aimerais quand même corriger l’article afin que les gens puissent le suivre s’ils le souhaitent.

Merci,
Francis

Je suis un client heureux de Digital Ocean et j’ai un tableau de bord où mes clients entrent des clés API et un nom d’hôte, puis il crée automatiquement un droplet, configure Mailgun, attend que les enregistrements DNS soient configurés, puis installe Discourse.

Cela ne fonctionne pas du tout comme vous le suggérez. J’ai contacté DigitalOcean sur votre forum (je n’ai pas trouvé d’autre moyen) pour vous en informer et mon message a été supprimé. Ensuite, 9 mois plus tard, vous répondez ici.

Le faire correctement est un exploit assez compliqué, et les cas où cela serait utile sont assez farfelus. J’ai un site avec 100 000 pages vues par jour sur un droplet de 8 Go. Qui pensez-vous que soit le public cible de ce guide ?

Oui, vous avez besoin de redis, postgres et de buckets S3 externes avec un CDN, et le CDN de Digital Ocean ne fonctionne pas, donc votre guide devrait les guider dans la configuration du CDN d’une autre entreprise. Je ne pense pas que vous vouliez faire ça. Et ce n’est que pour le mettre en place. S’ils veulent ensuite faire une mise à niveau, ce serait un tout autre ensemble de procédures que personne d’autre sur la planète ne saurait comment aider.

La meilleure chose que vous puissiez faire serait de supprimer ce guide complètement. Si vous voulez être un vrai héros, vous pourriez corriger l’installation en 1 clic afin qu’elle n’utilise pas votre propre script propriétaire pour configurer l’e-mail et ainsi de suite, afin qu’il s’agisse réellement d’une installation standard. Il est assez déroutant de devoir faire Ctrl+C pour pouvoir accéder à l’endroit où se trouve Discourse, et comme les personnes qui ont utilisé l’installation en 1 clic n’ont pas utilisé les outils standard de Discourse, elles ne savent pas comment les utiliser lorsqu’il s’agit d’une mise à niveau en ligne de commande. Ce serait vraiment, vraiment formidable si vous pouviez faire cela.

Ici, vous pouvez voir des personnes qui l’ont utilisé et ont eu des problèmes : Search results for 'digital ocean one-click' - Discourse Meta

1 « J'aime »

Non, car Redis n’est pas un simple cache, mais gère beaucoup de comptage, de limites de débit, de tâches d’arrière-plan, de pub/sub. Avoir plusieurs Redis entraînera une corruption du comptage et un comportement défectueux.

Cela fonctionnerait, mais l’ajout d’un Redis géré, d’un PostgreSQL géré, d’un équilibreur de charge géré, d’un stockage d’objets, d’un registre de conteneurs sera également plus cher que de simplement payer pour notre hébergement standard et beaucoup plus compliqué à maintenir.

À ce stade, l’intersection entre les personnes qui veulent payer des centaines de dollars par mois et qui ne se soucient pas si leur service tombe en panne à cause d’un SPOF est assez petite, et cela devient davantage une configuration pour amateurs qu’une recommandation pour les administrateurs de forums.

1 « J'aime »