@pfaffman hat dies am 2022.02.24 stark bearbeitet. Gebt mir die Schuld, wenn es kaputt ist.
Wenn Sie andere Websites auf demselben Rechner wie Discourse ausführen möchten, müssen Sie einen zusätzlichen NGINX- oder HAProxy-Proxy vor dem Docker-Container einrichten.
HINWEIS: Dies ist für fortgeschrittene Administratoren
Diese Anleitung setzt voraus, dass Discourse bereits funktioniert – wenn dies nicht der Fall ist, kann es schwierig sein festzustellen, ob die Konfiguration funktioniert oder nicht.
Sie können ./discourse-setup nicht verwenden, um Discourse einzurichten, wenn ein anderer Server Port 80 oder 443 verwendet. Sie müssen samples/standalone.yml kopieren und mit Ihrem bevorzugten Texteditor bearbeiten.
Nginx außerhalb des Containers installieren
Stellen Sie zunächst sicher, dass der Container nicht läuft:
cd /var/discourse
./launcher stop app
Installieren Sie dann nginx und certbot:
sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx
Die Container-Definition ändern
Hier ändern wir, wie Discourse tatsächlich eingerichtet wird. Wir möchten nicht, dass der Container auf Ports lauscht – stattdessen weisen wir ihn an, auf einer speziellen Datei zu lauschen.
Sie müssen /var/discourse/containers/app.yml bearbeiten, um SSL zu deaktivieren und die Vorlage zum Erstellen des Nginx-Sockets hinzuzufügen. Es sollte wie folgt aussehen:
# Basisvorlagen verwendet; kann gekürzt werden, um weniger Funktionalität pro Container-Vorlage einzuschließen:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # entfernen – https wird vom äußeren nginx behandelt
# - "templates/web.letsencrypt.ssl.template.yml" # entfernen – https wird vom äußeren nginx behandelt
- "templates/web.socketed.template.yml" # <-- Hinzugefügt
Stellen Sie sicher, dass Sie die freigegebenen Ports entfernen oder auskommentieren, indem Sie eine # vor jede Zeile setzen.
# welche Ports freigeben?
# expose: gesamten Abschnitt durch eine # vor jede Zeile auskommentieren
# - "80:80" # http
# - "443:443" # https
Jetzt können Sie
/var/discourse/launcher rebuild app
ausführen, um Discourse neu zu erstellen und seine Daten für den Socket verfügbar zu machen.
Wenn Sie einen anderen Reverse-Proxy verwenden, der keinen Web-Socket verwenden kann, können Sie stattdessen einen anderen Port im obigen Abschnitt freigeben, z. B. - 8080:80.
Eine NGINX ‘site’ für den äußeren nginx erstellen
Erstellen Sie eine Site-Datei für Discourse:
cd /etc/nginx/sites-available
cp default discourse.example.com
cd ../sites-enabled
ln -s ../sites-available/discourse.example.com
Bearbeiten Sie dann diese Datei, indem Sie diese Zeilen auskommentieren:
#listen 80 default_server;
#listen [::]:80 default_server;
und die server_name- und location-Anweisungen wie folgt bearbeiten:
server_name discourse.example.com; # <-- Dies ändern
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
Wenn Sie eine Zwei-Container-Installation verwenden, lautet die Socket-Zeile:
proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;
Führen Sie dann in einer Shell Folgendes aus:
certbot --nginx
und folgen Sie den Anweisungen. Wenn Sie die Eingabeaufforderungen nicht verstehen, sollten Sie dies wahrscheinlich nicht tun, können aber die certbot-Dokumentation zur Hilfe konsultieren.
@pfaffman meint, dass certbot dies für Sie erledigt, aber wenn Sie Änderungen an der Nginx-Konfiguration vornehmen, müssen Sie
sudo service nginx reload
ausführen.
Ihre anderen Sites erstellen
Sie sind mit dem Discourse-Teil fertig!
Erstellen Sie andere NGINX-“Sites” und verknüpfen und aktivieren Sie sie dann, wie im letzten Schritt oben gezeigt.
Tipps
sudo netstat -tulpn: Dies zeigt Ihnen, welche Ports verwendet werden/var/log/nginx/error.log: Ist der Speicherort des Nginx-Logs auf Ubuntu. Dies teilt Ihnen mit, was der Fehler ist, wenn Sie einen 502 Bad Gateway-Fehler erhalten.
