Willkommen in diesem FrankenPHP-WordPress-Boilerplate!
Mit nur wenigen Befehlen bekommst du eine lauffähige WordPress-Instanz auf Basis von FrankenPHP, MariaDB, Dragonfly (Redis-kompatibel) und phpMyAdmin – komplett in Docker 🛳️.
- Docker ≥ 20.10
- Docker Compose (ab Docker v20.10 ist
docker composebereits integriert) make– unter macOS & Linux vorinstalliert, unter Windows z. B. über Git for Windows oder WSL.
# 1) Repository klonen (falls noch nicht geschehen)
git clone <repo-url> frankenphp-wordpress
cd frankenphp-wordpress
# 2) Eigene Umgebungsvariablen festlegen
cmp .env.example .env # Werte im Editor anpassen
# 3) WordPress herunterladen (legt ./wordpress an)
make install-wp
# 4) docker-compose für die gewünschte Umgebung generieren
make init-dev # Development
# oder
make init-prod # Production
# 5) Stack builden
make build
# 6) Stack starten (FrankenPHP, MariaDB, Dragonfly, phpMyAdmin)
make upWenige Sekunden später erreichst du:
- 🔗 WordPress:
http://localhost:8080 - 🔗 phpMyAdmin:
http://localhost:8081- Anmeldedaten: die Werte aus
.env(MYSQL_USER&MYSQL_PASSWORD)
- Anmeldedaten: die Werte aus
💡 Der Standard-Admin-Benutzer von WordPress wird wie gewohnt beim Einrichtungsassistenten angelegt. 💡 Beim WordPress-Installationsassistenten ist der Datenbank-Host
db(nichtlocalhost).
| Befehl | Beschreibung |
|---|---|
make init-dev |
Kopiert docker-compose.dev.yml → docker-compose.yml |
make init-prod |
Kopiert docker-compose.prod.yml → docker-compose.yml |
make up |
Container bauen (falls nötig) & im Hintergrund starten |
make start |
Gestoppte Container starten |
make stop |
Container anhalten, ohne sie zu löschen |
make down |
Container anhalten & löschen (Volumes bleiben) |
make restart |
Container neu starten |
make logs |
Live-Logs aller Container folgen |
make build |
Images neu bauen |
make clean |
Voller Reset: Container, Images, Volumes & Orphans löschen |
make install-wp |
Aktuelle WordPress-Quelle laden & nach ./wordpress entpacken |
make fix-perms |
Setzt Besitzer von ./wordpress auf UID 33 (www-data) |
make fix-perms-host |
Setzt HOST_UID/GID in .env und übernimmt die Rechte auf deinen User |
make set-fs-direct |
Fügt define('FS_METHOD','direct') in wp-config.php ein |
make help |
Übersicht aller Targets |
| Service | Zweck | Port |
|---|---|---|
| frankenphp | PHP 8.4 Runtime + Webserver (Basis: dunglas/frankenphp:php8.4) |
Prod: 80 → 80, 443 → 443, Dev: 8080 → 80, 8443 → 443 |
| db | MariaDB 11 mit persistenter Volume-Ablage (db_data) |
3306 |
| dragonfly | Dragonfly Redis-kompatibel für WordPress Object Caching | Dev: 6379 → 6379 |
| phpmyadmin | GUI-Verwaltung für MariaDB | 8081 → 80 |
-
Site-Datei anlegen
caddy/site.caddyfile(Endung.caddyfileist wichtig){$SERVER_NAME} { root * /app/public # WordPress Root im Container encode zstd br gzip php_server # FrankenPHP Shortcut file_server }
{$SERVER_NAME}wird automatisch durch den Wert aus.enversetzt. -
Compose-Mount aktivieren
Indocker-compose.ymlbeim Servicefrankenphp:volumes: - ./wordpress:/app/public - ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro - ./caddy/wordpress.caddyfile:/etc/caddy/Caddyfile.d/wordpress.caddyfile:ro - ./caddy/opcache.ini:/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini:ro - caddy_data:/data - caddy_config:/config
-
Stack neu bauen & starten
make build make up
Caddy holt sich bei öffentlicher Domain automatisch TLS-Zertifikate. Für lokale Hosts bleibt es bei HTTP.
Alle Variablen werden in .env gepflegt und im docker-compose.yml genutzt:
| Variable | Default | Beschreibung |
|---|---|---|
SERVER_NAME |
localhost |
Öffentliche Domain/Host deiner WP-Site (FrankenPHP-Variable) |
MYSQL_DATABASE |
franken |
Name der Datenbank |
MYSQL_USER |
frankenuser |
DB-User |
MYSQL_PASSWORD |
frankenpass |
DB-Passwort |
MYSQL_ROOT_PASSWORD |
rootpass |
Root-Passwort (nur intern) |
REDIS_HOST |
dragonfly |
Redis-Server Hostname |
REDIS_PORT |
6379 |
Redis-Server Port |
DRAGONFLY_MAX_MEMORY |
512mb |
Redis/Dragonfly max memory |
HOST_UID |
1000 |
UID für Dateirechte im WordPress-Volume (Dev) |
HOST_GID |
1000 |
GID für Dateirechte im WordPress-Volume (Dev) |
🔒 Sicherheit:
.envist in.gitignoregelistet. Teile echte Zugangsdaten nie in öffentlichen Repos!
Das Setup inkludiert einen Dragonfly Container, der Redis-kompatibel ist und perfekt für WordPress Object Caching funktioniert.
- Redis Object Cache von Till Krüss (empfohlen)
- W3 Total Cache mit Redis-Backend
- WP Redis
- WordPress-Plugin über Admin-Backend installieren
- Plugin aktivieren
- Bei Redis Object Cache: auf "Enable Object Cache" klicken
- Die Verbindung zu
dragonfly:6379wird automatisch erkannt
💡 Tipp: Dragonfly ist bis zu 25x schneller als Redis bei gleichem Speicherverbrauch!
make clean # entfernt ALLES (Container, Images, Volumes)Siehe LICENSE.
Viel Spaß 🎉