SSL / HTTPS für Ihr Discourse Docker Setup erlauben

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.

75 „Gefällt mir“
I need help with SSL
Broken image since https
Troubles installing SSL
NGINX Proxy Mixed Content Error
SSL on Discourse / DO sub-domain of Heroku hosted domain
Force Discourse to use SSL/HTTPS through CloudFlare
How to force redirect from https to http on Docker installation
SSL Let's Encrypt Error After Installation
Cannot connect to IP address and no errors in log
Can i change Lets Encrypt to EssentialSSL / Wildcard SLL
I have a very difficult problem installing ssl - please help
Go Daddy SSL certificate installation error in D.O. server
How Do I Uninstall SSL Certificate?
How to Set Up SSL in Discourse
Site down after enabling SSL
SSL installation
SSL certificate expired and after that - Error 404 Not Found
Skipping built-in SSL certificate?
Unable to renew Let's encrypt certificate
Adding SSL certificate
Getting Cloudflare 521 Error After Upgrade to 3.5.0.beta8-dev
Let's encrypt failing for IP behind firewall
Unable To Connect/Connection Refused due to https certificates
Rebuild goes into a loop
Transfer from bitnami to normal discourse
My site is down with a weird SSL notification
Https with let's encrypt behind a vpn?
Cannot install custom SSL new_file: no such file
Favicon is failing to load for logged-in users
How to install SSL certificate in Discourse
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
How to modify Dockerfile?
DNS validation for Let's Encrypt?
How might we better structure #howto?
Hit Let's encrypt renewal limit
Unable To Connect/Connection Refused due to https certificates
Setting up Discourse with SSL on Docker with AWS ELB breaks and returns 503 Service Unavailable (Back-end server is at capacity)
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
Global setting to hide origin IP from everywhere - is it possible?
Latest update requires cache purge in CloudFlare