Forum | Gaming-Serv.com

Tutoriel installer Discourse + Nginx Reverse Proxy | Debian 10

Présentation :

Discourse est une plateforme communautaire qui est généralement utiliser en tant que forum.

Les prérequis :

  • Un serveur dédier avec Debian 10 ou un VPS avec Debian 10 (virtualiser en KVM).
  • Un nom de domaine afin que le forum soit accessible via un nom de domaine plutôt qu’une adresse ip.
  • un email provider , car Discourse a besoin d’envoyer des emails pour fonctionner correctement. Il existe des providers gratuits ou des services payants avec une période d’essai qui vous donneront du temps pour estimer votre consommation d’emails (liste d’email providers recommandés).

1 : Mise à jour du serveur

Vous devez vous connecter ssh sur votre serveur puis mettre à jour votre serveur.

apt update && apt upgrade -y

2 : Outils nécessaires

apt install curl git bash apt-transport-https ca-certificates -y

3 : Installation de Discourse

Copie des fichiers d’installation :

On créer le dossier

mkdir /var/discourse

On clone les fichiers d’installation

git clone https://github.com/discourse/discourse_docker.git /var/discourse

On se place dans le dossier d’installation

cd /var/discourse

On lance la commande d’installation

./discourse-setup

Dans un premier temps Docker va s’installer, il suffit de faire « entrée » quand il vous demande si vous voulez installer docker.

Une série de questions vas vous être demander afin de configuré votre forum (ses paramètres seront modifiable ultérieurement si vous avez besoin dans le fichier /var/discourse/containers/app.yml.

  • Hostname for your Discourse? – Entrez l’adresse de votre site, sans le http(s)://.
  • Email address for admin account? – Entre votre adresse email.
  • SMTP server address? – L’adresse smtp de votre email provider. Exemple : smtp.eu.mailgun.org
  • SMTP user name? – L’adresse d’envoi des mails que vous avez créée chez votre email provider. Exemple : [email protected]
  • SMTP port? – Le port du serveur smtp. Généralement 587
  • SMTP password? – Le mot de passe de votre compte d’envoi d’email. En général, vous le créez en même temps que votre SMTP user name chez votre provider.
  • DISCOURSE_NOTIFICATION_EMAIL – L’adresse email configurée pour envoyer les emails (fourni par votre email provider).
  • Lets Encrypt email? – Entrez une adresse email valide pour avoir un certificat SSL gratuit avec Let’s Encrypt.

Une fois ses informations remplis le serveur va installer automatiquement Discourse cela peut prendre plus ou moins de temps suivant les performance de votre serveur :rocket:.

4 : Premier accès

Une fois l’installation terminer votre forum est accessible via votre navigateur, un assistant va alors vous proposer d’affiner la configuration de votre plateforme (langue, nom du site, ajout du compte administrateur, ajout des modérateurs…).

5 : Installation de Nginx + Configuration

Dans un premier temps nous devons arrêter le container Docker

cd /var/discourse
./launcher stop app

puis on install nginx

apt update && apt install nginx

Configuration du container Docker, il faut éditer le fichier /var/discourse/containers/app.yml puis ajouter : - "templates/web.socketed.template.yml"

nano /var/discourse/containers/app.yml
# base templates used; can cut down to include less functionality per container templates:
  # - "templates/cron.template.yml" # cron is now included in base image
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/sshd.template.yml"
  - "templates/web.template.yml"
  # - "templates/web.ssl.template.yml" # remove - https will be handled by outer nginx
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"  # <-- Ajout

Puis on commente les lignes suivantes :

# which ports to expose?
# expose: comment out entire section by putting a # in front of each line
# - "80:80"   # http
# - "443:443" # https

Ensuite nous devons paramétré Nginx

Création du vhost Discourse

nano /etc/nginx/sites-enabled/discourse.conf

Pour HTTPS :

server {
    listen 80; listen [::]:80;
    server_name forum.example.com;  # <-- à replacer

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;  listen [::]:443 ssl http2;
    server_name forum.example.com;  # <-- à replacer

    ssl_certificate      /var/discourse/shared/standalone/ssl/ssl.crt;
    ssl_certificate_key  /var/discourse/shared/standalone/ssl/ssl.key;
    ssl_dhparam          /var/discourse/shared/standalone/ssl/dhparams.pem;
    ssl_session_tickets off;
    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;

    http2_idle_timeout 5m; # up from 3m default

    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 https;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Pour HTTP :

server {
	listen 80; listen [::]:80;
	server_name forum.example.com;  # <-- a remplacer

	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;
	}
}

Démarrage de Discourse avec Nginx

Assurez-vous que Discourse n’est pas en cours d’exécution

/var/discourse/launcher stop app || true

Test de la configuration nginx

sudo nginx -t

Important : Si nginx -t revient avec une erreur, corrigez la configuration avant de recharger !

service nginx reload

Reconstruire le conteneur pour appliquer les changements

/var/discourse/launcher rebuild app

Votre reverse proxy Nginx est maintenant fonctionnel et votre site à nouveau accessible !