Offizielle Discourse-Erklärung zur Subfolder-Einrichtung
Wir unterstützen Subfolder-Setups für unsere gehosteten Kunden auf Enterprise-Niveau und höher. Aufgrund der hohen technischen Komplexität der Einrichtung empfehlen wir Ihnen dringend, dieses Setup nicht zu verwenden, es sei denn, Sie sind sehr erfahren mit benutzerdefinierten Subfolder-Setups.
Es ist entscheidend, dass Sie ein tiefes Verständnis haben für
- NGINX-Setup im Discourse Docker-Container
- Sichere Weiterleitung der ursprünglichen IP-Adresse mithilfe von benutzerdefinierten Headern in der Proxy-Kette
- Ratenbegrenzung im Front-Proxy-Server
Wenn Ihnen das alles seltsam und fremd vorkommt, raten wir dringend davon ab, dieses Setup zu verwenden.
Um Discourse von einem Subfolder (auch als Pfadpräfix bekannt) Ihrer Domain aus bereitzustellen, wie z. B. https://www.example.com/=SUBFOLDER=, gehen Sie wie folgt vor!
Docker-Konfiguration
Fügen Sie im Abschnitt env Ihrer Docker-Container-yml-Datei die Einstellung DISCOURSE_RELATIVE_URL_ROOT mit dem gewünschten Subfolder hinzu. Stellen Sie sicher, dass dieser nicht mit einem / endet.
Die Bearbeitung aktualisiert den gesamten Leitfaden.
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
Der Abschnitt run erfordert einige Änderungen, um alle Discourse-Routen an die richtige Stelle weiterzuleiten. Hier ist ein vollständiger run-Abschnitt mit Subfolder-Unterstützung:
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 steht für Your-Original-Ip-Header, ein vertrauenswürdiger Header, den Sie am Ursprung festlegen und der die tatsächliche Client-IP enthält.
Dies ist erforderlich, da der Datenverkehr einen zentralen Proxy durchläuft. Wenn Discourse eine öffentliche IP-Adresse hat, können Sie diese fälschen. Wenn Discourse privat ist, kommen Sie möglicherweise mit X-Forwarded-For davon.
Nachdem Sie diese Änderungen vorgenommen haben, bootstrappen Sie Ihren Docker-Container wie gewohnt oder bauen ihn neu, falls Sie einen bestehenden Container ändern.
./launcher bootstrap app
oder
./launcher rebuild app
Im Anhang finden Sie ein vollständiges Beispiel einer yml-Datei für einen eigenständigen Container.
subfolder-sample.yml (3.1 KB)
Bedenken hinsichtlich der Ratenbegrenzung
Wenn Sie dieses Setup wählen, möchten Sie wahrscheinlich Anfragen begrenzen, bevor sie NGINX im Container erreichen. Das bedeutet, dass Sie wahrscheinlich die Verwendung unserer Vorlage zur Ratenbegrenzung vermeiden werden. Es ist sehr schwierig, NGINX im Container so zu konfigurieren, dass es auf einer umgeleiteten IP begrenzt wird, und dies würde komplexe Änderungen an der Vorlage erfordern.
Bestehende Beiträge
Wenn Sie dies mit einer bestehenden Website getan haben, die sich auf einer Subdomain befand, werden Sie feststellen, dass Ihre Uploads fehlerhaft sind. Es gibt ein Tool, das helfen kann, alle Pfade so zu korrigieren, dass sie den Subfolder enthalten. Greifen Sie zunächst auf den Docker-Container zu und navigieren Sie zum Discourse-Verzeichnis:
cd /var/discourse
./launcher enter app
cd /var/www/discourse
Führen Sie dann den remap-Befehl aus, nachdem Sie ein Backup erstellt haben:
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
Siehe auch: Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain für exotischere Setups.
robots.txt
Nachdem Discourse nun in einem Subfolder läuft, kann es seine robots.txt-Datei nicht mehr bereitstellen, um zu steuern, welche Routen von Webcrawlern gecrawlt werden sollen. Crawler suchen nach der robots.txt-Datei Ihrer Hauptseite (https://www.example.com/robots.txt). Sie müssen den Inhalt der robots.txt-Datei von Discourse (zu finden unter https://www.example.com/=SUBFOLDER=/robots.txt) kopieren und in die robots.txt-Datei Ihrer Hauptseite einfügen.