Comment faire évoluer Discourse horizontalement ?

Bonjour,
Je suis un peu perdu avec les instructions d’installation. Existe-t-il un moyen de mettre Discourse à l’échelle horizontalement ?
Par exemple : avoir 2+ conteneurs Docker sur différents serveurs, chacun exécutant Discourse ?

Dans les instructions de GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub

La configuration multi-conteneurs est beaucoup plus flexible et robuste, mais elle est également plus complexe à mettre en place. Une configuration multi-conteneurs vous permet de :

  • Minimiser les temps d’arrêt lors de la mise à jour vers de nouvelles versions de Discourse. Vous pouvez démarrer de nouveaux processus web pendant que votre site fonctionne, et ne basculer vers la nouvelle image qu’une fois celle-ci construite.
  • Mettre votre forum à l’échelle sur plusieurs serveurs.
  • Ajouter des serveurs pour la redondance.
  • Exécuter certains services requis (par exemple, la base de données) sur du matériel plus puissant.

Si vous souhaitez une configuration multi-conteneurs, consultez les modèles data.yml et web_only.yml dans le répertoire des exemples. Pour faciliter ce processus, launcher injectera une variable d’environnement appelée DISCOURSE_HOST_IP, qui sera disponible à l’intérieur de l’image.

Y a-t-il un endroit où je peux trouver plus d’informations sur la façon d’exécuter les conteneurs sur différents serveurs, et non plusieurs conteneurs sur le même serveur ?

Merci

Il existe de nombreuses discussions connexes sur Discourse peut-il publier des images Docker fréquentes qui n’ont pas besoin d’être initialisées ?.

L’essentiel est le suivant :

  1. Vous fournissez des services externes pour PostgreSQL, Redis et le répartiteur de charge, et vous configurez app.yml pour les utiliser, comme par exemple Exécuter Discourse avec un serveur PostgreSQL séparé.

  2. Exécutez ./launcher bootstrap app quelque part. Cela entraînera la création d’une image de conteneur sur la machine locale. Téléversez cette image vers votre service d’enregistrement de conteneurs.

  3. Vous pouvez maintenant lancer autant d’instances que vous le souhaitez, en indiquant à toutes d’exécuter l’image exportée à l’étape précédente.

4 « J'aime »

Vous pouvez par exemple exécuter Discourse dans Docker à côté d’Apache et créer deux conteneurs web, avec un proxy inverse placé devant.

Vous pouvez utiliser la fonctionnalité multisite pour qu’un seul conteneur serve plusieurs sites (en utilisant les mêmes plugins et la même version de Discourse). Cet article explique comment procéder sans proxy inverse externe. Si vous essayez cette méthode, veuillez laisser un commentaire dessus et me dire si cela a fonctionné. Je compte publier cela ici lorsque je serai assez certain que cela fonctionne.

Exécuter des conteneurs sur plusieurs serveurs suit le même principe que l’un des cas ci-dessus. Vous auriez plusieurs conteneurs partageant le même Redis et Postgres, placés derrière un équilibreur de charge.

En général, toute installation autre que l’installation standard officielle de Discourse n’est pas prise en charge, car il existe une infinité de façons de mettre en œuvre ces configurations.

J’ai deux questions :

  • La première concerne Sidekiq dans le cas de l’exécution de plusieurs web_only.yml Docker, chacun dans une VM différente : Dans ce premier cas, différentes instances Sidekiq partageant le même serveur Redis peuvent exécuter le même travail deux fois. Discourse est-il robuste face à ce type d’erreur ? Est-il plus fiable d’utiliser un seul Sidekiq dans une VM dédiée (ou Docker), et comment le séparer de web_only Discourse ?
  • Concernant vos dernières remarques sur l’installation prise en charge : Je peux comprendre que les gens puissent avoir une infinité de façons de configurer plusieurs conteneurs, mais, à mon avis, nous avons besoin d’un moyen pris en charge pour exécuter plusieurs instances pour la mise à l’échelle horizontale et/ou la haute disponibilité dans deux cas : basé sur VM (différents conteneurs web_only Discourse dans différentes VM et Redis/Postgres sont installés dans d’autres VM séparées directement sans utiliser Docker) et basé sur conteneurs (tout est basé sur conteneur).