Software-Entwicklung mit DDEV und Docker

DDEV für Entwickler - Beitragsbild

DDEV ist ein mächtiges Werkzeug für Softwareentwickler, die sich hauptsächlich mit Web-Entwicklung beschäftigen. Es ist ein Entwicklungsserver, ähnlich wie XAMPP, Mamp, etc. und bietet viele Werkzeuge, die diese Lösungen von Haus aus nicht mitliefern. Es ist ein Tool, welches in Kombination mit Docker verwendet wird. DDEV ist in der Lage mehrere Projektinstanzen ohne viel Konfigurationsarbeit als Docker-Container zu realisieren. So ist ein neues Projekt innerhalb kürzester Zeit mit zwei einfachen Befehlen aufgesetzt.

Hier möchte ich nur mal ein paar der vielen Vorteile nennen, die DDEV einem so zu bieten hat. Ich nutze dieses Tool nun fast täglich und es erspart mir eine Menge Arbeit und Zeit, die ich sonst mit der Konfiguration von aufwendigen Projektstrukturen verschwende. Grundsätzlich ist Docker für fortgeschrittenere Entwickler ein „Must-Have-Tool“ meiner Ansicht nach.

Kurze Übersicht über Vorteile

  • Web-Server (PHP, NodeJS) mit installierter Datenbank
  • Paketmanager wie Composer und DDEV vorinstalliert
  • Datenbank-Snapshots und Exporte ohne großen Stress
  • Lokale, vertrauenswürdige SSL-Zertifikate auf der Entwicklungsebene
  • Mehrere Projekte unter verschiedenen URLs gleichzeitig laufen lassen
  • Besonderer Support für Shopware, WordPress, Drupal uvm.
  • Temporärer Zugriff über einen Reverse-Proxy möglich

PHP und NodeJS

DDEV bietet die Funktionalität, individuelle PHP-Versionen zu nutzen. In jedem Projekt ist in dem Ordner „.ddev“ eine Datei „config.yaml“ zu finden. Dort wird in den ersten Zeilen eigentlich das wichtigste an Konfigurationsoptionen vorgeschlagen. Die gesamte Konfigurationsdatei ist jedoch länger und gibt einem so ziemlich alle Möglichkeiten, sein Projekt nach seinen Wünschen einzustellen. In dem gezeigten Beispiel habe ich ein WordPress-Projekt, welches ich auf der PHP-Version 8.1 und NGINX verwende. Reicht mir das nicht, kann ich in Handumdrehen die PHP-Version tauschen und ggf. auf Apache umwechseln. Nach einer Änderung muss lediglich der Befehl „ddev restart“ im Projektordner ausgeführt werden.

name: wordpress-development
type: wordpress
docroot: ""
php_version: "8.1"
webserver_type: nginx-fpm
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
database:
    type: mariadb
    version: "10.4"
use_dns_when_possible: true
composer_version: "2"
web_environment: []
nodejs_version: "18"

Eigene Dienste hinzufügen

Wenn einem die Standard PHP-Librarys nicht reichen, kann entweder über ein Dockerfile im Konfigurationsordner dieser einfach hinzugefügt werden, oder mittels einem Docker-Stack ein Satz von weiteren Containern angegeben werden, die dann im selben Docker-Netzwerk liegen wie der Entwicklungsserver. So können Dienste wie Postgres, Redis, CouchDB etc. einfach der Anwendung hinzugefügt werden. Auch in diesem Fall genügt ein reines „ddev restart“ und die erforderlichen Dienste werden mittels Docker bereitgestellt.

Datenbankzugriff

Eine Anwendung braucht eine Datenbank? Auch das ist kein Problem. DDEV stellt mit jedem Projekt automatische eine Datenbank bereit, welche über leicht zu merkene Zugangsdaten (aus der Anwendung) erreicht werden kann.

Hostnamedb
Port3306 (Standard)
Usernamedb
Passwortdb
Datenbankdb
Die Standard-Zugangsdaten für eine DDEV-Datenbank

Wird man versuchen diese Daten in eine SQL-Verwaltung wie HeidiSQL einzutragen wird man feststellen, dass das nicht geht. DDEV bucht sich für jeden neuen Start einen dynamischen Port (der allerdings auch in der Projektkonfiguration statisch hinterlegt werden kann), der über den Befehl „ddev describe“ abrufbar ist. Nur mit diesem Port wird der Netzwerkverkehr auf die Datenbank durchgeleitet.

Host & SSL-Zertifikate

Damit man bei dem Entwickeln von Client-Server Applikationen keine Probleme mit CORS oder dergleichen bekommt, stellt DDEV mittels „mkcert“ für jede Entwicklungsumgebung aus, die vom Browser auf dem eigenen Computer als vertrauenswürdig eingestuft werden. Da DDEV mit mehreren Projekten arbeiten kann, verzichtet man hier auf das gute alte „localhost“ und bedient sich an einem Docker-Router, der mit verschiedenen Hostnamen umgehen kann. Dabei ist immer der Projektname als „Subdomain-Teil“ anzusehen und endet auf „ddev.site“ als Hostname.

So sieht eine URL für eine Entwicklungsumgebung z.B. aus.

Portabilität von Projekten

Einer meiner Lieblingsargumente, warum man DDEV nutzen sollte ist, dass Entwickler Ihre gesamten Systeme schnell mit anderen Entwicklern teilen können. Dafür muss lediglich das Verzeichnis im Projektordner „.ddev“ in den aktiven Quellcode aufgenommen werden und ein neuer Entwickler kann sich den Code kopieren und in dem Projekt den Befehl „ddev start“ ausführen. DDEV kümmert sich dann darum, alles mögliche in Form von Docker-Containern auf dem System bereitzustellen. Datenbank, MailHog (zum Testen von Mail-Kommunikation aus der Anwendung), Webserver und ggf. weitere, selbst definierbare Dienste innerhalb einer „docker-compose.yml“.

So können auch Entwicklungssysteme die sonst mühsehlig eingerichtet werden müssen einfach einmal vorkonfiguriert werden. Ein gutes Beispiel wäre da z.B. Eine Software benötigt für das Caching einen Redis-Server. Die Konfiguration des Redis-Servers wurde durch den eigentlichen Entwickler in DDEV in Form der „docker-compose.yml“ definiert. Da der Entwickler ein Snapshot der Datenbank angelegt hat, kann nun ein externer Entwickler mit den Befehlen „ddev start“ und „ddev snapshot restore –latest“ das Projekt im selben Zustand zum laufen kriegen, ohne auch nur eine Dokumentation dazu gelesen haben zu müssen.

Wichtige Befehle

ddev startStartet das Projekt
ddev restartStartet das Projekt neu
ddev stopStoppt das Projekt
ddev poweroffStoppt alle DDEV-Projekte
ddev sshSchaltet sich auf den Docker-Container auf
ddev composerNutzt Composer im Hauptverzeichnis
ddev npmNutzt NPM im Hauptverzeichnis
ddev snapshotDatenbanksicherungen nutzen
ddev shareProjekt im Internet für kurze Zeit freigeben
Wichtige DDEV Befehle im Überblick.

Weitere Beiträge