Betrieb mehrerer Weboberflächen auf einem RapsberryPi

  • Hallo Forenmitglieder,

    habe nun Google und auch das Forum nach meinem Problem durchsucht, aber leide keine Lösung gefunden.


    Ich habe bereits auf meinem Pi AdGuardHome laufen.

    Um das System via Remotedesktopverbindung zu erreichen, habe ich Apache2 installiert.


    *edit:
    Da ich das Passwort von AdGuard vergas, benötigte ich Apache2.
    nach dem Rücksetzen des Passwortes wurde dieser aus nachfolgendem Problem wieder deinstalliert.

    Um zukünftige Projekte parallel zum AdGuard so sauber wie mir möglich zu lösen, möchte ich gerne besagtes Problem ausmerzen.


    Dabei ist mir aufgefallen, dass dieses Programm auch eine Weboberfläche zur Verfügung stellt und AdGuardHome nicht mehr erreichbar ist.


    Ich habe einen Thread gefunden, in dem einem User vorgeschlagen wurde, Programme in unterschiedliche Verzeichnisse zu installieren und diese dann wie folgt aufzurufen:

    • ipadresse/adguardhome
    • ipadresse/apache
    • ipadresse/nas


    Nun stellt sich mir die Frage, wie ich die Programme in unterschiedliche Verzeichnisse installieren kann um oben genanntes Problem zu lösen.

    Die Weboberflächen möchte ich natürlich nur im Netzwerk und nicht von außerhalb erreichen.


    Vielen Dank schon mal

    Markus

    Edited once, last by trumax ().

  • Genau für sowas ist "Docker" richtig gut. Jede Anwendung lebt in ihrem eigenen Container und spricht mit einem Port, der im Übergang vom Container zur "Außenwelt" von Docker umgeleitet wird. Intern können AdGuardHome und Apache jeweils auf Port 80 lauschen, doch Docker weist ihnen außerhalb des Containers eigene und vor allem einzigartige Ports zu. So kannst du die unterschiedlichen Anwendungen mit bspw. <IP>:8000 und <IP>:8001 erreichen.

    Kelvin

  • Das geht auch ohne Docker. Adguard, bzw. dessen Webserverkomponente lauscht auf einem bestimmten Port. Möchtest du jetzt eine weiter Anwendung laufen lassen, die über einen Webserver erreichbar ist, kannst du das über den Webserver von Adguard machen, oder du nimmst den von dir installierten Apache und lässt den auf einem anderen Port lauschen. Grundsätzlich kannst du viele Werbserverinstanzen laufen lassen, die müssen nur alle auf unterschiedlichen Ports arbeiten. Den Port, auf dem der Apache lauschen soll, definiert du in der entsprechenden vHost.

    Die dritte Variante wäre die Nutzung eines Reverse Proxy. Alle Anfragen laufen über diesen und der Proxy verteilt dann die Anfragen an die entsprechende Anwendung.

    Willst du einen Tag lang glücklich sein, dann saufe.

    Willst du ein Jahr lang glücklich sein, dann heirate.

    Willst du ein Leben lang glücklich sein, dann fahr Yamaha.

  • Danke für die raschen Rückmeldungen.


    Über Docker habe ich auch schon nachgedacht, jedoch kenne ich dieses System noch gar nicht.

    Und mich würd es auch nicht wundern, wenn es sich in meinem Fall nur um einen Konfigurationsfehler handelt.


    Dass die Anwendungen auf einen Port hören habe ich soweit verstanden.

    Da ich gerne alle Optionen verstehen möchte, habe ich noch ein paar Fragen:

    • Wie muss ich vorgehen, wenn ich Apache oder andere Oberflächen über den Webserver von AdGuard erreichen möchte?
      • Sind das die 'versch. Verzeichnisse', die ich in meinem ersten Beitrag Beschrieben habe?
    • Das mit der vHost höre ich gerade zum ersten mal; was muss ich hier genau bearbeiten, um zum gewünschten Ergebnis zu kommen?
    • Reverse Proxy werde ich mal googlen..

    Edited once, last by trumax ().

  • ipadresse/adguardhome
    ipadresse/apache
    ipadresse/nas

    Am einfachsten wäre es, wenn das alles von einem Webserver angeboten werden könnte. Der Apache ist ja ein Webserver, der verschiedene Angebote anzeigen kann, so läuft zum Beispiel viele/alle Weboberflächen von NAS-Systemen auch auf dem Apache. Man müsste hier dann höchsten einstellen, dass sie sich nicht auf der Web-Root breit macht, sondern in einem Unterverzeichnis.

    Vielleicht geht das bei AdGuardHome auch, einfach einmal nachsehen.


    ansonsten gibt es eine Softrwar, ein Proxy, der mehrere Webserver-Software Apache/nginx/lighttp und ähnliches, bedienen kann.

    Selber denken,
    wie kann man nur?

  • Grundsaetzlich ist es ganz einfach:


    * drei Directories unter /var/www/html erstellen mit den entsprechenden Namen

    * die Webseiten, das CSS und das JavaScript der entsprechenden Sites in die Directories kopieren


    Die Frage ist jetzt, wie du zu diesen Files kommst. Selbst entwickelte Sites sind einfach, da weisst du (hoffentlich) was du gemacht hast.


    Ein weiteres Problem koennte sein dass die Oberflaechen absolute Pfade verwenden (also URLs die mit / beginnen). Das muesstest du entsprechend anpassen.

  • Ne ne ne, so einfach geht das nicht. Man kann nicht einfach aus Anwendungen die ganzen Web-Ressourcen rausfischen und dann in den Ordner von Apache kopieren... Das ist als würde man sagen "Kopiere deinen Spotify-Ordner in den Apache-Ordner und dann kannst du Spotify im Browser aufrufen". Mit statischen Seiten, die sich nicht (dynamisch) ändern, könnte man das machen, aber nicht mit Anwendungen wie AdGuard Home oder einem NAS, die die Ressourcen aus ihren eigenen Ordnern laden.


    Ich bin nochmal auf eine genauere Erklärung von dem hier gespannt:

    Möchtest du jetzt eine weiter Anwendung laufen lassen, die über einen Webserver erreichbar ist, kannst du das über den Webserver von Adguard machen

    Klingt für mich jetzt aber auch erstmal nur so, dass man den Webserver von AdGuard Home quasi missbrauchen soll und dort dann all seine Sachen ablegt.



    Die schönste Lösung, die hier bis jetzt erwähnt wurde, ist ein "Reverse Proxy". Aber der funktioniert auch nur dann, wenn man den einzelnen Anwendungen schon unterschiedliche Ports zugeordnet hat. Und wenn das der Fall ist, ist es wie in meinem Beitrag #2, dass man die Dienste schon mit <IP>:8000 und <IP>:8001 erreichen kann und nicht um einen Port gekämpft werden muss. Ein Reverse Proxy macht es dann noch etwas eleganter, sodass man z.B. nas.zuhause oder adguard.zuhause schreiben kann.

    Um es vorwegzugreifen: Dafür müsste der Reverse Proxy (am einfachsten "Nginx Proxy Manager") alle Anfragen von *.zuhause annehmen und intern die Weiterleitung von nas.zuhause ---> <IP>:8000 eingerichtet haben. In AdGuard Home legt man dann unter "Filter -> DNS-Umschreibungen" fest, dass alles mit *.zuhause auf die IP des Pis geleitet wird. So hat man dann Browser ruft nas.zuhause auf -> AdGuard löst *.zuhause auf und gibt IP vom Pi zurück -> Browser wendet sich an IP mit dem Zusatz "nas" -> Reverse Proxy nimmt ALLE Anfragen entgegen und kennt die Umleitung für "nas" -> Proxy gibt Anfrage an Port 8000 weiter -> NAS verarbeitet Anfrage und schickt Antwort zurück an Proxy -> Proxy leitet Antwort an Browser weiter.

    Kelvin

  • Du hast recht, über Adguard selber gehts nicht. Da brauchst du einen extra Webserver, der auch als Reverse Proxy fungiert und über die Weboberfläche von Adgurad erreichbar ist.

    Willst du einen Tag lang glücklich sein, dann saufe.

    Willst du ein Jahr lang glücklich sein, dann heirate.

    Willst du ein Leben lang glücklich sein, dann fahr Yamaha.

  • Hallo,


    die IMHO einfachste Lösung, die man IMHO auch nur mit Grundwissen bzw. genug Engagement hinbekommt:


    - alle Dienste nur auf `localhost` laufen lassen und jeder Anwendungen einen eigenen Port zuweisen (z.B. 8000, 8001, 8002 usw.)

    - nginx als Reverse Proxy davor und die verschiedenen URLs auf `localhost:PORT_DES_DIENSTES` weiterleiten.


    nginx als Revese Proxy einrichten ist extrem einfach.


    BTW: wieso brauchst du für den Remotezugriff eigentlich Apache bzw. welche Tehnik nutzt du? RDP oder VNC brauchen doch keinen Webserver.


    Gruß, noisefloor

  • Vielen Dank für die nun mittlerweile zahlreichen Rückmeldungen.


    Ich lese aus euren Antworten, dass ich dies entweder mit Docker Containern oder dem Reverse Proxy lösen kann.

    Werde mich heute Abend in diese Thematik einlesen.


    Sollte es nicht auch möglich sein, dass ich den Port von AdGuard von 80 auf zB. 90 umstelle?
    Hört sich nach dem Eingriff mit dem wenigsten Aufwand an?


    Bzgl. des ursächlichen Problems habe ich den ersten Beitrag etwas ändern müssen, hab da wohl etwas verwechselt. shameOnMe


    Quote

    BTW: wieso brauchst du für den Remotezugriff eigentlich Apache bzw. welche Tehnik nutzt du? RDP oder VNC brauchen doch keinen Webserver.

    Wollte per Windows Remotedesktopverbindung auf Raspbian zugreifen, da ich keinen VNC Client installiert hatte.

    Apache wollte AdGuard, weil ich das Passwort vergessen hatte. facepalm


    Sollte ich auf etwas zu Antworten vergessen haben, bitte Bescheid geben.

  • Ich lese aus euren Antworten, dass ich dies entweder mit Docker Containern oder dem Reverse Proxy lösen kann.

    Werde mich heute Abend in diese Thematik einlesen.

    Beides zusammen geht auch und habe ich zum Beispiel bei mir so im Einsatz (mit kleinen Unterschieden). Ich habe auch erst vor kurzem mit Docker angefangen und es macht viele Dinge einfacher, auch wenn man sich anfangs erst einlesen und herumprobieren muss. Auf YouTube gibt es ein paar Videos dazu, wie man AdGuard Home mit Docker installiert.

    Kelvin

  • Hallo,


    Quote

    Wollte per Windows Remotedesktopverbindung auf Raspbian zugreifen, da ich keinen VNC Client installiert hatte.

    Aber dann brauchst du doch "nur" einen RDP-Server auf dem Raspi - und immer noch keinen Apache.


    Quote

    Ich lese aus euren Antworten, dass ich dies entweder mit Docker Containern oder dem Reverse Proxy lösen kann.

    Das eine hat nur mittelbar etwas mit dem anderen zu tun. Mit Docker schottest du die Anwendungen gegeneinander ab, weil jede in ihrer eigenen "Welt" (=dem Container) lebt und die anderen Anwendungen nicht sieht. Damit könntest du z.B. jede Anwendung auf dem gleichen Port in ihrem Container laufen lassen. Wenn die Anwendungen alle auf der gleichen Plattform laufen (egal ob "reales" OS oder VM oder Container), dann geht das z.B. nicht.

    Etwas, dass die Anfragen auf die Container richtig verteilt, brauchst du trotzdem.


    Gruß, noisefloor

  • Beides zusammen geht auch und habe ich zum Beispiel bei mir so im Einsatz (mit kleinen Unterschieden). Ich habe auch erst vor kurzem mit Docker angefangen und es macht viele Dinge einfacher, auch wenn man sich anfangs erst einlesen und herumprobieren muss. Auf YouTube gibt es ein paar Videos dazu, wie man AdGuard Home mit Docker installiert.

    Was wären die Unterschiede zu dem, wie ich es vorhabe?
    Punkte die ich von Anfang an beachten sollte?
    Hab mittlerweile viel experimentiert und würde jetzt dahingehend mein System neu aufsetzen.



    Hallo,


    Aber dann brauchst du doch "nur" einen RDP-Server auf dem Raspi - und immer noch keinen Apache.

    Hab meinen Eröffnungsbeitrag bereits abgeändert, Apache2 war für das Rücksetzen des Passwort für den AdGuard Zugang.



    Das eine hat nur mittelbar etwas mit dem anderen zu tun. Mit Docker schottest du die Anwendungen gegeneinander ab, weil jede in ihrer eigenen "Welt" (=dem Container) lebt und die anderen Anwendungen nicht sieht. Damit könntest du z.B. jede Anwendung auf dem gleichen Port in ihrem Container laufen lassen. Wenn die Anwendungen alle auf der gleichen Plattform laufen (egal ob "reales" OS oder VM oder Container), dann geht das z.B. nicht.

    Etwas, dass die Anfragen auf die Container richtig verteilt, brauchst du trotzdem.

    Und das wiederum geht dann mit diesem Reverse Proxy?
    Oder gibt es da noch andere Möglichkeiten?

  • Hallo,


    Quote

    Und das wiederum geht dann mit diesem Reverse Proxy?

    Ja. Ein Reverse Proxy ist _eine_ Webserver, der im Netzwerk / Internet sichtbar ist, der Anfragen entgegen nimmt und die dann auf X nicht direkt erreichbar Server (die ggf. auf der gleichen Maschine oder einem Container laufen) verteilt. nginx ist als Reverse Proxy ziemlich populär, weil der dafür IMHO sehr einfach zu konfigurieren ist. Grundsätzlich können Apache & Co das aber auch.


    Gruß, noisefloor

  • Was wären die Unterschiede zu dem, wie ich es vorhabe?
    Punkte die ich von Anfang an beachten sollte?
    Hab mittlerweile viel experimentiert und würde jetzt dahingehend mein System neu aufsetzen.

    Ich benutze "Traefik" anstelle vom Nginx Proxy Manager, was ich mir im Nachhinein hätte sparen und einige Nerven schonen können 😅 Mit Nginx geht das wesentlich einfacher, weil man das über eine Website einstellen kann. Bei Traefik muss alles in eine Konfigurationsdatei geschrieben werden und ist nicht sonderlich intuitiv. Der andere Unterschied ist, dass ich meine Dienste im Internet verfügbar mache und auch eine Domain habe. Lokal wird das aber auch alles funktionieren. Ich benutze auch Subdomains (z.B. adguard.hallo.de) anstelle von Pfaden (hallo.de/adguard). Pfade kann man mit dem Nginx Proxy Manager aber auch einfach einrichten und heißt dort "Custom locations". Wie im Bild zu sehen, würdest du in "Define location" nur "/adguard" angeben und in den Feldern danach dann die IP vom Pi und den Port vom AdGuard-Container.


    [Blocked Image: https://i.imgur.com/ZFoGlrE.png]


    Ich bin auch noch neu im Game (es gibt also bestimmt noch bessere Wege) und damit es für mich einfacher ist, habe ich Docker installiert und dann gleich als nächstes "Portainer". Portainer ist eine grafische Oberfläche im Browser, mit der man seine Docker-Container managen kann, ohne dafür jedes Mal in die Konsole zu gehen. Ist ganz praktisch und wenn in Anleitungen von einer docker-compose.yml Datei gesprochen wird, kannst du diese in Portainer unter "Stacks" anlegen. Das ist so eine Sache, die mir vorher hätte auffallen können, weil ich sie mittlerweile fast ausschließlich benutze, wenn ich einen Container aufsetze. Wenn du geil auf Konsolen bist, brauchst du natürlich kein Portainer und kannst auch so alles einrichten.

    Ein anderer Punkt ist, dass Ordnung ganz wichtig ist. Eine Anwendung "lebt" in einem Container und bekommt von der Außenwelt nicht viel mit. Damit sie aber dennoch "nach Außen" kommunizieren kann, ist Docker quasi ein Übersetzer zwischen Container und Außenwelt. So wie Ports in einem Container nach draußen umgeleitet werden (z.B. wird AdGuards Port 80 zu Port 8001), wird es auch mit dem Datenspeicher gemacht. Sprengt jetzt den Rahmen, aber nur damit du es mal gehört hast: AdGuard arbeitet innerhalb des Containers mit dem Ordner /opt/adguardhome/conf. Diesen Pfad kannst du dir beim Einrichten des Container an eine beliebige Stelle auf dem Pi mounten. Bei mir liegt der z.B. bei /home/pi/adguard/conf. Heißt also, alles was AdGuard an seinen Pfad schreibt, wird eigentlich an den letzteren Pfad geschrieben und ist so für mich erreichbar. Mit der Zeit habe ich gemerkt, dass ich gleich von Anfang an es ordentlicher hätte machen sollen. In vielen Anleitungen findet man z.B. einen eigenen Docker-Ordner irgendwo im System und darin macht man dann für jeden Container nochmals einen eigenen Ordner. Später habe ich dann noch gesehen, dass man es sich mit Portainer richtig einfach machen kann, weil man dort direkt neue "Volumes" erstellen kann und die dann alle schön säuberlich an einer Stelle liegen. Wenn ich Zeit habe, werde ich bei mir alles nochmal umziehen lassen, weil im Moment alles verstreut liegt. Man sammelt so seine Erfahrungswerte mit der Zeit 😅


    Kelvin

  • trumax So wie ich das sehe ist das Problem der Portkollision nun obsolet, nachdem Apache wieder deinstalliert wurde und damit das Thema eigentlich erledigt. :conf:


    Oder soll trotzdem, vielleicht weil Du Interesse daran hast, die Möglichkeit mehrere Webserver gleichzeitig zu betreiben noch diskutiert werden?

  • Wenn der Nginx der Übersetzer der Portnummer ist, heißt dass dann auch, dass selbiger in keinen Docker kann? Oder ist das unabhängig davon wo dieser Dienst installiert ist?



    hyle

    Würde noch gerne meine obige Frage beantwortet haben.

  • Wenn der Nginx der Übersetzer der Portnummer ist, heißt dass dann auch, dass selbiger in keinen Docker kann? Oder ist das unabhängig davon wo dieser Dienst installiert ist?

    Doch das geht und ist gerade das coole daran. Nginx ist auch nur ein Container in Docker, aber dieser wird als einziger den Port 80 für HTTP (und Port 443, falls du HTTPS benutzt) bekommen. Also alle HTTP-Anfragen an deinen Pi werden bis in den Container von Nginx geschleust und dieser weiß dann, wohin er die jeweiligen Anfragen dann weiterleiten soll. Es ist nur wichtig, dass Nginx den Port 80 als einziger bekommt, damit er erstmal alles annehmen kann und er braucht die Portnummern der anderen, damit die Anfragen weitergeleitet werden können.

    Kelvin