Ces instructions doivent être considérées comme bêta et pour ceux qui connaissent une configuration standard
Mais pour l’instant (2023.02.11) ces instructions ne fonctionnent pas !! (Voir Set up Let’s Encrypt with multiple domains / redirects pour savoir comment mettre à jour le paramètre letsencrypt pour ajouter la partie fullpath. Je mettrai à jour ceci pour refléter ces changements Très Bientôt.)
J’ai développé ce tutoriel il y a quelques semaines mais j’ai besoin que quelqu’un le teste et voie si cela fonctionne pour quelqu’un d’autre. Veuillez répondre si vous essayez et faites-moi savoir si cela fonctionne et si quelque chose n’est pas clair.
Et maintenant, le spectacle. . .
Ce tutoriel documente largement comment configurer une installation multisite avec 2 hôtes supplémentaires (3 au total).
Mot de passe de la base de données (identique à DISCOURSE_DB_PASSWORD) ou discourse dans app.yml
Par souci de simplicité, ceci est pour un site principal appelé =domain=, avec deux sites supplémentaires =two=.=domain= et =three=.=domain=. Vous pouvez utiliser les noms que vous souhaitez, mais pour les besoins de ce modèle, ne pas avoir un nom court (pour le nom de la base de données et le titre du sous-forum) et un nom d'hôte complet différents est un peu plus facile.
ajouter dans hooks après les plugins dans app.yml ou web_only.yml
before_bundle_exec:
- file:
path: $home/config/multisite.yml
contents: |
=two=:
adapter: postgresql
database: =two=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =two=.=domain=
=three=:
adapter: postgresql
database: =three=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =three=.=domain=
after_db_migrate:
- exec: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate
after_ssl:
# dire à letsencrypt quels certificats supplémentaires obtenir
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /-d =domain= /
to: "-d =domain= -d =two=.=domain= -d =three=.=domain="
global: true
# ne pas rediriger tous les hôtes vers le nom de domaine principal
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /if \\(\\$http_host[^\\}]*\\}/m
to: ""
Ajouter à la section after_postgres dans app.yml ou data.yml
- exec: sudo -u postgres createdb =two= || exit 0
- exec:
stdin: |
grant all privileges on database =two= to discourse;
cmd: sudo -u postgres psql =two=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists pg_trgm;"'
- exec: sudo -u postgres createdb =three= || exit 0
- exec:
stdin: |
grant all privileges on database =three= to discourse;
cmd: sudo -u postgres psql =three=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists pg_trgm;"'
Après cela,
./launcher rebuild app
ou
./launcher rebuild data
./launcher rebuild web_only
Je viens de l’essayer, et même à deux reprises, car je n’arrivais pas à croire que cela ait fonctionné du premier coup sans aucun problème Tout ce que j’ai fait, c’est copier, ajuster les domaines et le mot de passe, puis coller dans les fichiers correspondants d’une installation fraîche avec deux conteneurs.
N’hésitez pas à me faire un retour si quelque chose n’est pas clair. J’ai seulement dû réfléchir un peu à ce paragraphe :
Cela semble indiquer qu’une configuration à deux conteneurs est nécessaire pour suivre le guide, alors que ce n’est pas le cas. Et je ne comprenais pas pourquoi le lien pointe vers le message 48 du sujet plutôt que vers le message initial.
Merci ! Je vais jeter un coup d’œil. Ces deux éléments semblent être du genre de négligences que j’espérais que vous me signaleriez !
EDIT : Merci ! J’avais négligemment copié ma position actuelle dans le sujet à 2 conteneurs, j’ai donc corrigé cela et modifié la formulation pour indiquer que cela fonctionnera avec n’importe quelle installation fonctionnelle.
Bonjour,
J’ai commencé par une installation standard de Discourse (chez DigitalOcean), puis j’ai configuré nginx (en suivant ces instructions) car je souhaitais héberger quelques sites Drupal sur le même droplet.
Si je veux installer une autre instance de Discourse, dois-je suivre la procédure ci-dessus ?
Ces instructions s’appliquent à l’utilisation sans proxy inverse. Je vous recommande de suivre la configuration multisite avec Docker. Les instructions auxquelles vous avez peut-être fait référence pourraient fonctionner, mais je vous recommande de d’abord suivre ce qui est décrit ici.
Merci ; je remarque qu’avec cette solution, les deux sites utiliseraient la même configuration SMTP
Y a-t-il un moyen de contourner cela ?
Ou le autre guide serait-il préférable (il semble qu’il faille un peu de travail pour mettre le site existant sur le réseau Docker) ?
Sinon, est-il possible d’installer une autre base de code, par exemple /var/discourse2 ?
(Cela me coûtera environ 500 Mo, mais cela vaut le coup si cela m’évite de me casser la tête.)
Oui, mais vous devez simplement créer une installation à deux conteneurs, puis disposer d’un fichier web_only2.yml. (Je pense que vous pouvez avoir deux fichiers de style app.yml, mais cela entraînerait l’exécution inutile de deux instances PostgreSQL). Je pense cependant que vous aurez besoin de deux instances Redis.
Merci ; comme je ne suis pas très familier avec la séparation des données et du conteneur web, j’ai simplement créé un autre conteneur autonome en suivant ces directives (et les certificats générés par certbot semblent fonctionner). Cependant, il semble y avoir actuellement un problème avec la configuration de Mailgun : les e-mails d’activation sont envoyés vers Gmail, mais tout ce qui est hébergé par mon registraire (DreamHost) échoue
Quelle charge supplémentaire un instance Postgres supplémentaire entraînerait-elle ?
J’ai lu votre publication sur la séparation et je l’essaierai si les économies sont significatives.
Récemment, j’ai essayé de suivre ce guide, mais je rencontre quelques difficultés :
Je n’arrive pas à trouver le mot de passe de la base de données (ni même à quoi il sert dans le fichier).
Mon fichier app.yml ne contenait pas à l’origine une section after_postgres, alors je l’ai ajoutée sous hooks pour qu’elle corresponde aux autres (after_ssl, after_db_migrate, etc.). Si elle est placée au mauvais endroit, merci de me le faire savoir ; je suis tout nouveau dans ce domaine.
Lorsque je vérifie la syntaxe du fichier YAML sur http://www.yamllint.com/, j’obtiens l’erreur (\u003cunknown\u003e): did not find expected key while parsing a block mapping à la ligne où j’ai inséré la section after_postgres sous la section hooks.
Si vous pouviez clarifier les étapes pour modifier le fichier app.yml, je vous en serais très reconnaissant.
Je pense à mettre cela en place, car mon ami et moi voulons tester quelques forums différents avant de décider si nous voulons investir davantage dans ceux-ci, en ayant éventuellement un hébergement séparé et ainsi de suite.
Je pensais les avoir sur des domaines différents, je comprends que cela puisse apporter une petite confusion car les gens recevront les e-mails de la seule adresse SMTP principale, cependant, savez-vous si des domaines séparés créeraient d’autres problèmes?
Discourse a un seul domaine pour tous ses clients professionnels et standard. Vous pouvez définir l’adresse e-mail de notification comme vous le souhaitez, par exemple shortname@whatevermail.com.
Malheureusement, j’ai un problème pour exécuter plusieurs instances de Discourse sur un seul serveur/IP.
J’ai d’abord suivi la documentation pour configurer un site autonome et cela a réussi.
(par exemple, test.john.com - un sous-domaine redirigeant vers l’IP unique)
Maintenant, lorsque j’ai essayé d’ajouter d’autres instances de Discourse (par exemple, test.joe.com et test.doe.com - d’autres sous-domaines d’autres sites).
J’ai essayé de suivre vos étapes, mais cela n’a pas abouti et maintenant je suis perdu.
Quelques questions :
Comment ces deux autres sites seront-ils installés ? Comme copier le /standalone.yml dans le répertoire containers et le renommer ? Et ensuite faire l’installation habituelle ? (par exemple, ./launcher rebuild joe)
Votre instruction indique que les modifications doivent être apportées dans le fichier app.yml, en ajoutant tout le code ci-dessus - ce qui, je suppose, sera ajouté dans le fichier du premier site installé avec succès (test.john.com) ?
Outre ceux du répertoire container, j’ai créé un fichier config/multisite.yml et voici à quoi ressemble mon code :
secondsite:
adapter: postgresql
database: b_discourse
username: postgres
password: postgres
host: dbhost
pool: 5
timeout: 5000
host_names:
- test.joe.com
...
...
# et la configuration du troisième site
Je ne suis cependant pas sûr s’il y a d’autres éléments que je dois configurer.
Non. Vous ajoutez les éléments à app.yml comme décrit. Cela créera mutlisite.yml à l’intérieur du conteneur. Il y aura une seule instance et cela fonctionnera pour tous les domaines, étant donné que le DNS de tous les domaines y pointe. Ceci n’est pas destiné à avoir plusieurs conteneurs Discourse, un pour chaque nom de domaine.
D’après mes dernières vérifications, ces instructions fonctionnaient telles qu’elles étaient écrites. Ajoutez simplement les lignes à votre app.yml et cela devrait fonctionner. Vous n’avez pas besoin de toucher à d’autres fichiers.
En ce qui concerne la partie migration, toutes les combinaisons ont toujours échoué… >> bundle exec rake multisite:migrate
********************** dernière partie du processus**************************
2023-02-11 17:50:43.853 UTC [61] LOG: arrêt en cours
162:M 11 Fév 2023 17:50:43.866 # Arrêt demandé par l'utilisateur...
162:M 11 Fév 2023 17:50:43.866 * Sauvegarde du dernier instantané RDB avant la sortie.
162:M 11 Fév 2023 17:50:43.881 * DB sauvegardée sur disque
162:M 11 Fév 2023 17:50:43.882 # Redis est maintenant prêt à quitter, au revoir...
2023-02-11 17:50:44.007 UTC [57] LOG: le système de base de données est arrêté
ÉCHEC
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate a échoué avec le retour #<Process::Status: pid 582 exit 1>
Emplacement de l'échec : /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec a échoué avec les paramètres "cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate"
bootstrap a échoué avec le code de sortie 1
** ÉCHEC DU BOOTSTRAP ** veuillez faire défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plus d'un.
./discourse-doctor peut aider à diagnostiquer le problème.
J’ai vérifié ce qui a été créé et ce qui n’a pas été créé jusqu’à l’échec.
Les bases de données des sous-domaines sont créées mais la migration a échoué. Les configurations nginx des sous-domaines ou multisite.yml n’ont pas pu être créées lorsque j’ai vérifié les dossiers overlay2 ou n’importe où.
./launcher bootstrap,destroy,start,stop,rebuild ou nouvelle configuration de nombreuses fois… J’ai essayé toutes les commandes mais rien ne s’est passé…
Ce tutoriel est-il toujours valide pour v3.1.0.beta 2 ou qu’est-ce que je pourrais manquer ?
Une idée, s’il vous plaît ?
Non. Quelque chose concernant Let’s Encrypt a changé à un moment donné. Je vais vous demander d’examiner de plus près tout ce qui doit être modifié dans le conteneur pour gérer plusieurs domaines.
J’utilise cette méthode et elle fonctionne bien. Je n’ai pas https activé actuellement, donc je ne peux pas commenter les difficultés de Let’s Encrypt.
J’utilise cette configuration depuis des années avec mes serveurs de staging. Cependant, depuis la mise à jour vers la version 3.5.0.beta5-dev, je suis maintenant redirigé vers le site principal chaque fois que j’entre un sous-domaine.
J’étais tellement heureux de ne pas avoir à me plonger dans tout ce qui concerne les certifications. Mais maintenant, je suis assez perdu, existe-t-il des outils pour déboguer ce qui se passe ?