Es gibt viele Wege, WordPress zu hosten – von Managed-Hosting-Lösungen bis zur Selbstinstallation auf einem eigenen Server. In dieser Anleitung zeige ich dir, wie du WordPress sicher und mit HTTPS auf deinem Server betreibst – komplett isoliert via Docker Compose mit Traefik als Reverse Proxy und automatischer Let’s Encrypt-Zertifikatsverwaltung.
Warum nutze ich Docker Compose?
- All-in-One-Konfiguration: Beschreibe alle notwendigen Dienste (WordPress, Certbot, Reverse Proxy) in einer einzigen `docker-compose.yml`-Datei.
- Isolation: Keine Abhängigkeiten zu deinem Server – alles läuft in einem Container.
- Automatisierte HTTPS-Zertifikate: Traefik kümmern sich um SSL/TLS, ohne manuelles Eingreifen.
Es gibt natürlich auch andere Möglichkeiten. Für mich hat sich Docker Compose aber bewährt.
Voraussetzungen
- Server:
- Öffentliche IPv4-Adresse
- SSH-Zugriff
- Docker und Docker Compose installiert (Anleitung)
- Domain: Bereits konfigurierte Domain mit korrekter A/AAAA-Record-Zuordnung.
- Grundkenntnisse: Linux-Befehle, Docker-Grundlagen von Vorteil!
WordPress Docker Compose Setup – Schritt für Schritt
1. `docker-compose.yml` erstellen
Basierend auf meinen bisherigen Erfahrungen und den Herausforderungen, die mir begegnet sind, habe ich die Docker Compose Datei kontinuierlich optimiert und verbessert. Mittlerweile bin ich zufrieden.
Erstelle eine Datei `docker-compose.yml` mit folgendem Inhalt, idealerweise in einem WordPress Ordner:
services:
traefik:
image: traefik:latest
restart: unless-stopped
container_name: traefik
command:
- '--entryPoints.web.address=:80'
- '--entryPoints.websecure.address=:443'
- '--providers.docker=true'
- '--certificatesResolvers.myresolver.acme.httpChallenge=true'
- '--certificatesResolvers.myresolver.acme.httpChallenge.entryPoint=web'
- '--certificatesResolvers.myresolver.acme.email=DEINE_EMAIL@deine-domain.de' # 🔴 Mail anpassen
- '--certificatesResolvers.myresolver.acme.storage=/letsencrypt/acme.json'
- '--log.level=DEBUG'
- '--accesslog=true'
- '--accesslog.fields.defaultmode=keep'
- '--accesslog.fields.names.ClientAddr=keep'
- '--accesslog.fields.names.RequestHost=keep'
- '--accesslog.fields.names.RequestPath=keep'
- '--accesslog.fields.names.RouterName=keep'
- '--accesslog.fields.names.ServiceName=keep'
- '--accesslog.fields.names.EntryPoint=keep'
ports:
- '80:80'
- '443:443'
- '8080:8080'
volumes:
- '/var/run/docker.sock:/var/run/docker.sock:ro'
- './letsencrypt:/letsencrypt'
wordpress:
image: wordpress:latest
restart: unless-stopped
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: password # 🔴 Passwort anpassen
WORDPRESS_DB_NAME: wordpress
volumes:
- './wp_data:/var/www/html'
labels:
# Allgemein
- 'traefik.enable=true'
- 'traefik.http.routers.wordpress.rule=Host(`deine-domain.de`) || Host(`www.deine-domain.de`)' # 🔴 Domains anpassen
# HTTPS aktivieren
- 'traefik.http.routers.wordpress.entrypoints=websecure'
- 'traefik.http.routers.wordpress.tls.certresolver=myresolver'
# HTTP to HTTPS
- 'traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https'
- 'traefik.http.routers.wordpress.middlewares=redirect-to-https@docker'
- 'traefik.http.routers.wordpress-http.rule=Host(`deine-domain.de`) || Host(`www.deine-domain.de`)' # 🔴 Domains anpassen
- 'traefik.http.routers.wordpress-http.entrypoints=web'
# HSTS Header
- 'traefik.http.middlewares.hsts.headers.stsSeconds=31536000'
- "traefik.http.middlewares.hsts.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.hsts.headers.stsPreload=true"
- "traefik.http.routers.wordpress.middlewares=hsts@docker"
db:
image: mariadb:10.6.4-focal
restart: unless-stopped
volumes:
- './db_data:/var/lib/mysql'
environment:
MYSQL_ROOT_PASSWORD: password # 🔴 Passwort anpassen
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: password # 🔴 Passwort anpassen
2. Anpassungen vornehmen
- Ersetze alle 🔴 markierten Stellen:
- `DEINE_EMAIL@deine-domain.de` → Deine E-Mail für Let’s Encrypt-Benachrichtigungen.
- `deine-domain.de` → Deine registrierte Domain.
- `password` → Starke Passwörter.
3. Docker-Container starten
Führe im Verzeichnis der `docker-compose.yml` folgenden Befehl aus:
docker compose up -d
Überprüfung & Erfolgskontrolle
- HTTPS prüfen: Öffne `https://deine-domain.de` – es sollte eine sichere Verbindung (🔒) und die WordPress-Installationsseite erscheinen.
- Container-Status:
docker compose ps
Alle Services sollten `running` anzeigen.
Fazit
Mit dieser Docker-Compose-Lösung hast du eine sichere und leicht wartbare WordPress-Instanz mit automatischer HTTPS-Verschlüsselung. Das Setup ist ideal für alle, die maximale Kontrolle über ihre Infrastruktur wünschen – ohne komplexe Server-Konfiguration.
Viel Erfolg beim Umsetzen! Hast du Fragen oder Anregungen? Hinterlasse mir gerne einen Kommentar.