DDEV unter Linux einrichten und dein erstes WordPress in einem beliebigen Ordner aufsetzen

Diverse Container als Symboldbild für Linux-Container bzw ddev Container

Wenn du als Web-Entwickler (egal ob als Hobby oder beruflich) unter Linux unterwegs bist und mehrere Projekte parallel betreust, dann kennst du das ewige Spiel mit lokalen Stacks. Mal läuft Apache, dann wieder Nginx, dazu kommen verschiedene PHP-Versionen, MySQL oder MariaDB, ein Mail-Catcher, vielleicht Redis oder Elasticsearch. Vor zehn Jahren habe ich das alles noch direkt auf dem Host installiert und gepflegt, aber das hat Spuren hinterlassen. Wer einmal versucht hat, drei WordPress-Installationen mit unterschiedlichen PHP-Versionen auf demselben Linux-System friedlich nebeneinander laufen zu lassen, der weiss, wovon ich rede.

Genau für solche Szenarien gibt es DDEV. Das Tool baut auf Docker auf und kapselt den ganzen Stack pro Projekt sauber in Container. Du wechselst von einem Projekt zum nächsten, DDEV fährt die passende PHP-Version hoch, generiert dir ein gültiges TLS-Zertifikat, gibt dir eine schöne URL nach dem Schema https://meinprojekt.ddev.site und kümmert sich um Datenbank, Mail-Catcher und alles, was sonst noch dazugehört. In diesem Tutorial gehe ich mit dir Schritt für Schritt durch eine komplette Installation auf einem Ubuntu-System. Ich gehe von Ubuntu oder einem Ubuntu-kompatiblen Derivat aus, der gleiche Ablauf funktioniert aber sinngemäss auf den meisten Linux-Distributionen, lediglich der Paketmanager und die Repository-Pfade unterscheiden sich. Auf Fedora nimmst du dnf statt apt, auf einer Arch-basierten Distribution wie CachyOS oder Manjaro greifst du via yay zum AUR-Paket ddev-bin, der Rest der Logik bleibt aber identisch.

Das System vorbereiten

Zuerst sorgst du dafür, dass dein System auf dem aktuellen Stand ist und ein paar Hilfsprogramme verfügbar sind. Öffne ein Terminal und führe folgende zwei Befehle aus:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl ca-certificates gnupg lsb-release

Damit hast du eine saubere Basis und alle Werkzeuge an Bord, die wir gleich für die Repository-Einrichtung brauchen.

Docker installieren

Als Nächstes brauchst du Docker. DDEV empfiehlt explizit nicht die Docker-Desktop-Variante für Linux, sondern die klassische Docker-Engine, oft Docker CE genannt. Die installierst du direkt aus dem offiziellen Docker-Repository, denn die Version aus dem Ubuntu-Universe ist meistens veraltet und kennt das buildx-Plugin in der nötigen Form nicht.

# Falls noch eine alte Docker-Version installiert ist, entferne sie
sudo apt remove docker docker-engine docker.io containerd runc

# GPG-Schlüssel von Docker hinterlegen
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Docker-Repository hinzufügen
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker installieren
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Wenn das durchgelaufen ist, hast du eine vollständige Docker-Installation samt buildx-Plugin, das DDEV intern braucht.

Den User in die docker-Gruppe und Autostart konfigurieren

Jetzt kommt der Schritt, den viele Einsteiger vergessen und dann Stunden mit Permission-Errors verbringen. Du musst deinen User der docker-Gruppe hinzufügen, sonst musst du jeden Docker-Befehl mit sudo absetzen, was DDEV nicht akzeptiert. Anschliessend stellst du sicher, dass docker und containerd beim Systemstart automatisch hochfahren, denn das ist nicht in jeder Distribution per Default so.

# User in die docker-Gruppe aufnehmen
sudo groupadd -f docker
sudo usermod -aG docker $USER

# docker und containerd dauerhaft aktivieren und sofort starten
sudo systemctl enable --now docker
sudo systemctl enable --now containerd

Damit die Gruppenzugehörigkeit greift, musst du dich entweder einmal abmelden und wieder anmelden, oder du startest deinen Computer kurz neu.

Danach kannst du mit einem schnellen docker run hello-world prüfen du, ob alles läuft. Du solltest die freundliche Hello-World-Meldung von Docker sehen, ohne sudo, ohne Fehler. Wenn das klappt, ist die Basis solide.

DDEV via apt installieren

Auch DDEV installierst du nicht aus den Standard-Quellen, sondern aus dem DDEV-eigenen apt-Repository. Das hat den Vorteil, dass du Updates über den ganz normalen apt upgrade mitbekommst und immer nahe an der aktuellen Version bleibst.

# GPG-Schlüssel von DDEV hinterlegen
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://pkg.ddev.com/apt/gpg.key | sudo tee /etc/apt/keyrings/ddev.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/ddev.asc

# Repository in der modernen deb822-Form eintragen
printf "Types: deb\nURIs: https://pkg.ddev.com/apt/\nSuites: *\nComponents: *\nSigned-By: /etc/apt/keyrings/ddev.asc\n" | sudo tee /etc/apt/sources.list.d/ddev.sources > /dev/null

# Paketinformationen aktualisieren und DDEV installieren
sudo apt update
sudo apt install -y ddev

Mit ddev --version kontrollierst du, ob die Installation geklappt hat. Du solltest eine Versionsnummer im Bereich von 1.24 oder höher sehen.

Alternativ gibt es für ddev auch ein Repository für Fedora, ein AUR Paket oder ein generisches Install-Script.

mkcert einrichten

Damit DDEV dir saubere HTTPS-Zertifikate für deine lokalen Domains ausstellen kann, brauchst du noch mkcert. Das Tool wird mit DDEV automatisch mitinstalliert, du musst aber die lokale Certificate Authority einmalig in den System-Trust-Store deines Browsers einspielen.

mkcert -install

Beim ersten Aufruf wirst du dein sudo-Passwort eingeben müssen, und Firefox-Nutzer müssen den Browser anschliessend einmal neu starten, damit die CA im Firefox-Trust-Store landet. Wenn du Chrome oder einen Chromium-basierten Browser nutzt, läuft das automatisch und ohne Neustart.

Wofür du DDEV überall brauchen kannst

Jetzt steht der ganze Unterbau. Bevor wir das erste Projekt aufsetzen, ein paar Worte dazu, was du mit DDEV eigentlich anstellen kannst, denn das Tool ist nicht nur für WordPress gedacht. Es kennt von Haus aus Drupal in mehreren Versionen, TYPO3, Laravel, Symfony, Magento, Shopware, Craft CMS, Statamic, October CMS und etliche weitere PHP-Frameworks. Du kannst auch ein generisches PHP-Projekt aufsetzen, mit Bedrock arbeiten oder DDEV als reines Node.js-Backend nutzen. Pro Projekt definierst du in der Datei .ddev/config.yaml deine PHP-Version, deine Datenbank, optional Redis, Solr oder Elasticsearch via Add-ons, und DDEV sorgt dafür, dass jedes Projekt unter einer eigenen URL erreichbar ist, ohne dass sich die Stacks gegenseitig in die Quere kommen.

Das wirklich Schöne ist die Reproduzierbarkeit. Du checkst dein Projekt zusammen mit dem .ddev-Ordner ins Git ein, ein Kollege klont das Repository, tippt ddev start und hat Sekunden später dieselbe Umgebung wie du. Keine "läuft bei mir, aber nicht bei dir"-Diskussionen mehr. In meiner täglichen Arbeit in der Agentur war das ein riesiger Sprung, und seit ich DDEV im Einsatz habe, will ich nichts anderes mehr.

WordPress in einem beliebigen Ordner aufsetzen

Genug der Theorie, ein konkretes Beispiel. Sagen wir, du hast irgendwo unter ~/Sites einen Ordner namens wp-test, in dem du eine frische WordPress-Installation aufsetzen möchtest. Den Ordner kannst du auch ganz woanders hinpacken, im Home-Verzeichnis, in einem Projekte-Ordner oder wo auch immer du deine Sourcecodes pflegst. DDEV ist es egal, solange du dich auf der Linux-Seite des Dateisystems befindest. Du legst den Ordner an und initialisierst DDEV darin:

mkdir -p ~/Sites/wp-test
cd ~/Sites/wp-test
ddev config --project-type=wordpress --docroot=. --create-docroot

DDEV legt dir nun einen .ddev-Ordner mit einer sinnvollen Default-Konfiguration an. Den Project-Type kannst du auch mit ddev config ohne Flags interaktiv beantworten, falls du den Optionen-Salat nicht magst. Anschliessend startest du den Stack und ziehst WordPress per WP-CLI direkt in das Projekt:

ddev start
ddev wp core download --locale=de_CH
ddev wp config create --dbname=db --dbuser=db --dbpass=db --dbhost=db
ddev wp core install --url=https://wp-test.ddev.site --title="WP Test" --admin_user=admin --admin_password=admin --admin_email=admin@example.com

Was passiert hier im Hintergrund? ddev start baut die Container hoch, registriert die lokale Domain wp-test.ddev.site, generiert ein gültiges TLS-Zertifikat über mkcert und startet einen Web-Container mit Nginx und PHP, einen Datenbank-Container mit MariaDB sowie einen Mail-Catcher namens Mailpit. Die ddev wp-Befehle sind übrigens nichts anderes als WP-CLI, das DDEV dir innerhalb des Containers bereitstellt. Du musst WP-CLI nicht separat installieren, DDEV hat es schon dabei.

Sobald der letzte Befehl durch ist, öffnest du https://wp-test.ddev.site im Browser und landest auf einer fertigen WordPress-Installation (alternativ kannst du auch ddev launch eingeben, das öffnet den browser automatisch mit der richtigen URL), mit gültigem grünem Schloss in der Adresszeile, einer leeren Datenbank und einem funktionierenden Login. Die Mails, die WordPress versendet, fängt Mailpit ab, und du erreichst die Web-Oberfläche dafür über ddev mailpit. Brauchst du Zugriff auf die Datenbank-Konsole, hilft ddev mysql oder wenn du phpmyadmin möchtest ddev phpmyadmin. Möchtest du eine Shell direkt im Web-Container, tippst du ddev ssh. Und wenn du das Projekt für heute genug hast, schaltest du es mit ddev stop ab, ohne dass etwas verloren geht.

Was du dir merken solltest

Jedes Projekt lebt in seinem eigenen Ordner, hat seine eigene .ddev/config.yaml, läuft in seinen eigenen Containern und kommt sich mit anderen DDEV-Projekten nicht ins Gehege. Du kannst zehn solche Projekte parallel auf der Maschine haben, jedes mit einer eigenen PHP-Version, und DDEV verwaltet das alles via Reverse-Proxy im Hintergrund. Wenn du einen Überblick willst, welche Projekte gerade laufen, hilft dir ddev list, und mit ddev poweroff schickst du den ganzen Reverse-Proxy samt aller Projekte schlafen, etwa wenn du auf dem Notebook Akku sparen willst.

Damit hast du eine vollwertige lokale Entwicklungsumgebung, die du in unter zehn Minuten von Null auf produktiv hochgezogen hast. Mein persönlicher Workflow seit Jahren ist exakt dieser, und ich möchte ihn für nichts auf der Welt mehr eintauschen. Gerade wenn du in der Agentur-Welt unterwegs bist und dauernd zwischen Kundenprojekten mit unterschiedlichen Technologie-Stacks hin- und herspringst, ist DDEV ein Produktivitätshebel, den man kaum überschätzen kann.