Déclaration officielle de Discourse concernant la configuration en sous-dossier
Nous prenons en charge les configurations en sous-dossier pour nos clients d’entreprise et supérieurs. En raison de la complexité technique élevée de la configuration, nous vous recommandons fortement de ne pas utiliser cette configuration, sauf si vous êtes très expérimenté dans les configurations personnalisées en sous-dossier.
Il est essentiel que vous ayez une compréhension approfondie de
- Configuration NGINX dans le conteneur Docker de Discourse
- Transfert de l’IP d’origine sécurisé à l’aide d’en-têtes personnalisés dans la chaîne de proxy
- Limitation de débit dans le serveur proxy frontal
Si tout cela vous semble étrange et inhabituel, nous vous recommandons fortement d’éviter cette configuration.
Pour servir Discourse à partir d’un sous-dossier (aussi appelé 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 /.
Modifier ceci mettra à jour l’ensemble du guide.
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
La section run nécessite quelques modifications pour envoyer toutes les routes Discourse au bon endroit. Voici une section run complète avec la 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;
}
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: $proxy_add_x_forwarded_for
to: $http_your_original_ip_header
global: true
$http_your_original_ip_header représente Your-Original-Ip-Header, qui est un en-tête de confiance que vous définissez sur l’origine et qui contient l’IP réelle du client.
Ceci est requis car le trafic passe par un proxy central ; si Discourse a une adresse IP publique, vous pouvez l’usurper. Si Discourse est privé, vous pourriez vous en sortir avec X-Forwarded-For.
Après avoir effectué ces modifications, amorcez 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 KB)
Problèmes de 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.
Publications existantes
Si vous avez fait cela avec un site existant qui était sur un sous-domaine, vous constaterez que vos téléchargements sont cassés. Il existe un outil qui peut aider à corriger tous les chemins 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
Ensuite, exécutez la commande de remappage après avoir effectué une sauvegarde :
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
Voir aussi : Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain pour des configurations plus ésotériques.
robots.txt
Maintenant que Discourse s’exécute dans un sous-dossier, il ne peut pas servir son fichier robots.txt pour contrôler quelles routes sont explorées par les robots d’exploration. Les robots d’exploration rechercheront 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é à l’adresse https://www.example.com/=SUBFOLDER=/robots.txt) et le placer dans le fichier robots.txt de votre site principal.