Closed cap-blackbeard closed 2 years ago
Hi Christian,
Hilfst Du mir bei meinen ersten Verstehversuchen?
Mal gucken was ich machen kann ^^.
Ich vermute, mehrere nginx-Installationen in einem Netzwerk können Probleme verursachen?
Wenn diese auf verschiedenen Geräten sind und die Geräte alle unterschiedliche hostnames haben, dann ist das grundsätzlich erstmal kein Problem. Wenn du allerdings eine dieser Nginx Installationen von außen erreichen willst, dann kann dein Router nur auf eines der Geräte zeigen. Das ist die port-forward Einstellung für Port 443 in deinem Router (80 würde ich lieber zu machen für öffentliche Verbindungen).
So wie ich das verstehe, muss ich also die Nginx-Installation im SEPIA-Container deinstallieren/ abschalten um den separaten NPM-Container zu benutzen?
Nginx Proxy Manager kenne ich noch nicht, aber grundsätzlich musst du keinen Nginx abschalten sondern nur an einer zentralen Stelle die Verbindungen managen. Sagen wir mal du hast die Domain "my-sepia.example.org" und die zeigt auf deine vom Provider zugewiesene IP (ich manage das bei mir über Duck-DNS). Dann würde also "https://my-sepia.example.org/device1/sepia" z.B. in deinem Router auf Port 443 (default HTTPS) ankommen oder "https://my-sepia.example.org:9000/device1/sepia" z.B. auf Port 9000. 443 benutzen die Router oft selbst für ihre Konfigurationsseite, deswegen kann das unter Umständen Probleme geben. Deinem Router sagst du dann z.B. er soll Port 9000 weiterleiten (port forward) auf irgendein Gerät in deinem Netzwerk, sagen wir mal ein Raspberry Pi der nur einen Nginx installiert hat und sonst nichts. Im port forward kannst du theoretisch den Port auf dem Zielgerät auch ändern, aber sagen wir mal das Signal kommt jetzt auch auf Port 9000 im Nginx an, dann erstellst du dort eine Nginx config, die anhand des Pfades "/device1/sepia", "/device2/sepia" das Signal jeweils an deine anderen Geräte weiterleitet. Somit hast du dann eine einzige Domain für alle Geräte. Die Einträge wären z.B. so:
# port to listen to
listen 9000 ssl http2;
listen [::]:9000 ssl http2;
# domain to listen to
server_name my-sepia.example.org;
location /device1/sepia/ {
proxy_pass http://192.168.0.10:20726/;
}
location /device2/sepia/ {
proxy_pass http://192.168.0.11:20726/;
}
# ... SSL Krams ...
Das wäre jetzt die Einstellung für 2 SEPIA Server. Beim Login in der SEPIA App müsstest du dann jeweils den hostname https://my-sepia.example.org/device1/sepia
oder https://my-sepia.example.org/device2/sepia
angeben.
Ich frage mich gerade, warum in Deinem Tutorial überhaupt beide Ports 20726 und 20727 umgeleitet werden? Nginx lauscht lt. Deinem Tutorial doch nur auf 20726??? Oder irre ich mich?
Port 20726 ist der Standard und im Docker Container glaube ich auch der einzige Port. Bei der Konfiguration mit self-signed SSL läuft HTTPS auf 20726 und HTTP auf 20727 als fallback, damit man das Gerät aus dem eigenen Netzwerk zur Not (und zum Testen) ohne SSL erreichen kann. Bei der "SSL mit Lets Encrypt" Einstellung weiß ich gerade nicht mehr genau ob ich 20727 auch konfiguriert hatte.
Ich hoffe das hilft ein wenig? :-)
aber grundsätzlich musst du keinen Nginx abschalten sondern nur an einer zentralen Stelle die Verbindungen managen.
Jo. Habe gemerkt, wenn ich im SEPIA-Container Nginx stoppe, dass SEPIA dann tot ist. Leuchtet mir auch tatsächlich ein ;-)
Vielleicht habe ich mich aber falsch ausgedrückt. Aktuell erreiche ich meine SEPIA-Installation durch Deine Konfiguration lt. Deinem Tutorial. Bedeutet, dass irgendwo im SEPIA-Container die .config liegt, die dem (SEPIA-)nginx sagt, dass ich per https darauf zugreifen kann? Wenn ich jetzt einfach den NPM aktiviere und konfiguriere, dann habe ich ja eigentlich 2x .config, die die SEPIA-Installation von außen erreichbar machen? 1x aus dem SEPIA-Container und 1x aus dem NPM-Container? Also muss ich nach meinem Verständnis den SEPIA-Container so konfigurieren, dass https nicht mehr funktioniert und SEPIA nur noch intern per http zu erreichen ist. Oder? Erst dann kann ich den NPM in betrieb nehmen?
Ich habe schon versucht, die ~/SEPIA/nginx/sites-available/sepia-fw-https-meineURL.duckdns.org.conf
umzubenennen bzw. habe sie verschoben. Konnte trotz Neustart den SEPIA-Assistenten aber trotzdem noch von außen erreichen.
Da die Diskussion letztens mal aufkam eine Zwischenfrage, benutzt du den Docker Container mit isoliertem Netzwerk (Standard) oder mit Host Netzwerk? Wenn du dir nicht sicher bist versuch mal ob du z.B. Port 80 oder 20721 erreichen kannst von Außen (ohne dass die im run command angegeben werden). Wenn du im Host Netzwerk bist trifft vieles aus dem Docker Tutorial nicht zu und alle Ports liegen offen (nicht zu empfehlen!).
Bedeutet, dass irgendwo im SEPIA-Container die .config liegt, die dem (SEPIA-)nginx sagt, dass ich per https darauf zugreifen kann?
Ja, wie du weiter unten auch schon bemerkt hast, das sind die .conf Dateien: ~/SEPIA/nginx/sites-available/sepia-fw-https-[...].conf
. Da steht auch drin welcher Port offen ist.
Wenn ich jetzt einfach den NPM aktiviere und konfiguriere, dann habe ich ja eigentlich 2x .config, die die SEPIA-Installation von außen erreichbar machen? 1x aus dem SEPIA-Container und 1x aus dem NPM-Container?
Wenn dein Docker Container isoliert ist kann dir der interne Nginx eigentlich egal sein, du kannst dann einfach so tun als ob das ein Gerät mit einem Port ist, egal was den Port dahinter bedient. Wenn NPM auch die SSL Zertifikate managt würde ich allerdings SEPIA intern die Standard Konfiguration ohne SSL nutzen, also einfach Port 20726 ohne alles und beim run command dann auch nur -p 20726:20726
nutzen. Im NPM machst du dann nur eine einzige Weiterleitung auf Port 20726 und fertig.
Ich habe schon versucht, die ~/SEPIA/nginx/sites-available/sepia-fw-https-meineURL.duckdns.org.conf umzubenennen bzw. habe sie verschoben. Konnte trotz Neustart den SEPIA-Assistenten aber trotzdem noch von außen erreichen.
Gab es da sonst noch andere .conf Dateien? Nginx lädt alles aus dem Ordner was mit '.conf' aufhört. Meistens ist da noch eine "default" die Port 80 bedient, die kannst du auch löschen, wenn du willst. Wenn da sonst nichts mehr ist und du kannst den Server trotzdem erreichen kann ich mir das nur so vorstellen, dass der Container im Host Netzwerk läuft, dann sind immer alle Ports offen, die normalerweise durch den Nginx erst erreichbar werden und ggf. auch in Konflikt mit anderen Containern.
benutzt du den Docker Container mit isoliertem Netzwerk (Standard) oder mit Host Netzwerk?
Der SEPIA-Container ist mit bridge-Netzwerk
und Port 20726
konfiguriert. (20727
habe ich aktuell rausgenommen)
Gab es da sonst noch andere .conf Dateien?
Ja. Hab ja schon n paar Stunden probiert und gespielt ;-) Insgesamt 6 .conf-Dateien. Hab sie mal verschoben und nur noch diese übrig gelassen: sepia-fw-http.conf
.
So kann ich SEPIA nur noch aus dem lokalen Netzwerk erreichen.
Im NPM machst du dann nur eine einzige Weiterleitung auf Port 20726 und fertig.
Ja, wenn alles so einfach wäre. Hihi...
Im NPM habe ich einen Proxy Host mit meiner xxx.duckdns.org
Domain angelegt. Per http
auf die Server-IP
mit dem Port 20726
konfiguriert. Das SSL-Certificate von Let´s Encrypt ist eingetragen. Access steht auf Public
und der Status ist Online
. Wenn ich mit dem Handy von extern https://xxx.duckdns.org
eingebe bekomme ich trotzdem nur "Welcome to nginx! ..." angezeigt. SEPIA lädt leider nicht.
Ich habe auch schon versucht per "Custom locations" den Pfad /sepia/assist/app/index.html
und Port 20276
hinzuzufügen. Ebenfalls ohne Erfolg.
Evtl. kann ich noch erklären, dass ich bereits erfolgreich per https
auf eine ioBroker Vis-Seite zugreifen kann. Der NPM scheint also grundsätzlich ordentlich zu laufen.
Hast Du wieder die rettende Idee?
Hi,
mal schauen was mir noch auffällt :sweat_smile: .
Der SEPIA-Container ist mit bridge-Netzwerk und Port 20726 konfiguriert
Das heißt die Ports 20721 etc. sind auch nicht zu erreichen oder? Das ist schon mal gut.
Hab sie mal verschoben und nur noch diese übrig gelassen: sepia-fw-http.conf
Das war die ursprüngliche Config aus dem Container richtig? Also unverändert ohne SSL und einfach Port 20726.
Im NPM habe ich einen Proxy Host mit meiner xxx.duckdns.org Domain angelegt. Per http auf die Server-IP mit dem Port 20726 konfiguriert. Das SSL-Certificate von Let´s Encrypt ist eingetragen. Access steht auf Public und der Status ist Online. Wenn ich mit dem Handy von extern https://xxx.duckdns.org eingebe bekomme ich trotzdem nur "Welcome to nginx! ..." angezeigt.
Nach meinem Verständnis ist das genau richtig, das ist die Startseite des Nginx ohne jegliche Pfadangabe.
SEPIA müsste dann erreichbar sein unter https://xxx.duckdns.org/sepia/assist/ping
zum Beispiel oder https://xxx.duckdns.org/sepia/assist/app/
.
In deinen Clients wäre der 'hostname' dann https://xxx.duckdns.org/sepia
.
Funktioniert das nicht?
Das heißt die Ports 20721 etc. sind auch nicht zu erreichen oder?
Ich erreiche den Server nur per 20726.
https://xxx.duckdns.org/sepia/assist/app/
Da war mein Fehler. Ich hatte noch den Port in der Adresse mit angegeben. Ohne Port wird der Assistent geladen.
Nächstes Problem: Der Assistent ist "Offline"! Ich kann meinem User anmelden. Die WakeWord-Erkennung wird geladen. Es blitzt immer mal "Connecting" oben in der Leiste auf, baut aber keine Verbindung auf.
Ohne Port wird der Assistent geladen.
:+1:
Ich kann meinem User anmelden. Die WakeWord-Erkennung wird geladen. Es blitzt immer mal "Connecting" oben in der Leiste auf, baut aber keine Verbindung auf.
Das riecht nach einem Problem mit den WebSockets, da der login (HTTP) ja scheinbar klappt. Nginx braucht dafür üblicherweise 2 Einträge in der config:
# SEPIA WebSockets
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
und:
location /sepia/chat/messages/ {
proxy_pass http://localhost:20723/messages/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 14400;
}
Ich hatte eigentlich gehofft, dass das nicht nötig ist weil der interne Nginx es übernimmt, aber vielleicht muss es der erste machen wegen SSL.
Die Frage ist wie man das jetzt anpassen muss :thinking: . Den oberen kann man wahrscheinlich einfach so übernehmen und aus dem unteren macht man vielleicht sowas:
location /sepia/chat/messages/ {
proxy_pass http://[sepia-IP]:20726/sepia/chat/messages/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 14400;
}
hmm... Ich habe zwar die .conf gefunden. Nachdem ich Deinen Vorschlag in der .conf ergänze und speichere connected sich der Client trotzdem nicht. Allerdings werden alle Änderungen wieder auf die Ursprungseinträge überschrieben, sobald ich den Proxy Host Eintrag "neu starte" (disable und wieder enable). Scheinbar kann ich auf diesem Weg keine Änderung der .conf vornehmen.
Meinst Du, das hier hilft weiter: https://nginxproxymanager.com/advanced-config/#custom-nginx-configurations?
Meinst Du, das hier hilft weiter: https://nginxproxymanager.com/advanced-config/#custom-nginx-configurations?
Hmm, man müsste eigentlich in die individuellen Proxy Einstellungen, aber auf dem screenshot hier steht was von "WebSockets Support" :thinking: schon mal probiert?
[EDIT] Was ich nicht verstehe ist, kann man da keine individuellen Pfade etc. definieren?
WebSockets Support
Nö. Hatte ich noch nicht probiert. Aber jetzt wo ich es probiert habe, hat es auch gleich funktioniert!!!
Ich erreiche SEPIA von extern über den NginxProxyManager!
Kannst ja mal überlegen, ob Du die Variante per NginxProxyManager als Alternative in Dein Tutorial aufnehmen möchtest.
Man könnte vielleicht irgendwo in der Dokumentation eine Sektion dazu erstellen. Das Programm sieht ja wirklich nützlich aus.
Hallo Florian, ich habe mich da zu was Neuem inspirieren lassen. Hilfst Du mir bei meinen ersten Verstehversuchen?
Ich habe aktuell meine Installation nach Deinem "SSL for your Server -Tutorial mit Punkt 2b NGINX ... SSL certificate" eingerichtet und erreiche SEPIA auch von extern.
Ich vermute, mehrere nginx-Installationen in einem Netzwerk können Probleme verursachen? Ich habe schließlich zu meiner Server-IP nur einmal die Ports 80 & 443?
So wie ich das verstehe, muss ich also die Nginx-Installation im SEPIA-Container deinstallieren/ abschalten um den separaten NPM-Container zu benutzen?
Anschließend erstelle ich in NPM einen Proxy Host und leite diesen auf
http://SEPIA-IP:20727
. Ist das soweit richtig? Muss ich noch etwas bedenken? Habe ich was vergessen?Ach so, muss ich dann überhaupt noch im Router die Ports 20726 und 20727 umleiten? Oder kann ich die Umleitungen löschen und der NPM übernimmt das dann?
Ich frage mich gerade, warum in Deinem Tutorial überhaupt beide Ports 20726 und 20727 umgeleitet werden? Nginx lauscht lt. Deinem Tutorial doch nur auf 20726??? Oder irre ich mich?
Grüße Christian