1. #1
    Avatar von luQ
    Registriert seit
    01.11.2012
    Beiträge
    27
    Thanked 3 Times in 3 Posts

    Standard

    Hey zusammen,

    Ich versuche, Docker besser zu lernen und mein Ziel ist es, einen Server zu erstellen, auf dem das Docker-Image von Nextcloud-fpm mit einer Website läuft, die meinen Lebenslauf enthält. Ich möchte einen Container auf Basis von Ubuntu verwenden, auf dem sowohl nginx als auch PHP läuft.

    Allerdings verstehe ich PHP nicht wirklich, und ich habe noch nie mit nginx gearbeitet. Ich habe daher ein paar Fragen:

    - Ist für Nextcloud eine weitere Einrichtung erforderlich? Der Container gibt nur FastCGI/FPM auf Port 9000 frei und scheint ansonsten nichts zu machen.

    - Wie verbinde ich den Container, auf dem Nginx läuft, mit dem Container, auf dem Nextcloud läuft? Ich habe gesehen, dass Leute das "fastcgi_pass 127.0.0.1:9000" machen, aber funktioniert das mit dem Nextcloud-Container oder sollte ich den Hostnamen/IP des Containers anstelle von localhost angeben?

    - Wie kann ich dann auf den Nextcloud-Container zugreifen?

    Es tut mir leid, wenn dies schon einmal gepostet wurde, aber ich kann wirklich nichts finden, das mir diese Dinge erklärt. Alle Tutorials, die ich gefunden habe, gehen davon aus, dass ich sowohl mit PHP als auch mit nginx Erfahrung habe...
    Geändert von luQ (11.12.2020 um 20:52 Uhr)

  2. #2
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Standard

    Hi,

    das Grundverständnis für einen Webserver und PHP, das man haben sollte, ist, dass ein Webserver wie Nginx statische Inhalte ausliefert. Das kann zum Beispiel HTML, CSS oder Javascript sein. Der Webserver liest einfach angeforderte Dateien wie test.html aus dem Dateisystem und schickt sie an den Browser.

    PHP ist dynamisch, was bedeutet, dass es zuerst vom PHP-Interpreter verarbeitet werden muss. Der Interpreter führt den PHP-Code aus und erzeugt eine Antwort. Diese ist normalerweise HTML. Da sie aber dynamisch generiert wird, könnte sie z.B. für verschiedene Benutzer unterschiedlich aussehen ("Hallo Tom" anstelle von "Hallo Max").

    Generell gibt es zwei Möglichkeiten, PHP zu prozessieren: Als Webserver-Modul oder als externer CGI-Dienst. Apache's mod_php ist ein Webserver-Modul: Wenn eine PHP-Datei angefordert wird, führt der Apache das PHP-Binary aus und sendet die Ausgabe an den Benutzer. Das ist einfacher, verursacht aber einen gewissen Overhead, da PHP (und andere Module) in den Webserver eingebettet sind. Sie werden daher bei jeder Anfrage mitgeladen.

    Nginx verfügt über kein solches Modul wie Apache. Er kann nur einen externen CGI-Prozess für PHP nutzen, wie bei anderen Skriptspachen (Perl, Python, ...) ebenfalls. Hier kann man PHP-FPM als Prozessmanager verwenden: Nginx liefert nur statische Dateien aus, wobei PHP an PHP-FPM übergeben wird. Der Prozessmanager findet oder startet einen PHP-Prozess, führt das Skript darauf aus und sendet die Antwort zurück an Nginx, der sie wiederum an den Benutzer ausliefert.* Mit anderen Worten: PHP-FPM ist nur ein Manager, der PHP-Prozesse startet und PHP-Skripte laufen lässt.

    Wenn man Nginx + PHP-FPM verwenden will, benötigt man für jede Anwendung einen eigenen Container. Da jeder Container seine eigene IP hat, ist es sinnvoll, fastcgi_pass php-fpm-container:9000 zu verwenden, wobei php-fpm-container der Hostname des PHP-FPM-Containers ist. 127.0.0.1 wird in einer richtigen Docker-Umgebung nicht funktionieren, dies ist für klassische Installationen ohne Docker, bei denen Webserver und PHP-FPM auf demselben Rechner laufen. Bei Docker ist es am besten, sich auf DNS-Namen zu verlassen, da sich die Container-IPs bei Neustarts ändern können.

    Um auf Nextcloud zuzugreifen, gibt es zwei Möglichkeiten:

    • Wenn es die einzige Anwendung ist, gibt man einfach Port 80/443 frei, so dass man direkt mit dem Hostnamen des Servers darauf zugreifen kann.
    • Wenn es andere Anwendungen gibt, ist der quick&dirty Weg, verschiedene Ports zu verwenden, wie 443 für Nextcloud, 444 für App X ... aber ich würde hier einen Reverse Proxy verwenden. Im Grunde könnte das ein Nginx oder ein beliebiger anderer Webserver sein. Ich empfehle Traefik, da man damit dynamisch Routen zum Docker-Container generieren kann, was es einfacher macht, weil man die Reverse-Proxy-Konfiguration nicht manuell pflegen muss. Ein weiterer Vorteil ist die Let'sEncrypt-Integration. U-Labs läuft damit seit Jahren und ich*habe seitdem nie ein Zertifikat angefordert oder geändert, Traefik macht das automatisch und spielt gut mit LetsEncrypt zusammen

  3. The Following User Says Thank You to DMW007 For This Useful Post:

    Darkfield (12.12.2020)

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.