J’ai essayé d’installer une instance privée de Discourse, en suivant les instructions officielles sur discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub. Bien que les scripts semblent extrêmement complexes, j’ai dû modifier manuellement les fichiers container.yml et discourse-setup pour définir mes propres paramètres…
1er problème : malgré sa complexité, le script d’installation ne permet pas de modifier les ports exposés ! Les ports 80/443 ne peuvent pas être utilisés sur mon serveur, étant déjà utilisés par nginx. J’ai donc dû une fois de plus modifier le script de configuration pour définir les ports 3080/3443 comme ports requis pour accéder à Discourse.
Ensuite, j’ai réussi à faire fonctionner tous les conteneurs. En regardant la pile avec Portainer, j’ai découvert que l’application démarre et s’arrête silencieusement, et que les journaux ne donnent pas beaucoup d’informations sur la raison. Comme redis et postgres ne publient aucun port, l’application discourse pourrait échouer car elle ne peut pas se connecter à ces composants ? Qu’ai-je manqué ou fait de mal ?
Salut Richard, merci pour ta réponse rapide ! Je ne suis pas un professionnel de l’informatique, j’aime juste jouer avec les outils : quelle serait la solution à ce problème ?
Il semble que vous vous soyez écarté de l’installation standard en configurant des conteneurs séparés pour Redis et Postgres, je n’ai donc malheureusement pas de réponse immédiate pour vous. Comment avez-vous configuré les paramètres Redis dans Discourse ?
Autre chose : je vois redis:4-alpine. Je crains que vous deviez passer à une version plus récente de Redis car Discourse nécessite la version 6.20 ou supérieure. Je ne pense pas que ce soit la cause de votre problème cependant.
Le script d’installation ne fonctionne que pour une configuration standard. Si vous faites quelque chose de plus complexe, vous devrez modifier le fichier yml manuellement. C’est beaucoup plus simple que de modifier le script.
Si vous n’allez pas utiliser les instances postgres et redis fournies, vous devrez vous débrouiller pour comprendre pourquoi les vôtres ne fonctionnent pas. Il y a trop de choses possibles pour que nous puissions deviner ou inférer. Je recommanderais une installation standard sur une machine virtuelle séparée pour voir comment les choses fonctionnent avant d’essayer une configuration très complexe.
Je n’ai effectué aucune installation « non standard » ! J’ai, comme décrit dans la documentation, téléchargé l’ensemble depuis Github, changé uniquement les ports exposés et exécuté le script :
Je n’ai rien modifié dans la configuration de redis, ni de postgres.
Je n’ai rien modifié pour la version de redis.
Ces logiciels ont été installés par le script genuine discourse-setup.
@pfaffman que voulez-vous dire par « éditer le yml à la main » ? De quel yml parlez-vous ? Il y a plein de fichiers .yml dans « containers »…
Au fait, j’ai bien un reverse proxy sur la machine, qui semble avoir une configuration simple : plusieurs fichiers subdomain.conf qui définissent la redirection subdomain:80 → port XXX. Est-ce ce qui est requis ?
Je recommanderais une installation standard sur une VM séparée pour voir comment les choses fonctionnent avant d’essayer une configuration très complexe.
Je ne veux pas d’une configuration complexe , j’ai juste besoin de faire fonctionner Discourse avec d’autres conteneurs, ce pour quoi Docker est conçu…
En général, discourse-setup n’installe pas d’instances PostgreSQL et Redis séparées, et certainement pas les versions 12 et 4.
Pouvez-vous s’il vous plaît publier votre configuration et les modifications que vous avez apportées à container.yml et aux scripts ? Assurez-vous de masquer tous les paramètres confidentiels.
Faites-nous également savoir à quel commit du dépôt discourse_docker vous vous trouvez.
Vous avez modifié à la fois discourse-setup et un fichier qui sera écrasé lors de la mise à jour de discourse-docker. Modifier quoi que ce soit d’autre que votre app.yml est décidément non standard.
Pourquoi ? Et quoi que ce soit que vous ayez eu besoin de changer là-bas, ce n’est pas comme ça qu’il faut faire. Vous devrez mettre ces changements dans votre app.yml.
Discourse ne fonctionnera pas sur un port non standard, il ne s’agit donc pas d’une installation standard.
L’installation standard inclut postgres et redis dans le conteneur unique. Comme signalé, vous utilisez des versions non prises en charge de redis et postgres. Vous pouvez également effectuer une installation à deux conteneurs comme décrit ici Déplacer d’un conteneur autonome vers des conteneurs web et de données séparés (et vous pouvez utiliser ./discourse-setup --two-container pour que discourse-setup crée des conteneurs de données et web séparés, bien que cela soit un peu plus compliqué à maintenir (vous devez savoir quand mettre à jour le conteneur de données).
effacer tous les logiciels qui ont été installés avec les scripts modifiés (j’espère que ce sera facilement réversible).
retélécharger le script. J’ai utilisé git clone https://github.com/discourse/discourse_docker.git /var/discourse pour l’installation actuelle : est-ce correct ?
changer éventuellement certains paramètres dans le fichier app.yml uniquement, avant d’exécuter ./discourse-setup.
exécuter le script d’installation pour une installation standard (je préfère un seul conteneur).
configurer le proxy nginx pour router discourse.example.com:80/443 vers le conteneur approprié. La documentation donne-t-elle des indications pour cette partie ?
Veuillez compléter la liste si j’ai oublié une étape !
app.yml est créé par discourse-setup. Vous ne pouvez pas exécuter discourse-setup s’il ne peut pas accéder aux ports, mais si vous lisez le code source, vous verrez que vous pouvez exécuter ./discourse-setup --skip-connection-test et l’exécuter quand même.
Votre nginx sera responsable de let’s encrypt, vous voudrez donc commenter le modèle let’s encrypt. Je suppose que cela est décrit dans le sujet du proxy inverse lié ci-dessus et ci-dessous.
Vous ne pouvez pas utiliser ./discourse-setup pour configurer Discourse si un autre serveur utilise le port 80 ou 443. Vous devrez copier et modifier samples/standalone.yml avec votre éditeur de texte préféré.
et je comprends que je dois modifier app.yml avant d’exécuter discourse-setup, comme déjà dit dans le préambule
Vous ne pouvez pas utiliser ./discourse-setup pour configurer Discourse si un autre serveur utilise le port 80 ou 443. Vous devrez copier et modifier samples/standalone.yml avec votre éditeur de texte préféré.
Pouvez-vous alors confirmer le processus suivant :
télécharger tout le contenu depuis Github
exécuter discourse-setup une fois avec l’option --skip-connection-test → cela créera le fichier containers/app.yml
modifier app.yml comme décrit dans la documentation ci-dessus
mettre à jour le logiciel avec /var/discourse/launcher rebuild app
créer le site nginx pour pointer vers le socket Discourse et redémarrer nginx
enfin, lancer un navigateur pour accéder à Discourse sur https://discourse.mydomain.com, qui pointe simplement vers l’adresse IP du serveur.
télécharger tout le contenu depuis Github : TERMINÉ
exécuter discourse-setup une fois avec l’option --skip-connection-test : tout s’est bien passé jusqu’à la fin, où le script a retourné
docker: Error response from daemon: driver failed programming external connectivity on endpoint app (784361985c928eb26b149d829f37882056562d9b1e77ef4ce71fbfe30c5d80b1): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use.
Cela me semble normal, car le conteneur essaie d’accéder aux mêmes ports que le serveur web existant. Cependant, comme aucun conteneur discourse n’a été créé (comme indiqué par docker container ls), j’aimerais que vous confirmiez cela avant de poursuivre avec la configuration de nginw…
Vous voulez dire « avant d’exécuter discourse-setup » ? Dans ce cas, quel fichier dois-je modifier, car app.yml n’existe pas avant que je n’exécute le script ? Je veux installer une application à 1 conteneur : dois-je exécuter à nouveau le même script discourse-setup ou la commande /var/discourse/launcher rebuild app ?
Désolé de vous déranger, j’ai besoin d’être sûr à 100% car je ne suis vraiment pas un expert :
Je lance une fois de plus./discourse-setup --skip-connection-test --skip-rebuild (la précédente exécution s’est faite sans l’option --skip-rebuild). Je n’ai pas besoin de supprimer ce qui a été installé lors de la précédente exécution.
Ensuite, je modifie le fichier app.yml existant et je commente les ports (ils sont déjà commentés)
Vous n’avez plus jamais besoin d’exécuter discourse-setup (sauf, peut-être, si vous changez la quantité de RAM dont vous disposez et que vous souhaitez qu’il mette à jour les paramètres de mémoire par défaut recommandés).\n\nModifiez simplement les ports et reconstruisez
J’ai configuré une entrée DNS pour que discourse.mydomain.com pointe vers l’adresse IP du serveur = OK.
L’ouverture d’un navigateur sur discourse.mydomain.com m’amène à… l’instance Nextcloud fonctionnant sur le serveur. Il semble que la configuration doive être corrigée, car le trafic n’est pas correctement acheminé vers le conteneur discourse…
Je ne veux pas installer NPM car j’ai lu que ce n’est pas un outil robuste et que la configuration pour discourse implique un codage en dur des adresses IP : dois-je le faire quand même ?