Déclaration officielle de Discourse concernant la configuration en sous-dossier
Nous proposons des configurations en sous-dossier pour nos clients hébergés à partir du niveau entreprise. En raison de la grande complexité technique de cette mise en place, nous vous recommandons vivement de ne pas utiliser cette configuration à moins d’être très expérimenté dans les configurations en sous-dossier personnalisées.
Il est essentiel d’avoir une compréhension approfondie des éléments suivants :
- Configuration de NGINX dans le conteneur Docker de Discourse
- Transfert sécurisé des adresses IP originales à l’aide d’en-têtes personnalisés dans la chaîne de proxy
- Limitation de débit (rate limiting) sur le serveur proxy frontal
Si tout cela vous semble étrange et incompréhensible, nous vous recommandons vivement d’éviter cette configuration.
Pour servir Discourse depuis un sous-dossier (alias avec un préfixe de chemin) sur votre domaine, comme https://www.example.com/=SUBFOLDER=, voici comment procéder !
Configuration Docker
Dans la section env de votre fichier yml de conteneur Docker, ajoutez le paramètre DISCOURSE_RELATIVE_URL_ROOT avec le sous-dossier que vous souhaitez utiliser. Assurez-vous qu’il ne se termine pas par un /.
La modification de cette valeur mettra à jour l’ensemble du guide.
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
La section run nécessite quelques modifications pour rediriger tous les itinéraires Discourse vers l’endroit approprié. Voici une section run complète avec prise en charge des sous-dossiers :
run:
- exec:
cd: $home
cmd:
- mkdir -p public/=SUBFOLDER=
- cd public/=SUBFOLDER= && ln -s ../uploads && ln -s ../backups
- replace:
global: true
filename: /etc/nginx/conf.d/discourse.conf
from: proxy_pass http://discourse;
to: |
rewrite ^/(.*)$ /=SUBFOLDER=/$1 break;
proxy_pass http://discourse;
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: etag off;
to: |
etag off;
location /=SUBFOLDER= {
rewrite ^/=SUBFOLDER=/?(.*)$ /$1;
}
- file:
path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-webroot.conf
chmod: 644
contents: |
set_real_ip_from 123.456.789.ABC; # l'adresse IP de votre proxy en amont
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
chmod: 644
contents: |
real_ip_header x-forwarded-for;
Pour plus de détails sur la préservation de l’adresse IP de l’utilisateur final, consultez Handling the "chain of trust" of the end user's real IP.
Après avoir apporté ces modifications, initialisez votre conteneur Docker comme d’habitude, ou reconstruisez-le si vous modifiez un conteneur existant.
./launcher bootstrap app
ou
./launcher rebuild app
Ci-joint, un exemple complet de fichier yml pour un conteneur autonome :
subfolder-sample.yml (3,1 Ko)
Préoccupations liées à la limitation de débit
Si vous optez pour cette configuration, vous voudrez probablement limiter le débit des requêtes avant qu’elles n’atteignent NGINX dans le conteneur, ce qui signifie que vous éviterez probablement d’utiliser notre modèle de limitation de débit. Il est très difficile de configurer NGINX dans le conteneur pour limiter sur une IP remappée, et cela nécessiterait des modifications complexes du modèle.
Messages existants
Si vous avez effectué cette opération sur un site existant qui se trouvait sur un sous-domaine, vous constaterez que vos téléchargements sont cassés. Un outil peut aider à corriger tous les chemins d’accès pour inclure le sous-dossier. Entrez d’abord dans le conteneur Docker et naviguez vers le répertoire Discourse :
cd /var/discourse
./launcher enter app
cd /var/www/discourse
Exécutez ensuite la commande de remappage après avoir effectué une sauvegarde :
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
Voir également : Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain pour des configurations plus exotiques.
robots.txt
Maintenant que Discourse fonctionne sur un sous-dossier, il ne peut plus servir son fichier robots.txt pour contrôler quelles routes sont explorées par les robots d’indexation. Les robots consulteront le fichier robots.txt de votre site principal (https://www.example.com/robots.txt). Vous devez copier le contenu du fichier robots.txt de Discourse (trouvé à https://www.example.com/=SUBFOLDER=/robots.txt) et l’ajouter dans le fichier robots.txt de votre site principal.