Hallo an alle, die sich mit diesem Thema auskennen:
ich möchte Grafana und InfluxDB auf einem Webserver installieren, wo
schon eine WebSeite mit Apache drauf läuft. Die WebSeite ist mit
letsencrypt https-verschlüsselt. Ich hatte dazu den bot von letzencrypt
benutzt, alles aktualisiert sich und ist prima.
So wie ich es verstanden habe, benutzt Grafana und InfluxDB den Apache
gar nicht, ist das richtig? Aber beide sollen bei mir mit https
abgesichert sein (also sowohl das Daten schicken an die InfluxDB als
auch das Anschauen der Ergebnisse mit Grafana
Muss ich dann 2 neue Zertifikate bei Letsencrypt erzeugen mit
"-certonly", oder kann ich das vorhandene von der Webseite benutzen? Für
alle beide?
Und falls ich die neuen erzeugen muss, wie teste ich die ohne
Webseite/Apache und wie erneuern sich die automatisch?
Lieder sind alle Beispiele bei Letsencrypt, die ich gefunden habe,
irgendwie immer auf Webseiten bezogen?
Lass den Apache&Letsencrypt weiter laufen,
Starte Grafana ohne direktem Zugriff von Außen, richte im apache Pfade
als "reverse Proxy" ein, z.B
"/grafana" als Reverse-Proxy auf "http://127.0.0.1:3000/"
HTTPS-Verschlüsselung, Logging und ggfs. Vorab-Zugriffskontrolle macht
dann weiterhin dein Apache.
https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html
(Nur die ersten Abschnitte, Load-Balancing/Fail-Over etc wäre da
overkill)
Und es kann sein, dass Grafana wissen muss über welchen Pfad es von
extern aufgerufen wird, damit es keine URLs generiert die aus dem Proxy
rausfallen.
https://grafana.com/docs/grafana/latest/administration/configuration/#root_url
per Environment (docker container) oder config-datei setzbar
(GF_SERVER_DOMAIN="mein.dyn.dns.xyz" ;
GF_SERVER_ROOT_URL=https://mein.dyn.dns.xyz/proxy_path_grafana" )
Für InfluxDB (wenn das auch von ausserhalb erreichbar sein muss) geht
das analog
Ich hab jetzt beides erstmal installiert. Docker benutze ich nicht.
Wo gehören diese Zeilen s.o. hin? Ich habe hier ein Beispiel gefunden -
soll ich auch so eine /etc/apache2/sites-enabled/grafana1.conf anlegen?
Und welche der Zeilen brauche ich ? alle:
https://administrator.de/forum/reverse-proxy-portfreigabe-567998.html
Außerdem: muss ich die ports 8086 und 3000 auch "nach außen" in meinem
Router öffnen, oder reicht der vorhandene offene 443 und der Proxy setzt
dann die Portnummern um?
Sorry ich hab da mit Apache config bisher kaum zu tun gehabt..
Also es gibt irgendwie 1000 verschiedene Beispiele für diesen reverse
proxy..
Mal beim Beispiel Grafana - also was ich glaube zu wissen:
- ich muss a2enmod proxy proxy_http ausführen
- ich muss einen virtuelle host erzeugen und dafür eine Datei
/etc/apache2/sites-enabled/grafana.conf
erzeugen mit diesen Inhalt:
Rudi schrieb:> Hallo an alle, die sich mit diesem Thema auskennen:>> ich möchte Grafana und InfluxDB auf einem Webserver installieren, wo> schon eine WebSeite mit Apache drauf läuft. Die WebSeite ist mit> letsencrypt https-verschlüsselt. Ich hatte dazu den bot von letzencrypt> benutzt, alles aktualisiert sich und ist prima.>> So wie ich es verstanden habe, benutzt Grafana und InfluxDB den Apache> gar nicht, ist das richtig? Aber beide sollen bei mir mit https> abgesichert sein (also sowohl das Daten schicken an die InfluxDB als> auch das Anschauen der Ergebnisse mit Grafana
Du kannst, wie es auch andere hier schon empfohlen haben, Deinen Apachen
als Reverse Proxy einrichten. Leider ist das nicht immer ganz einfach,
wenn man andere als die Default-Pfade der Applikationen benutzt, also
zum Beispiel eine Software, die erwartet, unter dem Webroot-Kontext /
(zB. https://example.com/) betrieben zu werden, plötzlich unter einem
Kontext ruebennase (also zB unter https://example.com/ruebennase/)
anzusprechen. So etwas kann leider hie und da zu mehr oder minder großen
Problemen mit hartgecodeten URLs führen, vor allem in Verbindung mit
Redirects und JavaScript.
Eine andere, langfristig komfortablere Alternative wäre, Deine
Applikationen in Docker-Containern zu betreiben und über docker-compose
zu steuern. Das erfordert natürlich zunächst einen gewissen Aufwand zur
Einarbeitung, je nach Deiner Linux-Erfahrung kann das durchaus einige
Tage oder sogar Wochen dauern.
Als Reverse Proxy kannst Du dann einfach
letsencrypt-nginx-proxy-companion
(https://github.com/nginx-proxy/docker-letsencrypt-nginx-proxy-companion)
benutzen; das erfordert nur drei Umgebungsvariablen für Deine jeweiligen
Container, um den Rest wie die Letsencrypt-Zertifikate und deren Reneval
kümmern sich die Container von Jason Wilder, dem Autor der Software. Das
ist, den Einarbeitungsaufwand mal weggelassen, aus meiner heutigen Sicht
einer der mit Abstand komfortabelsten Wege, Webseiten zu betreiben.
Wenn Du mehr darüber wissen möchtest, frag' einfach. Vermutlich kommen
aber jetzt wieder die bekannten "Freunde", die zwar keine Ahnung von
Docker und niemals damit gearbeitet haben, aber ganz genau wissen, daß
das unglaublich aufwändig und natürlich ohnehin schreckliches
Teufelswerk ist. ;-)
Jemand schrieb:> Eine andere, langfristig komfortablere Alternative wäre, Deine> Applikationen in Docker-Containern zu betreiben und über docker-compose> zu steuern. Das erfordert natürlich zunächst einen gewissen Aufwand zur> Einarbeitung, je nach Deiner Linux-Erfahrung kann das durchaus einige> Tage oder sogar Wochen dauern.
Super, denn Teufel mit dem Beelzebub auszutreiben, eine
Abstraktionsebene hat immer einen Preis, im Fall von Docker ist, dass
vor allen ein gewissen Performanceverlust und als Datastore (influxdb)
eignet sich das Teil auch nicht so gut wie man aus für gewöhnlich gut
informierten Kreisen hört.
Außerdem hat Docker ein inhärentes Sicherheitsproblem, jeder Container
hat seinen eigen Softwarestack mit wer weiß was für Libary Versionen.
Für Hacker kann das ein schöner neuer Attackvector sein, um in das
System zu kommen und da Docker meistens mit allen Capabilities und
Rechten läuft, oftmals reicht ein gammliger Container, um den kompletten
Server zu übernehmen.
Persönlich halte ich Docker für ein Offenbarungseid der Ingenieure,
anstatt sich mit der Software zu befassen und Probleme zu lösen einfach
eine Glueschicht drüber wird schon passen. Das ist modern das ist Agile
und wir haben eine Super time to Market, nur keinen mehr er das System
wirklich kennt und versteht.
Ich bin jetzt ein bisschen weiter, aber noch nicht am Ziel mit dem
Grafana reverse proxy:
Unter "https://meinserver.no-ip.biz/grafana" antwortet jetzt etwas, und
in der Browser-Adresszeile steht dann
"https://meinserver.no-ip.biz/grafana/login"
Aber ich bekomme einen Umleitungsfehler, noch nicth die Grafana-Seite
angezeigt. Wie kann ich das debuggen? Wenn ich im Firefox F12 drücke um
zu sehen was passiert, zeigt er ganz oft "302 get..." an, Chrome meldet
"ERR-TOO_MANY_REDIRECTS"
Mühsam..
Hi Rudi,
bin gerade auf dem Sprung ... ich meine mal , ich habe das mal so
RewriteEngine on
RewriteRule ^/?$ grafana [R=permanent,L]
<Location "/grafana">
ProxyPass http://localhost:3000
</Location>
ProxyPassReverse /grafana http://localhost:3000
</VirtualHost>
gemacht.
Gruß Ingo
Imonbln schrieb:> Jemand schrieb:>> Eine andere, langfristig komfortablere Alternative wäre, Deine>> Applikationen in Docker-Containern zu betreiben und über docker-compose>> zu steuern. Das erfordert natürlich zunächst einen gewissen Aufwand zur>> Einarbeitung, je nach Deiner Linux-Erfahrung kann das durchaus einige>> Tage oder sogar Wochen dauern.>> Super, denn Teufel mit dem Beelzebub auszutreiben,
Als ich seinen Vorschlag gelesen habe, wußte ich schon, warum "Jemand"
schrieb:
Jemand schrieb:> Vermutlich kommen> aber jetzt wieder die bekannten "Freunde", die zwar keine Ahnung von> Docker und niemals damit gearbeitet haben, aber ganz genau wissen, daß> das unglaublich aufwändig und natürlich ohnehin schreckliches> Teufelswerk ist. ;-)
Schau, Du kannst gerne mitreden, wenn Du Dir ein bisschen Ahnung und
Erfahrung mit derlei Technologien (kann auch LXC, Podman oder etwas
anderes in der Richtung sein) zugelegt hast. Bis dahin sind Beiträge wie
Deiner einfach nur peinlich. Wie kann einer in einem Forum, das sich
immerhin mit Mikrocontrollern, Elektronik und Programmierung befaßt, so
fortschritts- und technologiefeindlich eingestellt sein?
Rudi schrieb:> Ich bin jetzt ein bisschen weiter, aber noch nicht am Ziel mit dem> Grafana reverse proxy:>> Unter "https://meinserver.no-ip.biz/grafana" antwortet jetzt etwas, und> in der Browser-Adresszeile steht dann>> "https://meinserver.no-ip.biz/grafana/login">> Aber ich bekomme einen Umleitungsfehler, noch nicth die Grafana-Seite> angezeigt. Wie kann ich das debuggen? Wenn ich im Firefox F12 drücke um> zu sehen was passiert, zeigt er ganz oft "302 get..." an, Chrome meldet> "ERR-TOO_MANY_REDIRECTS"
Du scheinst genau in den Fehler hineingelaufen zu sein, den "Jemand"
schon erwähnt hat: Grafana ist per default nicht darauf ausgelegt, in
einem anderen Kontext als dem Root-Kontext / zu laufen, kommt mit Deinem
"/grafana" also anscheinend nicht zurecht. Hier [1] steht eine
Möglichkeit zur Lösung; eine andere, wie "Jemand" vorgeschlagen hatte,
wäre die Nutzung eines eigenen Virtual Host.
[1] https://grafana.com/tutorials/run-grafana-behind-a-proxy/#1
Sheeva P. schrieb:> Schau, Du kannst gerne mitreden, wenn Du Dir ein bisschen Ahnung und> Erfahrung mit derlei Technologien (kann auch LXC, Podman oder etwas> anderes in der Richtung sein) zugelegt hast. Bis dahin sind Beiträge wie> Deiner einfach nur peinlich. Wie kann einer in einem Forum, das sich> immerhin mit Mikrocontrollern, Elektronik und Programmierung befaßt, so> fortschritts- und technologiefeindlich eingestellt sein?
Na Klar bin ich Technologie feindlich und hab mit Container Technologien
noch nie angesehen, warum denn auch? Es ist Ja auch viel einfacher zu
sagen, dass jemand einfach nur Peinlich ist, als sich mit der
inhaltlichen Kritik auseinander zu setzen. Aber Hey, besser sich denn
Gefahren bewusst sein und als Rückgewand gelten als der nächste, Robert
Oppenheimer zu werden, die Ehre überlasse ich gerne Dir.
Und nur Deine Behauptung zu entkräften, ich kenne Docker,LXC und nspawn,
ziemlich gut sogar und ich weiß, dass es durchaus Einsatzszenarien für
diese Technologien gibt, aber im Gegensatz zu Dir scheine ich mich auch
mit den Downsides dieser Technologien zu befassen.
Ich war wohl etwas zu optimistisch.. jetzt wollte ich Grafana auch mal
benutzen. Ich komme bis zu der Stelle, wo man sich angemeldet hat und
das Standard-Admin-Kennwort geändert hat.
Danach sind nur wenige Symbole auf der Serite und ich kann nichts
machen.. es kommen immer Fehlermeldungen. Evtl. liegt es wirklich an dem
Unterverzeichnis /grafana, wo es ausgeliefert wird.
Jetzt kann ich die anderen Dinge auf dem Server wegbauen oder docker
probieren.. - oder hat jemand noch eine andere Idee zum debuggen?
Weitere Tests: auch wenn ich Grafana direkt unter / ausliefere (ohne
sub-path), kommen diese Fehler auf. Dann brauche ich docker wohl gar
nicht erst zu testen, oder?
Konfiguriere mal grafana, das es unter http://localhost:3000/grafana/
läuft, und dann passe apache an, dass es /grafana nach
http://localhost:3000/grafana weiterleitet (statt nach
http://localhost:3000). Dann ist zumindest der Pfad in beiden fällen
identisch.
Falls das nicht hilft, schau mal im apache access log, und eventuell mit
wireshark oder "tcpdump -i lo port 3000" nach, was sich versucht wohin
zu verbinden.
ich bekomme jetzt andere Fehler. Ich habe also in der grafana.ini
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana
serve_from_sub_path = true
und in der apache-Host-Datei (virtualhost 443)
ProxyPass "/grafana" "http://localhost:3000/grafana"
ProxyPassReverse "/grafana" "http://localhost:3000/grafana"
Ich sehe die Grafana Oberfläche und 3 leere panel. Wenn ich suche,
bietet er mir mein lokal generiertes dashboard an, findet es dann aber
nicht (404 page not found), unter sucht unter
https://********.no-ip.biz/grafana/grafana/d/vGmwDAoMk/prima-dashboard
also einmal sub-Path zuviel..
Echt zum Verzweifeln.. :-(
Grafana schrieb:> Mit Nginx funzt das jedenfalls.
aber ich hab nunmal apache.. aber auch da gibt es eine
"location"-Anweisung. Macht die etwas anderes als "ProxyPass" / wäre die
verwendbar ?
Mal angenommen, ich setze docker auf mit NGINX und aus dem docker heraus
(lokal) funktioniert alles - hilft mir das?
Denn ich habe ja zu Hause, wo der Server läuft, nur eine öffentliche IP,
wo der dynDNS drauf zeigt und der port 443 ja schon für den Apachen
genutzt wird.
Also muss ich ja wieder Reverse Proxy mit Apache machen - warum soll das
dann besser funktionieren als siehe oben?
Rudi schrieb:> Grafana schrieb:>> Mit Nginx funzt das jedenfalls.>> aber ich hab nunmal apache.. aber auch da gibt es eine> "location"-Anweisung. Macht die etwas anderes als "ProxyPass" / wäre die> verwendbar ?
Nicht das ich wüsste.
Vermutlich ist das Problem irgend was komplett unscheinbares/blödes.
Versuche mal, bei grafana am Ende von root_url noch den slash hin zu
setzen:
🐧 DPA 🐧 schrieb:> Vermutlich ist das Problem irgend was komplett unscheinbares/blödes.
wahrscheinlich.
🐧 DPA 🐧 schrieb:> root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/
hab ich probiert, ändert nix.
Außerdem Deinen Grafana-Container starten mit "-p 127.0.0.1:3000:3000".
Wenn das nicht klappt: könntest Du dann bitte mal den ganzen
VirtualHost, Deinen Startbefehl für den Container, und die Logdateien
zeigen?
Und, ach so: es wäre schön, wenn Du nicht ständig neue Threads starten
und bei einem bleiben würdest, den Du gestartet hast. Man weiß gar
nicht, wo man antworten soll, und am Ende geht es ja immer um ein und
dasselbe Problem.