Configuration de serveur 3 haute disponibilité

Discourse prend-il en charge plusieurs machines (chacune avec un seul conteneur Docker) derrière un équilibreur de charge autonome ?

J’ai besoin d’une configuration Discourse capable de gérer la défaillance d’un serveur, donc ma réponse standard consiste à configurer 3 serveurs derrière un équilibreur de charge (l’équilibreur de charge gérant le certificat SSL).

J’ai configuré des serveurs PostgreSQL et Redis externes autonomes pour Discourse. (Tout cela est sur Google Cloud Platform). J’utilise le lanceur Discourse pour configurer le conteneur Docker dédié uniquement au web.

  1. Discourse prend-il en charge l’exécution de plusieurs conteneurs lorsque chaque conteneur est sur une machine différente ?
  2. Devrais-je simplement copier le conteneur Docker créé à partir de la première machine vers les autres machines ?
  3. Comment sont gérés les logos téléchargés ?
  4. Les logos, les favicons, etc. téléchargés sont-ils stockés dans la base de données ?

Merci beaucoup pour votre aide.

5 « J'aime »

Oui, c’est ainsi que nous l’exécutons chez notre service d’hébergement.

  1. Oui
  2. Oui
  3. Vous devez configurer l’utilisation du stockage objet pour les téléversements (S3 et clones)
  4. Non, ils sont envoyés vers le stockage objet comme indiqué au point 3.
7 « J'aime »

Merci, Rafael. C’est très apprécié.

J’ai rencontré un problème avec la terminaison SSL sur le load balancer. Discourse spécifie tous ses liens en HTTP.

Y a-t-il un moyen de rendre Discourse conscient que ses liens doivent être en HTTPS ?

Oui, passez à la console Rails et activez le HTTPS avec :

cd /var/discourse
./launcher enter app
rails c
SiteSetting.force_https = true
2 « J'aime »

Excellent. Merci encore.

Je suppose que je pourrais ajouter dans le app.yml
- exec: rails c "SiteSetting.force_https = true"

Je ne connais pas du tout Rails. Dans ma commande ci-dessus, est-ce qu’il faut utiliser ‘rails c’ ou ‘rails r’ ?

2 « J'aime »

Nous avons un exemple de modification des paramètres du site lors du démarrage dans notre fichier d’exemple :

3 « J'aime »

Oui, c’est bien de là que j’ai copié ma commande.

Une dernière question : le conteneur Docker est-il surveillé ? Si le conteneur Docker s’arrête pour une raison quelconque, est-ce que launcher a été configuré pour le redémarrer ?

Oui, le launcher demande à Docker de redémarrer automatiquement les conteneurs.

2 « J'aime »

D’accord. J’ai maintenant un Discourse fonctionnel sur une seule machine. J’ai deux autres machines. Le volume partagé docker /shared pointe vers un répertoire NFS pour permettre à toutes les machines d’accéder aux fichiers téléchargés (en particulier les logos, etc.).

J’ai copié les images Docker sur les machines 2 et 3 (docker save -o app-image local_discourse/app puis docker load -i app-image).

J’avais cru comprendre qu’une simple commande ./launcher start app suffirait, mais elle tente de vérifier containers/app.yml.

Vais-je rencontrer des problèmes si je permets que app.yml soit vérifié (et que des modifications soient apportées) à la base de données depuis les machines 2 et 3 ?

Existe-t-il une meilleure méthode pour faire fonctionner trois machines dans une seule configuration ?

1 « J'aime »

Vous avez deux options :

  • Utilisez – je pense que c’est ./launcher start-command app – sur la machine entièrement configurée (la « machine de build ») pour obtenir une ligne de commande Docker complète
  • Copiez app.yml et effectuez ce que vous venez de tenter (launcher start).
5 « J'aime »

Je configurerais la variable d’environnement DISCOURSE_FORCE_HTTPS: true.

6 « J'aime »