Passage du conteneur autonome à des conteneurs web et données séparés

J’essaie de mettre en œuvre des conteneurs séparés, mais avec une base de données distante. J’ai suivi les instructions ci-dessus ainsi que le guide pour configurer une base de données PostgreSQL distante. La configuration fonctionne, mais je me demande pourquoi il y a deux références identiques (sous web_only et data) vers la même base de données. Cela me laisse penser que je fais quelque chose de mal et que le conteneur web_only n’utilise même pas le conteneur data.

Est-ce que je fais cela correctement ?

Voici ma configuration.

Dans web_only.yml, j’ai ajouté :

  DISCOURSE_DB_SOCKET: ''
  DISCOURSE_DB_USERNAME: REMOVE
  DISCOURSE_DB_PASSWORD: REMOVE
  DISCOURSE_DB_HOST: xxx.ondigitalocean.com
  DISCOURSE_DB_NAME: REMOVE
  DISCOURSE_DB_PORT: 25060
  DISCOURSE_DB_BACKUP_PORT: 25060
  DISCOURSE_REDIS_HOST: data

Dans data.yml :

J’ai supprimé postgres.template.yml

templates:
#  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"

J’ai également ajouté ce qui suit :

env:
  # assurez-vous que la locale existe dans le conteneur, vous devrez peut-être l'installer
  LANG: en_US.UTF-8
  DISCOURSE_DB_USERNAME: REMOVE
  DISCOURSE_DB_PASSWORD: REMOVE
  DISCOURSE_DB_HOST: REMOVE.ondigitalocean.com
  DISCOURSE_DB_NAME: REMOVE
  DISCOURSE_DB_PORT: 25060
  DISCOURSE_DB_BACKUP_PORT: 25060

Si vous utilisez une base de données distante, vous n’avez pas besoin de créer le conteneur de données qui contient une base de données. Notez que vous avez besoin à la fois de PostgreSQL et de Redis (vous pourriez donc avoir besoin du conteneur de données pour cela).

1 « J'aime »

mais ici, je n’ai qu’un seul conteneur en cours d’exécution, sans aucune erreur

Je ne sais pas vraiment ce que vous entendez par « deux conteneurs », mais si vous supposez que deux conteneurs signifient deux instances Discourse distinctes, alors vous vous trompez de direction.

Cet article aide à configurer un conteneur d’application et un conteneur de base de données séparés, ce qui est utile pour les utilisateurs avancés recherchant une certaine flexibilité.

Si vous souhaitez installer/héberger deux sites Discourse sur la même machine, regardez peut-être du côté de Discourse multisite :
Multisite configuration with Docker

1 « J'aime »

Ce que j’entends par conteneur, c’est que vous pouvez voir deux conteneurs en cours d’exécution lorsque vous tapez sur la machine hôte :

docker ps

et deuxièmement, pour cette commande avec 2 conteneurs, je n’ai pas trouvé où définir le nom de domaine.

Alors, quel conteneur était en cours d’exécution ? Si c’était app, alors non, vous exécutez une ancienne version de discourse-setup.

Faites un git pull avant de continuer pour vous assurer que vous utilisez la dernière version de discourse-setup.

Si vous avez un conteneur data ou web-only en cours d’exécution, vérifiez alors ce qui a empêché l’autre de démarrer. Généralement, le conteneur web-only échoue à démarrer parce qu’un processus (serveur web) est déjà en cours d’exécution sur le port 80/443.

Oui, l’application.
Oh non, j’ai cloné le code source de GitHub aujourd’hui.

Je ne l’ai pas essayé personnellement, mais comme @pfaffman est le génie qui l’a créé, peut-être peut-il vous aider.

En regardant le code de discourse-setup sur GitHub, je ne vois rien d’évident qui pourrait empêcher son bon fonctionnement.

Sur quel système d’exploitation faites-vous tourner votre serveur ?

Serveur Ubuntu
J’ai réussi à exécuter un conteneur autonome.
Actuellement, j’essaie cette méthode : Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache

Essayez-vous de mettre en place un multisite ou un multi-conteneur ?

Comme je l’ai dit, j’ai fait tourner un forum autonome pendant un mois. Lorsque je voulais en créer un nouveau, plusieurs pistes ont été explorées :

  1. Je voulais exécuter un conteneur autonome séparé sur le même serveur, sans succès.
  2. Configuration multisite avec Docker : conteneur différent pour le web et la base de données, comme décrit ici : Multisite configuration with Docker, sans succès.
  3. Votre solution à deux conteneurs, sans succès.
  4. Celle-ci est en cours d’essai : Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache. Peut-être que ça va marcher.

Si vous souhaitez simplement exécuter un deuxième conteneur autonome, vous devrez modifier les fichiers YAML pour utiliser un répertoire et un port différents. Il faudra peut-être également désactiver Let’s Encrypt.

Une fois que tout cela sera corrigé, je souhaite rédiger quelques tutoriels pour les débutants.

1 « J'aime »

Pour info, si vous souhaitez mesurer les performances, il ne faut pas le faire sur une machine de production. Préférez lancer un VPS distinct et l’utiliser pour les tests de performance.

Tenter d’exécuter deux instances distinctes de Discourse sur la même machine peut entraîner une installation très corrompue, ce qui n’est pas idéal.

Cette commande créera des conteneurs de données et web distincts uniquement si aucun fichier app.yml n’existe au moment de son exécution. Elle ne créera pas deux conteneurs web.

1 « J'aime »

Avant d’exécuter cette commande, il semble qu’il y ait déjà un app.yml.

Je pense que c’est très important, cela devrait être ajouté dans le premier message et éventuellement sur GitHub aussi ?

Je pense que j’aurais dû laisser cette fonctionnalité non documentée. Et, en réalité, cela n’aide pas à passer à une configuration à deux conteneurs, donc cela ne devrait probablement pas figurer ici du tout.

1 « J'aime »

Peut-être un #tutoriel dédié ?

Pas besoin d’être très détaillé, mais cela pourrait être très utile pour ceux qui souhaitent se lancer dans des aventures Discourse plus avancées.

2 « J'aime »

Peut-être bien. C’est une grande aide et, comme discourse-setup, elle sert à un objectif très précis : une nouvelle installation très standard. Mes scripts d’installation l’utilisent depuis un bon moment. Cela peut être un moyen facile de passer à deux conteneurs si vous êtes prêt à sauvegarder l’ancien conteneur et à restaurer sur le nouveau.

Ma préoccupation a toujours été que cela serait difficile à prendre en charge, car des personnes qui ne le comprennent pas essayeront de l’utiliser, puis ne pourront plus utiliser la documentation, car « rebuild app » ne fonctionnera plus. De plus, savoir quand il faut reconstruire le conteneur de base de données est également difficile. J’ai récemment eu un échec de reconstruction parce que Redis était en version 3.0 alors que la version 4.0 est désormais requise. Ensuite, PostgreSQL a également dû être mis à jour, ce qui nécessitait de suivre une séquence d’étapes, mais il fallait savoir quand reconstruire le conteneur de données et quand reconstruire le conteneur web, ainsi que comment modifier le chemin par rapport à ce qui est recommandé. Tout s’est déroulé sans accroc — pour moi, mais essayer de communiquer cela à quelqu’un qui ne sait pas ce qu’est Bash, dans un forum, serait frustrant pour toutes les parties.

Je pense qu’il vaudrait mieux maintenir une barrière élevée pour créer une installation non standard, afin de protéger les gens contre eux-mêmes.

3 « J'aime »