@pfaffman a lourdement édité ceci le 24.02.2022. Blâmez-moi si quelque chose ne fonctionne pas.
Si vous souhaitez exécuter 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.
NOTE : Ceci est destiné aux administrateurs avancés
Ce guide suppose que vous avez déjà configuré Discourse - si ce n’est pas le cas, il peut être difficile de savoir si la configuration fonctionne ou non.
Vous ne pouvez pas utiliser ./discourse-setup pour configurer 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 à l’extérieur 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 réellement configuré. Nous ne voulons pas que le conteneur écoute sur des ports - au lieu de cela, nous allons lui dire d’écouter sur un fichier spécial.
Vous devez modifier /var/discourse/containers/app.yml pour désactiver le ssl et ajouter un modèle pour créer le socket nginx. Il devrait ressembler à ceci :
# modèles de base utilisés ; peut être réduit pour inclure moins de fonctionnalités par modèles de 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 nginx externe
# - "templates/web.letsencrypt.ssl.template.yml" # supprimer -- https sera géré par nginx externe
- "templates/web.socketed.template.yml" # <-- Ajouté
Assurez-vous de supprimer ou de commenter les ports exposés en plaçant un # devant chaque ligne.
# quels ports exposer ?
# expose: commenter la section entière en plaçant un # devant chaque ligne
# - "80:80" # http
# - "443:443" # https
Maintenant, vous pouvez
/var/discourse/launcher rebuild app
pour reconstruire Discourse afin de rendre ses données accessibles au socket.
Si vous utilisez un autre proxy inverse qui ne peut pas utiliser de socket web, vous pouvez exposer un port différent dans la section ci-dessus, par exemple - 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
Ensuite, modifiez ce fichier en commentant ces lignes :
#listen 80 default_server;
#listen [::]:80 default_server;
et en modifiant la stanza server_name et location comme ceci :
server_name discourse.example.com; # <-- changez ceci
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 $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
Si vous utilisez une installation à deux conteneurs, la ligne du socket sera :
proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;
Ensuite, dans un shell :
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 certbot pour obtenir de l’aide.
@pfaffman pense que certbot fera cela pour vous, mais si vous modifiez la configuration nginx, vous devrez
sudo service nginx reload
Créez vos autres sites
Vous avez terminé avec la section Discourse !
Créez d’autres “sites” NGINX, puis liez-les et activez-les, comme à l’étape précédente.
Conseils
sudo netstat -tulpn: Ceci vous indiquera quels ports sont utilisés/var/log/nginx/error.log: Est l’emplacement du journal nginx sur ubuntu. Il vous indiquera quelle est l’erreur lorsque vous obtenez une erreur 502 Bad Gateway.
