Rund 4 Jahre lang hat mir mein MacBook Pro treue Dienste als Entwicklungsrechner geleistet. Nach dem Entschluss diesen zu verkaufen und mich aus dem Exkurs in die Apple Welt zu verabschieden, quälte ich mich über ein Jahr mit Windows Rechner und Linux VMs. Ein neuer Laptop mit Linux musste her. Nach langer Suche schreibe ich diesen Artikel auf meinem neuen Laptop mit Linux. Ein Lenovo T590 mit Core i5 und Ubuntu 20.04.

Allerdings wollte ich nicht mehr das alte angestaubte LAMP (Linux Apache MySQL PHP) Setup als Entwicklungsumgebung benutzen. Die Technik hat sich weiterentwickelt und jeder verwendet doch jetzt diese "Container".

Aus den Jahren mit MacOS kannte ich MAMP Pro. Damit konnte man locker die PHP-Version während des Betriebes wechseln. Das Feature war nicht sehr oft genutzt, konnte einem dann aber doch hin und wieder das Leben erleichtern. Die Möglichkeit wollte ich wiederhaben, dass sollte man doch mit diesen flexiblen "Containern" hinbekommen.

Es gibt verschiedene Tools und Ansätze, um mit Containern zu arbeiten. Mit Docker hatte ich allerdings schon ein paar Erfahrungen auf dem Mac sammeln können, auch wenn diese nicht sehr von Erfolg gekrönt waren.

So begab ich mich auf die Suche.

Die Suche nach Erleuchtung oder auch "Wie setze ich mir eine Joomla! Entwicklungsumgebung mit Docker auf für Dummys"

Docker und den offiziellen Joomla! Container kannte ich bereits. Der Container funktioniert und ich hatte ihn bereits für Installations- und Updatetests verwendet. Aber er war mir etwas zu steif, zumal es keine Joomla! 4 Variante zu diesem Zeitpunkt gab.

Nach einigen Recherchen, Tests und einem Tipp von David J., bin ich bei phpdocker.io gelandet. Diese Webseite bietet einen Dienst an, um sich mit ein paar einfachen Klicks eine Zusammenstellung aus drei Containern mit Datenbank, Server und PHP-Interpreter herunter zu laden. Mir gefiel die Idee der automatischen Generierung der Wunsch-Container und daher möchte ich euch diese in meinem ersten Blogpost etwas näherbringen. Zudem werden nicht nur die Docker Files erstellt, sondern auch einige speziellen Einstellungen in den Applikationen vorgenommen, mit denen man sich sonst zuerst auseinandersetzen müsste.

phpdocker.io

Die Seite ist sehr einfach aufgebaut und ist in sieben Bereiche aufgeteilt. Zuoberst sind die generellen Einstellungen. Hier trägt man zuerst den Projektnamen ein. Mit diesem Namen werden die Container später benamt. Für das Beispiel habe ich myfirstdev gewählt. Aufbauend auf dem Basis Port (Beispiel 5555), werden die einzelnen Ports für die Container zur Kommunikation untereinander, wie auch die Kommunikation nach außen festgelegt. Für Joomla! brauchen wir dann nur den generischen Applikationstyp auswählen.

Im zweiten Bereich können bereits die PHP-Version und die Erweiterungen ausgewählt werden. Hier habe ich direkt PHP 7.4 stehen lassen und bin zu den nächsten Sektionen gegangen. MySQL, PostgreSQL, Elasticsearch und die "Zero-Config Services" haben mich nicht interessiert. Mit dem Schalter bei MariaDB habe ich die Datenbank hinzugefügt und es wurde gleich die richtige Erweiterung zur PHP Konfiguration hinzugefügt.

In der MariaDB Sektion kann man die Version, den Datenbanknamen, Benutzernamen und die Passwörter festlegen. Die meisten Hoster benutzen immer noch eine 5.5 Version der MariaDB, daher habe ich diese auch hier gewählt. Bei mir geht es nur um lokale Entwicklungscontainer, womit ich diese Infos sehr einfach gehalten und in allen Feldern das gleiche eingetippt habe (Im Beispiel firstDev). Bei öffentlich zugänglichen Containern sollte man sich an dieser Stelle mehr Mühe geben.

Dann kann man unten auch bereits auf "Generate project archive" klicken und sich die ZIP Datei herunterladen.

phpdocker.io

Docker und Docker Compose

Wie ihr Docker und Docker Compose installieren könnt und diese grundsätzlich funktionieren, könnt ihr am besten in der Docker Dokumentation nachlesen. Diese zwei Themen hier zu besprechen würde den Rahmen des Artikels sprengen. Ich habe euch hier die zwei Links zu den Installationsanleitungen

Das erste Setup

Die ZIP Datei, die ihr gerade heruntergeladen habt, entpackt ihr an einen beliebigen Ort. In dem ZIP befindet sich eine docker-compose.yml und ein Ordner phpdocker, in dem sich unter anderem eine README.md findet, welche ihr auf jedenfalls lesen solltet. Zuerst starten wir mal die Container mit sudo docker-compose up -d, dazu müsst ihr auf eurer Konsole in den entpackten Ordner gehen, sodass ihr die docker-compose.yml sehen könnt. Nach etwas Bewegung solltet ihr dann sehen, dass eurer Container erfolgreich gestartet wurden.

compose up -d

Jetzt kann bereits der Browser geöffnet werden und über localhost:5555, solltet ihr dann eine Fehlermeldung bekommen "File not found", was an dieser Stelle vollkommen in Ordnung ist.

first localhost

Die Container, beziehungsweise der Webserver, ist darauf eingestellt, dass im Ordner, in der auch eure docker-compose.yml liegt, ein Ordner namens public vorhanden ist. Dieser muss selbst erstellt und dann mit der gewünschten Applikation versorgt werden. Die gewünschte Joomla! Version wurde zuvor von https://downloads.joomla.org/cms heruntergeladen und entpackt. Die entpackten Dateien kopieren wir in den public Ordner. Bevor wir aber weiter machen können, müssen wir noch die Dateiberechtigungen anpassen, sodass der Webserver auch auf die Dateien zugreifen kann.

Wie man das macht ist seit der aktuellen Version durch meinen Beitrag auch in der README.md enthalten und kann im Detail dort nachgesehen werden.

docker-compose exec -it php-fpm chown -R www-data:www-data /application/public

Joomla! installieren

Jetzt können wir im Browser die Seite neu laden und sehen nun die Installationswebseite von Joomla!. Ich gehe davon aus, dass die Leser dieses Artikels Joomla! bereits kennen und wissen, wie sie Joomla! installieren können. Falls nicht, dann könnt ihr die nötigen Information unter docs.joomla.org finden.

Ich gehe an dieser Stelle nur auf die Besonderheiten mit den Containern ein.

Auf der Seite mit den Datenbankeinstellungen müsst ihr als Servernamen mariadb angeben und die Zugangsdaten, wie ihr sie beim Erstellen der Container weiter oben angegeben habt.

Datenbank

Joomla! wird beim Klick auf Weiter eine Warnung und eine Fehlermeldung anzeigen, da wir einen anderen Servername wie localhost angegeben haben. Die Fehlermeldung besagt, dass ihr eine bestimmte Datei aus dem Installationsverzeichnis löschen müsst, sonst geht es an dieser Stelle nicht weiter.

Anderer Servername Als Localhost

Des Weiteren kann die Joomla! Installationsroutine normal beendet werden. Schon habt ihr Joomla! in einer Docker Umgebung installiert und könnt es wie gehabt verwenden.

Im nächsten Teil wird die Entwicklungsumgebung noch weiter verfeinert und wir werden eine Erweiterung zum daran Arbeiten in Joomla! installieren.