Die Docker Devilbox

Das Devilbox Project ist ein fertiges LAMP Stack für Docker. Wenn du die Docker-Toolbox einsetzt, sind diese Angaben der Dokumentation lesenswert.

Um die Devilbox nutzen zu können muss Docker und Docker Compose auf deinem System installiert sein. Falls das noch nicht der Fall ist, kannst du dir die Devilbox Prerequisites Dokumentation für mehr Informationen zur Installation dieser Programme durchlesen.

Devilbox installieren und konfigurieren

Es ist keine Installation im eigentlichen Sinne notwendig. Du musst dir nur die Dateien von der Devilbox GitHub-Seite in ein leeres Verzeichnis herunterladen. Die Konfiguration erfolgt über eine einzelne Datei. In deinem Verzeichnis findest du die Datei env-example. Kopiere diese und benenne die Datei anschließend in .env um. In der neuen Datei kannst du jetzt deine Konfigurationen vornehmen. Notwendig sind Änderungen der folgende Einträge:

Die einzelnen Schritte (gerade auch für die Einträge NEW_UID und NEW_GID) sind in der Devilbox Dokumentation gut beschrieben. Für Contao selbst sollten die weiteren Einträge so gesetzt werden:

  • HTTPD_DOCROOT_DIR=DOCUMENT-ROOT (DOCUMENT-ROOT = public (bis und mit Contao 4.11 web), siehe auch Hosting-Konfiguration)
  • HTTPD_SERVER=apache-2.4
  • PHP_SERVER=8.2
  • MYSQL_SERVER=mariadb-10.3

Nach jeder Änderung der Konfiguration über die .env Datei muss die Devilbox neu gestartet werden.

Lösche keine Einträge in der .env Datei! Zum Beispiel ist standardmäßig der Eintrag HTTPD_SERVER=nginx-stable gesetzt und #HTTPD_SERVER=apache-2.4 ist auskommentiert (s. # am Anfang der Zeile). Zur Änderung derartiger Einträge musst du diese kommentieren bzw. auskommentieren. Ändere unbedingt auf HTTPD_SERVER=apache-2.4. Als Webserver könnte nginx genutzt werden. Für Contao sind dann allerdings weitere Konfigurationen des Webservers notwendig.

Die Devilbox starten

Wechsle nun in das Verzeichnis und starte die Devilbox mit Docker:

docker-compose up httpd php mysql

Erstmalig kann es etwas dauern, da zunächst die jeweiligen Docker Images geladen und die Container erstellt werden müssen. Ausserdem wird empfohlen, den ersten Start im Vordergrund auszuführen, damit etwaige Fehler besser sichtbar werden.

Erneute Starts sind dann wesentlich schneller und können im Hintergrund (Option -d) ausgeführt werden:

docker-compose up -d httpd php mysql

Die Devilbox beenden

Die Devilbox sollte durch den Stop aller Container und anschliessendem Löschen aller Container beendet werden.

docker-compose stop
docker-compose rm -f

Das Devilbox-Dashboard im Browser

Ist die Devilbox gestartet, kannst du nun deinen Browser aufrufen. Mit Eingabe von http://127.0.0.1 erreichst du das Devilbox-Dashboard. Über die Navigation erhältst du Zugriff auf die verschiedenen Funktionen.

Die zu verwendende IP-Adresse ist abhängig von deiner Docker-Umgebung. Wenn du die Docker-Toolbox installiert hast, lautet deine IP-Adresse möglicherweise anders. Die IP-Adresse kann über den Befehl docker-machine ip ermittelt werden.

Navigation Beschreibung
Home Status-Informationen
Virtual Hosts Liste vorhandender vHosts bzw. Webseiten
C&C Kommando und Kontrolle
Emails E-Mail Catch Service
Configs Eigene PHP und HTTPD Konfiguration
Databases Infos zu den Datenbanken
Info Weitere Informationen
Tools Zugriff auf Tools wie z. B. phpMyAdmin

Contao-Installation vorbereiten

Eine oder mehrere Contao-Installationen werden im Devilbox-Verzeichnis data/www erstellt. Je Contao-Installation musst du hier ein separates Verzeichnis anlegen. Der Verzeichnisname entspricht dann dem späteren vHost-Namen. Aus dem Verzeichnisnamen contao4 resultiert dann contao4.loc.

Damit der vHost-Name aufgelöst werden kann, musst du noch in /etc/hosts den Eintrag 127.0.0.1 localhost in 127.0.0.1 contao4.loc abändern.

Du hast ein Verzeichnis (z. B. contao4) erstellt. Wechsle in dieses Verzeichnis und erstelle einen neuen Unterordner public (bis und mit Contao 4.11 web). Kopiere in diesen Ordner die Contao Manager .phar Datei und benenne die Datei in contao-manager.phar.php um.

Die Domain-Suffix .loc ist voreingestellt. Dies kann aber in der .env Datei über den Eintrag TLD_SUFFIX geändert werden.

Die manuelle Bearbeitung der »/etc/hosts« kann u. U. vernachlässigt werden. Die »Devilbox« bietet hierzu eine Auto DNS Funktionalität an.

Ab Devilbox 3 kannst du auch das TLD-Suffix dvl.to verwenden. Damit werden automatisch alle *.dvl.to auf 127.0.0.1 geleitet.

Installation über den Contao Manager

Starte phpMyAdmin im Devilbox-Dashboard im Bereich Tools/phpMyAdmin und lege eine neue Datenbank an. Wechsle dann in der Navigation auf die Seite Virtual Hosts. Hier solltest du nun eine Liste deiner vorhandenen Web-Projekte sehen und auch gleich aufrufen können. Du kannst jetzt die Contao-Installation über den Contao Manager aufrufen. In unserem Beispiel also über: contao4.loc/contao-manager.phar.php.

Die weitere Vorgehensweise ist dann identisch wie in Contao installieren beschrieben.

Installation über die Kommandozeile

Das PHP Memory Limit für die PHP-Container der Devilbox ist standardmässig zu niedrig und muss daher für die Composer-Nutzung zuvor konfiguriert werden. Wechsle dazu in das Verzeichnis cfg. Hast du die Devilbox mit PHP 8.2 in der .env konfiguriert, mache die folgenden Änderungen dann entsprechend im Verzeichnis cfg/php-ini-8.2. Erstelle hier eine Datei memory_limit.ini mit folgendem Eintrag:

[PHP]
memory_limit = -1

Im Anschluss musst du die Devilbox neu starten. Im Devilbox-Hauptverzeichnis liegen die Dateien shell.sh bzw. shell.bat. Damit kannst du dich in den laufenden Devilbox PHP-Container (die Devilbox-shell) einklinken. Hier sind bereits zahlreiche Tools vorinstalliert (unter anderem Composer). Nach Aufruf befindest du dich im Container im Verzeichnis shared/http. Zur Installation von z. B. Contao 4.13 in ein Verzeichnis contao4 musst du lediglich eingeben:

composer create-project contao/managed-edition contao4 4.13

Lege dir eine neue Datenbank an:

mysql -u root -h mysql -p -e 'CREATE DATABASE db_contao4;'

Halte die Devilbox-Shell in einem separaten Terminal-Fenster während deiner Arbeit offen. Contao-Kommandos geben in der Devilbox-Shell u. U. mehr Informationen preis als wenn sie unter dem Host ausgeführt werden, z. B.:

vendor/bin/contao-console cache:warmup --env=dev -v

Angaben im Contao-Installtool

Die Angaben im Contao-Installtool sind grundsätzlich identisch. Du musst lediglich bei Datenbankverbindung auf folgende Einträge achten:

Eintrag Wert
Host mysql
Benutzername root
Passwort Keinen Wert eintragen

Der Benutzer root mit leerem Passwort ist die Devilbox Standard Einstellung. Dies kann über die Konfiguration geändert werden. In diesem Fall musst du im Contao-Installtool deine Werte entsprechend eintragen.

Nützliche Informationen: Mehrere php Versionen parallel betreiben (ab devilbox 3)

Die Grundeinstellung nimmst du im Devilbox-Verzeichnis vor.
Im Verzeichnis compose findest du die Datei docker-compose.override.yml-php-multi.yml. Kopiere die Datei in das Devilbox-Hautpverzeichnis und ändere den Dateinamen nach »docker-compose.override.yml«.

Du hast ein Projekt , das abweichend von der in der .env eingestellten PHP-Version (in unserem Beispiel 8.2) mit einer anderen php-Version - sagen wir 7.4 - laufen soll?
Lege in diesem Projektverzeichnis ein Verzeichnis .devilbox und darin eine Datei backend.cfg mit diesem Inhalt an:

conf:phpfpm:tcp:php74:9000  

Starte Devilbox wie folgt:

docker-compose up php httpd bind php74

Ein Beispiel:

Projekt .env php-Version backend.cfg vorhanden? bind Option Projekt läuft unter
contao5 8.2 Nein - 8.2
contao4 8.2 Ja php74 7.4

Du kannst in jedem Projektverzeichnis prophylaktisch die backend.cfg anlegen und den Inhalt auskommentieren, wenn das Projekt nicht gesondert behandelt werden soll.

Im Devilbox-Dashboard siehst du unter Virtual Hosts in der Spalte Backend, welche PHP-Version tatsächlich für ein Projekt im Einsatz ist. (Noch gibt es dort einen kleinen Fehler: Auskommentierte Konfigurationen werden nicht als passiv erkannt.)

Nützliche Informationen: PHP Xdebug

Im Devilbox-Handbuch findest du eine nicht ganz aktuelle Dokumentation, die aber das grundsätzliche Vorgehen gut aufzeigt.

In meiner IDE funktioniert folgende Konfiguration sehr gut:

{
  //
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for Xdebug",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "pathMappings": {
        "/shared/httpd/": "${workspaceFolder}/projects/"
      },
      "log": true,
      "stopOnEntry": true
    },
    .
    .
    .

  ]
}

Erstelle eine xdebug.ini im jeweiligen Verzeichnis devilbox/cfg/php-ini-x.y mit diesem Inhalt

; PHP.ini configuration
;  
[PHP]
; Defaults
xdebug.mode                 = debug
xdebug.remote_handler       = dbgp
xdebug.start_with_request   = yes

; How to connect
xdebug.client_port          = 9003
xdebug.client_host          = host.docker.internal
xdebug.discover_client_host = false

; Logging
xdebug.log                  = /shared/httpd/xdebug.log
xdebug.log_level            = 7

; IDE Configuration
xdebug.idekey               = VSCODE