WordPress mit HTTPS, Traefik & Docker Compose – Einfache 3 Schritte Anleitung

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

  1. HTTPS prüfen: Öffne `https://deine-domain.de` – es sollte eine sichere Verbindung (🔒) und die WordPress-Installationsseite erscheinen.
  2. 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.

Schreibe jetzt einen Kommentar!