Bevor ich mit der eigentlichen Entwicklung beginnen kann, braucht man eine stabile Entwicklungsumgebung. Docker ist dafür perfekt geeignet, weil es WordPress, PHP und MySQL in isolierten Containern bereitstellt. So musst du nichts lokal installieren, kannst verschiedene Projekte sauber voneinander trennen und bist immer in einer konsistenten, reproduzierbaren Umgebung.
Da ich mich hier auch zum ersten mal an Docker versuche, gehe ich einfach alles Schritt für Schritt durch, bis alles zum los arbeiten aufgesetzt ist. Die Grundvoraussetzung damit alles so funktioniert ist zum einen, das unter Windows gearbeitet wird. Ansonsten könnten die Befehle etwas anders aussehen. Und dann muss noch Docker Desktop installiert sein. Dann kann es aber auch schon losgehen.
Projektstruktur und Umgebungsvariablen
Ich habe einen Projektordner angelegt, der die Konfiguration und die WordPress-Dateien enthält. Um sensible Daten wie Datenbankname, Benutzername und Passwort zentral zu verwalten, habe ich ein .env-File erstellt. Dieses enthält neben den MySQL-Zugangsdaten auch die Konfiguration für WordPress, wie z. B. den Datenbank-Host. Durch diese Auslagerung konnte ich die Konfiguration leicht ändern, ohne die Compose-Datei selbst anfassen zu müssen.
# MySQL Datenbank Konfiguration
MYSQL_DATABASE=wordpress
MYSQL_USER=wpuser
MYSQL_PASSWORD=wppass
MYSQL_ROOT_PASSWORD=rootpass
# WordPress Datenbank Einstellungen
WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=wpuser
WORDPRESS_DB_PASSWORD=wppass
Docker-Setup
Mit einer docker-compose.yml habe ich die Services definiert:
- MySQL-Container für die Datenbank, der über ein persistentes Volume die Daten speichert.
- WordPress-Container, der auf Port 8080 zugänglich ist und die WordPress-Dateien über einen Bind Mount lokal verfügbar macht.
Durch den Bind Mount liegen alle WordPress-Dateien im Projektordner. So kann ich Plugins, Themes oder PHP-Dateien direkt bearbeiten, während der Container läuft.
services:
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
volumes:
- ./wordpress:/var/www/html
depends_on:
- db
volumes:
db_data:
Container-Lifecycle
Die Container werden über Docker Compose gestartet, gestoppt und bei Bedarf komplett entfernt. Alte Datenbank-Volumes können bei Bedarf gelöscht werden, damit WordPress die Verbindung zu einer frischen Datenbank aufbauen kann. Mit diesem Setup lässt sich die Entwicklungsumgebung jederzeit reproduzieren, ohne dass die lokale Installation durcheinandergerät.
# stoppen
docker compose stop
# starten
docker compose start
# komplett entfernen (inkl. DB-Daten)
docker compose down -v
Vorteile dieses Ansatzes
Dieses Vorgehen bietet mehrere Vorteile für die Plugin-Entwicklung:
- Isolierte Umgebung: Kein Konflikt mit anderen WordPress-Installationen oder PHP-Versionen.
- Reproduzierbarkeit: Das Setup lässt sich leicht auf anderen Rechnern oder Teams übertragen.
- Lokaler Zugriff auf Dateien: Änderungen an Plugins und Themes wirken sofort.
- Einfache Wartung: Container können ohne Neuinstallation aktualisiert oder gelöscht werden.
Dieses Setup bildet die Basis für die weitere Plugin-Entwicklung, da ich nun eine stabile, konsistente WordPress-Umgebung habe, in der ich testen und entwickeln kann, ohne das Host-System zu belasten.
