Utiliser une image Docker construite avec un launcher dans docker-compose

Salut Mike. En gros, tu utilises ./launcher bootstrap pour construire l’image, tu la pousses vers un dépôt, puis tu utilises ./launcher start-cmd pour voir quelles variables d’environnement (ENV) doivent être passées à Docker pour lancer le tout.

La raison pour laquelle un tel guide n’existe pas, c’est que les personnes qui n’ont pas les connaissances les plus élémentaires sur l’un des composants sous-jacents vont le trouver, ne pas arriver à le comprendre, puis s’attendre à un tutoriel expliquant comment fonctionne l’ingress sur n’importe quel système qu’ils pensent être la seule solution.

Appelez-moi fou, mais peut-être êtes-vous la preuve vivante que nous avons fait les choses ainsi pour une raison ? :wink:

Merci Jay — j’avais déjà compris ça. J’ai enfin réussi à faire fonctionner le tout.

  • Je vais créer une vidéo et un guide expliquant exactement ce que j’ai fait, afin que le « moi » de demain ne perde pas son temps à chercher comment résoudre ce problème.

Je suppose que le problème vient en partie du fait que cela va à l’encontre de la logique de la plupart des autres images Docker disponibles. Ce n’est pas aussi « plug and play ». C’est plutôt « bidouiller, brancher, puis jouer ».

Comme je l’ai dit, le lanceur est un outil magnifique et fiable pour ce qu’il fait.

Sur une note vraiment positive, la version web fonctionne à merveille : elle est super rapide sur mon swarm, et elle est mise à jour facilement grâce à mon serveur de build.

Quand j’aurai le temps, j’explorerai la possibilité de créer un serveur de build sur mon swarm permettant de construire une image Docker via une interface web.

Voici quelques tentatives qui ont laissé beaucoup à désirer…

  • Image Docker Bitnami : elle tournait comme un chien sans pattes.
  • Dockerfile d’IndieHosts : je n’ai même pas réussi à lancer la build — il semblait déterminé à tout compiler, je pense qu’il compilait Linux. Encore une fois, il doit bien y avoir une méthode plus simple !

Bon, merci.

Mike.

Nous avons ce désavantage du premier mouvement :sunglasses:

Le script de lancement a été créé avant l’existence de docker-compose, docker-swarm, kubernetes et tout le reste, et… il fonctionne toujours. Il n’y a pas vraiment de raison convaincante pour nous de passer à autre chose. Les « avantages » de ces systèmes ne sont pas des avantages pour le premier utilisateur de l’hébergement autonome de Discourse, à savoir les installations à budget limité sur des VPS cloud.

Ah ! Je me suis toujours demandé cela. Et la dernière fois que j’ai vérifié, l’installation de docker-compose sur Ubuntu nécessitait une étape supplémentaire. On dirait qu’ils ne veulent pas que les gens l’utilisent, sauf s’ils utilisent Windows (ou Mac ?).

C’est un peu triste d’entendre cela comme réponse officielle de l’équipe de développement. Vous dites essentiellement que si vous n’êtes pas assez compétent pour comprendre ce processus non documenté d’exécution de Discourse en production, alors peut-être ne devriez-vous pas exécuter Discourse en production.

Eh bien, tout le monde n’a pas, hélas, une vaste expérience en DevOps.

@Mike_Sutton Je suis du même avis que vous. Je parcours les forums depuis quelques semaines pour essayer de résoudre ce problème. Avez-vous réussi à faire une vidéo sur la façon dont vous avez résolu le problème ?

Cela fonctionnerait-il ? Et pour les migrations de base de données ?

Dans ce scénario, vous feriez exécuter les migrations par Bootstrap lors de la création de la nouvelle image de conteneur.

Bonjour @lucasbasquerotto

Oui, vous pouvez pousser les images Docker de Discourse vers un dépôt et archiver le reste de /var/discourse comme dans la discussion ci-dessous, mais ce n’est pas une méthode efficace et elle n’est pas officiellement prise en charge. Je l’ai récemment testée en entier :

Mais dans ce cas, l’étape de bootstrap doit être effectuée sur la machine de production, ce qui va à l’encontre de l’objectif de pousser une image de base vers un registre de conteneurs, si je ne me trompe pas (car cela se ferait dans le but d’éviter de devoir faire un bootstrap d’image en production, sauf peut-être pour exécuter une étape de migration de base de données ou quelque chose de similaire).

C’est ce que je fais sur les sites non-Discourse que j’héberge : j’utilise normalement Flyway pour exécuter les migrations dans la base de données, ainsi que quelques autres tâches comme vider le cache Redis, mais sans lancer d’autres processus intensifs, en particulier ceux qui dépendent de services externes, comme la mise à jour des certificats HTTPS (je le ferais via un cronjob, sauf la première fois, ce qui n’est pas un problème) ou la modification du code source (qui serait statique dans l’image, comme les paquets, les bibliothèques et autres éléments). Il semble que Discourse utilise Rake, ce qui est acceptable, mais il effectue d’autres tâches telles que l’installation de gems, la génération d’assets, la mise à jour de la base de données MaxMind et peut-être d’autres services (ce qui pourrait casser l’étape de reconstruction si, par exemple, le service est en panne ou s’ils modifient l’API, ce qui est rare mais possible).

Je ne dis pas que Discourse devrait fonctionner ainsi, bien sûr, mais générer une image dans un environnement d’intégration continue (CI) et simplement exécuter une étape de migration de base de données sur les serveurs de staging/production, tout en définissant les variables d’environnement, c’est ce à quoi je m’attendrais. C’est facilement réalisable avec d’autres logiciels comme WordPress, MediaWiki, RocketChat, etc. Discourse est, à mon avis, le meilleur logiciel pour les forums, et ils ont peut-être de bonnes raisons de procéder ainsi, mais pour l’instant, je n’utiliserais que l’installation standard (ou l’installation multi-conteneurs) pour éviter les maux de tête et espérer simplement que rien ne tourne mal lors des reconstructions.

Il semble que le bootstrap doive toujours être effectué dans un environnement de production, et non dans un environnement CI pour générer une image de base à utiliser à la fois dans les environnements de staging et de production. De plus, ne pas suivre une installation standard est un énorme signal d’alarme, qui pourrait devenir un casse-tête à l’avenir à mesure que le logiciel recevra des mises à jour.

Salut Mike,

As-tu fini par documenter ton processus ? Ce serait super de voir la vidéo aussi ?

Cordialement,