Dans ce post, je vais vous montrer exactement comment exécuter Discourse derrière un proxy inverse Nginx. Tout en utilisant toujours les méthodes d’installation prises en charge.
Exigences :
- Nom de domaine valide.
- Certificat SSL valide.
- Entrées DNS valides pointant vers le nom de domaine.
- Serveur d’e-mails valide et fonctionnel ou fournisseur SMTP.
- Proxy inverse Nginx fonctionnel et capacité à atteindre l’instance et à créer le certificat SSL pour une utilisation ultérieure.
- VM ou conteneur LxC capable d’exécuter Docker.
Pour ce guide, j’utiliserai ma propre instance comme exemple, avec toutes les fonctionnalités opérationnelles, les sauvegardes, les mises à niveau, etc. Testé pendant environ 2 semaines.
Mes spécifications de VM Discourse :
- CPU : 4 cœurs
- RAM : 6 Go
- Swap : 8 Go (swapfile SSD)
- Stockage : 50 Go (SSD)
- OS : Ubuntu 22.04.3
Vous pouvez utiliser le minimum, mais lors des tests. Discourse utilise facilement 2 Go. L’utilisation inactive est d’environ 1,48 Go sur 6 Go.
NOTE : Cette installation utilise le proxy inverse pour créer les certificats SSL. Certbot peut être utilisé si vous préférez.
ÉTAPE 1 :
Téléchargez la dernière version du serveur Ubuntu depuis Get Ubuntu Server | Download | Ubuntu
ÉTAPE 2 :
- Installez Ubuntu Server sur le modèle VM/LxC
1.1 Assurez-vous qu’Ubuntu est à jour avec tous les packages serveur. - Utilisez les commandes suivantes pour installer tous les packages requis :
apt update -y && apt upgrade -y && apt wget curl zip git docker.io nginx -y && reboot
ÉTAPE 3 :
Installation de Discourse. Suivez le Guide du débutant discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub
Connectez-vous à votre serveur via SSH et entrez simplement ceci :
sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers
Après avoir terminé ce qui précède. Vous pouvez ensuite exécuter ./discourse-setup
Suivez toutes les étapes et entrez-les correctement, car cela sera essentiel pour une installation réussie.
Les étapes demanderont ce qui suit ; exemple du guide de configuration :
Laissez l’installation se dérouler, cela peut prendre un certain temps en fonction de votre connexion Internet et des spécifications du serveur. L’installation complète a pris environ 5 à 8 minutes en utilisant ma configuration VM.
ÉTAPE 4 :
Une fois l’installation terminée, vous verrez la commande de démarrage que le conteneur Docker utilise et l’ID du conteneur généré (hash).
NOTE : Puisque vous êtes derrière un proxy via le WAN, vous verrez une erreur 502 et comme le conteneur utilise le réseau Docker. Il sera inaccessible depuis le WAN ou le LAN, à moins que vous ne vous connectiez au réseau 172.17.0.1/16, dont nous n’aurons pas besoin.
Vérifiez que l’installation est terminée et que le conteneur Docker est en cours d’exécution en utilisant :
docker ps
Vous devriez obtenir le résultat suivant.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
XXXXXX local_discourse/app “/sbin/boot” 6 days ago Up 7 hours app
ÉTAPE 5 :
Mise à jour du fichier app.yml pour s’adapter à la configuration du proxy inverse.
Utilisez votre éditeur de texte préféré pour ouvrir /var/discourse/container/app.yml
Remplacez/Commentez les lignes suivantes : (cela sera géré par le Nginx local)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
Immédiatement après #- "templates/web.letsencrypt.ssl.template.yml", ajoutez ce qui suit :
- "templates/web.socketed.template.yml"
Commentez ensuite la section expose car Discourse utilisera désormais un websocket, Nginx pourra alors démarrer car il libérera les ports 80 et 443 requis localement.
#expose:
# - "80:80" # http
# - "443:443" # https
Maintenant, pour forcer Discourse à ne fournir que des liens avec HTTPS, ajoutez ce qui suit dans la section env :
# FORCE SSL
DISCOURSE_FORCE_HTTPS: true
Maintenant, pour enfin lancer les choses, vous devrez reconstruire l’application. En utilisant ce qui suit :
cd /var/discourse
./launcher rebuild app
Laissez cela s’exécuter et se terminer. Pour vérifier si cela a réussi, assurez-vous que la commande de démarrage Docker est affichée ou exécutez simplement docker ps et vous verrez le conteneur en cours d’exécution.
ÉTAPE 6 :
Activation de Nginx et configuration du site par défaut pour pointer vers le conteneur Docker. Permettant au proxy inverse d’accéder au conteneur en utilisant le Nginx local.
Exécutez ce qui suit :
systemctl enable nginx && systemctl start nginx
Pour vérifier s’il est en cours d’exécution. Essayez d’accéder à la page d’accueil par défaut de Nginx en utilisant votre navigateur et votre IP locale.
PAR EXEMPLE :
http://10.10.0.4
Vous devriez obtenir une page de félicitations de Nginx.
ÉTAPE 7 :
Mise à jour de la configuration par défaut comme suit :
Videz d’abord le fichier de configuration :
echo "" > /etc/nginx/sites-available/default
Utilisez votre éditeur de texte pour ouvrir le fichier de configuration et ajoutez ce qui suit :
NOTE : Mettez à jour server_name avec votre domaine et ssl_certificate, ssl_certificate_key avec l’emplacement de votre certificat SSL et de votre clé.
Certbot peut être utilisé, mais je synchronise simplement mon certificat et ma clé depuis mon proxy inverse.
server {
listen 80; listen [::]:80;
server_name add.yourdomain.com;
server_tokens off;
return 301 https://$host$request_uri;
}
# Default server configuration
#
server {
# SSL configuration
#
server_tokens off;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name add.yourdomain.com;
ssl_certificate /etc/ssl/certs/your_ssl_cert.bundle;
ssl_certificate_key /etc/ssl/private/your_ssl_cert.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
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;
}
}
Enregistrez le nouveau fichier par défaut et exécutez systemctl restart nginx.
ÉTAPE 8 :
Ouvrez votre navigateur et accédez au domaine de votre forum https://mondomaine.com et vous serez accueilli par la page suivante.
C’est tout, c’est terminé. Vous pouvez ensuite suivre les étapes pour vous enregistrer et lancer votre forum/communauté :).
ÉTAPE SUPPLÉMENTAIRE :
Maintenance post-installation
Nous vous suggérons fortement d’activer les mises à jour de sécurité automatiques pour votre système d’exploitation. Sous Ubuntu, utilisezdpkg-reconfigure -plow unattended-upgrades
Pour obtenir de l’aide, vous pouvez simplement utiliser cette communauté, pour le Nginx local, n’hésitez pas à demander de l’aide sur ce post.
