Si vous souhaitez héberger d’autres sites web sur la même machine que Discourse, vous devez configurer un proxy NGINX ou HAProxy supplémentaire devant le conteneur Docker.
REMARQUE : Ceci est destiné aux administrateurs avancés
Ce guide part du principe que Discourse fonctionne déjà — si ce n’est pas le cas, il sera difficile de savoir si la configuration fonctionne ou non.
Vous ne pouvez pas utiliser ./discourse-setup pour installer Discourse si un autre serveur utilise les ports 80 ou 443. Vous devrez copier et modifier samples/standalone.yml avec votre éditeur de texte préféré.
Installer nginx en dehors du conteneur
Tout d’abord, assurez-vous que le conteneur n’est pas en cours d’exécution :
cd /var/discourse
./launcher stop app
Ensuite, installez nginx et certbot :
sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx
Modifier la définition du conteneur
C’est ici que nous modifions la manière dont Discourse est configuré. Nous ne voulons pas que le conteneur écoute sur des ports — à la place, nous lui dirons d’écouter sur un fichier spécial.
Vous devez éditer /var/discourse/containers/app.yml pour désactiver SSL et ajouter un modèle pour créer le socket nginx. Il devrait ressembler à ceci :
# modèles de base utilisés ; on peut réduire pour inclure moins de fonctionnalités par conteneur :
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # à supprimer — https sera géré par le nginx externe
# - "templates/web.letsencrypt.ssl.template.yml" # à supprimer — https sera géré par le nginx externe
- "templates/web.socketed.template.yml" # <-- Ajouté
Assurez-vous de supprimer ou de commenter les ports exposés en mettant un # devant.
# quels ports exposer ?
# expose : commenter toute la section en mettant un # devant chaque ligne
# - "80:80" # http
# - "443:443" # https
Vous pouvez maintenant lancer :
/var/discourse/launcher rebuild app
pour reconstruire Discourse et rendre ses données disponibles via le socket.
Si vous utilisez un autre proxy inverse qui ne peut pas utiliser un websocket, vous pouvez à la place exposer un port différent dans la section ci-dessus, comme - 8080:80.
Créer un « site » NGINX pour le nginx externe
Créez un fichier de site pour Discourse :
cd /etc/nginx/sites-available
cp default discourse.example.com
cd ../sites-enabled
ln -s ../sites-available/discourse.example.com
Modifiez ensuite ce fichier en commentant ces lignes :
#listen 80 default_server;
#listen [::]:80 default_server;
et en modifiant les directives server_name et location comme suit :
server_name discourse.example.com; # <-- à modifier
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
Si vous utilisez une installation à deux conteneurs, la ligne socket sera :
proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;
Ensuite, dans un terminal :
certbot --nginx
Et suivez les instructions. Si vous ne comprenez pas les invites, vous ne devriez probablement pas faire cela, mais vous pouvez consulter la documentation de certbot pour obtenir de l’aide.
@pfaffman pense que certbot fera cela pour vous, mais si vous apportez des modifications à la configuration nginx, vous devrez exécuter :
sudo service nginx reload
Créer vos autres sites
Vous avez terminé la section Discourse !
Créez d’autres « sites » NGINX, puis liez-les et activez-les, comme dans la dernière étape ci-dessus.
Conseils
sudo netstat -tulpn: Cela vous indiquera quels ports sont utilisés/var/log/nginx/error.log: C’est l’emplacement du journal nginx sur Ubuntu. Cela vous indiquera quelle est l’erreur lorsque vous obtenez une erreur 502 Bad Gateway.