Dockerisieren Sie jetzt Ihre PHP-Anwendung mit Nginx und PHP8-FPM

ACHTUNG: Da es viele Nachfragen gab und du auch auf der Suche nach einer Docker Umgebung mit PHP-FPM 8.1.8, composer, Xdebug 3, nginx und MariaDB bist, habe ich hier das passende Repository „docker-compose-nginx-phpfpm-xdebug-mariadb“ für dich.

Wenn Sie mit Docker noch nicht vertraut sind, empfehle ich Ihnen einen Blick auf die Unmengen von „Was ist Docker?“ und „Erste Schritte mit Docker“-Artikeln und Tutorials zu werfen, um dann wieder hierher zurückzukommen.

Da Sie weiter lesen, gehe ich davon aus, dass Sie bereits etwas Docker-Erfahrung besitzen und Ihre PHP-Anwendungen in Containern laufen lassen wollen. Denn wer will sich schon die Mühe machen, alle Abhängigkeiten auf seiner lokalen Umgebung zu installieren oder eine Reihe von virtuellen Maschinen für seine verschiedenen Projekte zu verwalten.

Wir werden eine einfache PHP-Anwendung unter Verwendung der offiziellen Docker-Repositories für PHP und Nginx einsetzen. Es gibt mehrere Docker-Repositories, die PHP-FPM mit Nginx kombinieren, aber wenn Sie sich nur auf die offiziellen Repositories verlassen, sind Sie absolut auf der sicheren Seite und richtigen Weg.

Als erstes installieren Sie auf Ihrem Rechner Docker, falls Sie dies noch nicht schon getan haben sollten. Die zweite Voraussetzung ist die Installation von Docker Compose. Wir haben unsere nötigen Werkzeuge und das Ziel vor Auge.

Einrichtung von Nginx

Basierend auf unseren Anforderungen wird Nginx ein Container sein. Auf diesem Container wird das offizielle Nginx-Image laufen. Da wir Docker Compose verwenden, erstellen wir nun die folgende Datei docker-compose.yml. Diese YAML wird das aktuellste Nginx-Image ausführen und setzt den Port 80 auf Port 8080:

version: "3.9"

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"

Jetzt können wir den Container laufen lassen.

$ docker-compose up

Nun sollten Sie die Willkommens Seite von Nginx auf Port 8080 über localhost oder der IP Ihres lokalen Rechners, über einen Browser Ihrer Wahl, angezeigt bekommen.

- Dockerisieren Sie jetzt Ihre PHP-Anwendung mit Nginx und PHP8-FPM 1 -

Jetzt haben wir einen lauffähigen Webserver und konfigurieren diesen noch etwas weiter aus. Zuerst müssen wir die Datei docker-compose.yml aktualisieren, um ein lokales Verzeichnis einzuhängen, welches wir innerhalb unseres Nginx Containers benötigen. Ich werde einen Ordner namens src verwenden, der sich im selben Verzeichnis wie unsere Datei docker-compose.yml befindet.

version: "3.9"

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./src:/var/www/html

Der nächste Schritt besteht darin, Nginx wissen zu lassen, dass dieser Ordner existiert.

Lassen Sie uns die folgende default.conf auf der gleichen Ebene wie die Datei docker-compose.yml erstellen:

server {
    index index.html;
    server_name phpfpm.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;
}

Wir schauen uns an, was wir hier überhaupt machen. Die index.html wird unser Standardindex sein, der Servername ist phpfpm.local und er sollte (Aktualisieren Sie unter Umständen Ihre hosts-Datei) auf Ihre Docker-Umgebung zeigen (Linux: localhost, Mac oder Windows: Lokale IP). Wir setzen noch die Protokolle im Falle eines Zugriffs oder Fehlers, so dass wir später die Logs in unserem Docker-Compose-Protokoll auch sehen können. Schließlich geben wir noch den Stammordner root an, den wir in den Container gemountet haben.

Damit diese Erweiterung greift, müssen wir noch eine weitere Änderung an unserer Datei docker-compose.yml vornehmen:

version: "3.9"

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./src:/var/www/html
            - ./default.conf:/etc/nginx/conf.d/default.conf

Dadurch wird die default.conf zum Verzeichnis hinzugefügt, in dem Nginx nach einzubindenden Konfigurationsdateien sucht. Sie können nun eine index.html Datei mit beliebigem Inhalt in den src Ordner legen.

Wir starten wieder unseren Container:

$ docker-compose up

Schauen Sie sich nun unter phpfpm.local:8080 den Inhalt der index.html in Ihrem Browser an.

Website hallo - Dockerisieren Sie jetzt Ihre PHP-Anwendung mit Nginx und PHP8-FPM 2 -

PHP-FPM hinzufügen

Jetzt, wo unser Nginx-Webserver läuft, können wir PHP ins Spiel bringen. Als erstes holen wir uns das offizielle PHP8-FPM Repo und verknüpfen es mit unserem Nginx-Container.

Folgendes gilt es zu beachten: PHP wird in seiner eigenen Umgebung (Container) ausgeführt und hat keinen Zugriff auf den Code. Wir müssen den src-Ordner auch in den PHP-Container einhängen. Auf diese Weise wird Nginx in der Lage sein, alle statischen Dateien zu bedienen, und PHP wird in der Lage sein, seine Dateien zu finden, die es interpretieren soll.

Unsere docker-compose.yml sollte jetzt wie folgt aussehen:

version: "3.9"

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./src:/var/www/html
            - ./default.conf:/etc/nginx/conf.d/default.conf
        links:
            - php-fpm
    php-fpm:
        image: php:8-fpm
        volumes:
            - ./src:/var/www/html

Als nächstes müssen Sie Nginx so konfigurieren, dass es den PHP-FPM-Container für die Interpretation von PHP-Dateien verwendet.

Unsere aktualisierte default.conf:

server {
    index index.php index.html;
    server_name phpfpm.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

Um unsere Änderungen zu testen, benennen wir die Datei index.html in index.php um und ersetzen ihren Inhalt:

<?php
echo phpinfo();

Und zu guter Letzt.

$ docker-compose up

Wir gehen wieder zurück in unseren Browser. Nach einer Aktualisierung sehen wir die begehrten PHP-Infos.

phpfpm 8.1.8 - Dockerisieren Sie jetzt Ihre PHP-Anwendung mit Nginx und PHP8-FPM 3 -

Jetzt können Sie jede einfache PHP-Anwendung mit Hilfe von Docker-Containern ausführen, und nutzen dazu die offiziellen Images für Nginx und PHP.

Das Beispiel Projekt dazu finden Sie hier:
https://github.com/IshtarStar/docker-compose-nginx-phpfpm

Diese Anleitung und Konfiguration, sollte niemals auf einem Produktiv-Server eingesetzt werden und ist auch kein Beispiel für Best Practice. Dieser Beitrag dient als Einstieg für Anfänger im Umgang mit Docker Compose.

Wenn Sie eine lokale Domain in Ihrem privaten Netzwerk für andere Geräte oder Dienste erreichbar machen möchten, lesen Sie sich aufmerksam diesen Artikel durch: Wie weisen Sie einem Raspberry Pi einfach eine statische lokale Domäne zu?

Inhaltsverzeichnis

Twitter
Facebook
LinkedIn
XING
Reddit
Email

2 Antworten

  1. Hallo,

    ich scheitere an der Angabe von phpfpm.local zu localhost unter raspberry pi (docker Installation). Kommt diese Angabe unter etc/hosts hinein?

    Dort habe ich die IP Adresse des Raspi angegeben und danach „phpfpm.local“.

    Doch es tut sich nix. Was ist falsch?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.