Diese Anleitung ist wahrscheinlich veraltet, da es inzwischen nur noch sehr wenige Gründe gibt, das integrierte Let’s Encrypt-Zertifikat nicht zu verwenden, das einfach funktioniert. Siehe auch:
2023-04-10 @pfaffman sagt: Dies wird hier hauptsächlich aus historischen Gründen belassen.
Sie möchten also SSL für Ihr Docker-basiertes Discourse-Setup aktivieren? Legen wir los!
Diese Anleitung geht davon aus, dass Sie alle Standard-Installationsoptionen verwendet haben – eine Container-Konfigurationsdatei unter /var/discourse/containers/app.yml und Discourse docker ist installiert unter: /var/discourse
Kaufen Sie ein SSL-Zertifikat
Gehen Sie zu namecheap oder einem anderen Anbieter für SSL-Zertifikate und kaufen Sie ein SSL-Zertifikat für Ihre Domain. Befolgen Sie alle von ihnen dokumentierten Schritte, um den privaten Schlüssel und die CSR zu erstellen und schließlich Ihr Zertifikat zu erhalten. Ich habe die Apache-Standardeinstellungen verwendet, diese funktionieren einwandfrei.
Bewahren Sie Ihren privaten Schlüssel und Ihr Zertifikat an einem sicheren Ort auf.
Platzieren Sie das Zertifikat und den Schlüssel
Besorgen Sie sich ein signiertes Zertifikat und einen Schlüssel und platzieren Sie diese im Ordner /var/discourse/shared/standalone/ssl/
Der private Schlüssel ist:
/var/discourse/shared/standalone/ssl/ssl.key
Das Zertifikat ist
/var/discourse/shared/standalone/ssl/ssl.crt
Die Dateinamen sind entscheidend. Halten Sie sich daran, sonst weiß Ihre Nginx-Vorlage nicht, wo sie das Zertifikat finden soll.
Werfen Sie einen Blick auf Ihre app.yml-Konfigurationsdatei, um zu sehen, wo der freigegebene Ordner eingebunden ist.
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
Im Wesentlichen müssen sich die Dateien im Container unter /shared/ssl/ssl.key und /shared/ssl/ssl.crt befinden.
Damit alle Clients einen Pfad von Ihrem Zertifikat zu einem vertrauenswürdigen Stammzertifikat finden (d. h. damit Ihre Benutzer keine Warnungen erhalten), müssen Sie die Zertifikatsdateien Ihres Anbieters möglicherweise wie folgt verketten:
cat "Your PositiveSSL Certificate" "Intermediate CA Certificate" "Intermediate CA Certificate" >> ssl.crt
NGINX konfigurieren
Fügen Sie in Ihrer app.yml-Konfigurationsdatei einen Verweis auf die Nginx-SSL-Vorlage hinzu:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
- "templates/web.ssl.template.yml"
Ihren Docker-Container konfigurieren
Weisen Sie Ihren Container an, auf SSL zu hören
expose:
- "80:80"
- "443:443"
Ihren Docker-Container initialisieren
Bauen Sie Ihre App neu
./launcher rebuild app
Profitieren Sie, Sie sind fertig!
Fehlerbehebung
Stellen Sie sicher, dass Sie die Protokolle mit
./launcher logs app
überprüfen, falls etwas schiefgeht.
Wie das funktioniert
Die Vorlage konfiguriert Nginx mit TLSv1.2 und TLSv1.3, starken Cipher-Suites, HSTS-Headern und Sitzungsticket-Einstellungen. Sie verwendet Nginx-Konfigurations-Outlets, um die SSL-Konfiguration einzufügen.
Das Image verfügt über Weiterleitungsregeln, die alle Anfragen an Port 80 auf https://DISCOURSE_HOST_NAME umleiten und auch Anfragen für andere Hostnamen an Port 443 auf den kanonischen Hostnamen umleiten.
Die Anpassung dieses Setups ist sehr einfach, siehe:
Sie können eine Kopie dieser Datei erstellen und die Vorlage nach Bedarf ändern.
Der Vorteil der Verwendung von Vorlagen und Outlets hierbei ist, dass wir den gesamten restlichen, von Discourse empfohlenen NGINX-Setup beibehalten können, der sich im Laufe der Zeit ändert.
Ihre Konfiguration testen
Siehe SSL Server Test (Powered by Qualys SSL Labs), um sicherzustellen, dass alles korrekt funktioniert. Es ist möglich, dass einige Browser- und Betriebssystemkombinationen mit einer teilweise konfigurierten https-Verbindung zufrieden sind. Überprüfen Sie dies daher zuerst hier.