Hier zeige ich euch, wie ihr mehrere Instanzen von WordPress auf eurem Server betreiben könnt. Traefik dient uns hier als Reverse Proxy und stellt später den Dienst verschlüsselt per TLS bereit.
Datum | Änderungen |
---|---|
13.04.2020 | Erstellung dieser Anleitung |
29.05.2023 | Anpassung der Anleitung |
Ich gehe in dieser Anleitung nicht näher auf WordPress ein. Als Grundlage dieser Anleitung dient die Anleitung zur Installation von WordPress. Dort findet ihr auch Hilfe, wie ihr die Sicherheit erhöhen könnt.
0. Grundvoraussetzung
- Docker & Docker Compose v2 (Debian / Ubuntu)
- TRAEFIK V2 + 3 – REVERSE-PROXY MIT CROWDSEC IM STACK EINRICHTEN
1. Verzeichnisse erstellen
Zuerst erstellen wir uns die Verzeichnisse für zwei Webseiten. Dies könnt ihr natürlich für beliebig viele machen.
mkdir -p /opt/containers/seite1/{database,app} mkdir -p /opt/containers/seite2/{database,app}
2. Docker Compose anlegen
Anschließend legen wir für beide Seiten ein Docker File an.
Bei dieser Anleitung haben wir später insgesamt 4 Container. 2 für WordPress und 2 Datenbanken. Es wäre auch möglich, dass ihr 2x WordPress mit nur 1er Datenbank betreibt. Ich persönlich finde diese Variante aber besser, da dann jede Instanz ihre eigene Datenbank hat und auch alles einzeln gesichert werden kann.
2.1 Webseite 1 anlegen
nano /opt/containers/seite1/docker-compose.yml
version: '3.1' services: wordpress1: image: wordpress restart: unless-stopped container_name: wordpress1 environment: WORDPRESS_DB_HOST: wordpress-db1 WORDPRESS_DB_USER: exampleuser ## Hier Benutzer eingeben ## WORDPRESS_DB_PASSWORD: examplepass ## Hier Passwort eingeben ## WORDPRESS_DB_NAME: wordpress volumes: - ./app:/var/www/html labels: - "traefik.enable=true" - "traefik.http.routers.wordpress1.entrypoints=websecure" - "traefik.http.routers.wordpress1.rule=Host(`webseite1.euredomain.de`)" - "traefik.http.routers.wordpress1.middlewares=default@file" - "traefik.http.routers.wordpress1.tls=true" - "traefik.http.routers.wordpress1.tls.certresolver=http_resolver" - "traefik.http.routers.wordpress1.service=wordpress1" - "traefik.http.services.wordpress1.loadbalancer.server.port=80" - "traefik.docker.network=proxy" networks: - proxy - default wordpress-db1: image: mariadb:10.6-focal container_name: wordpress-db1 restart: unless-stopped environment: MYSQL_DATABASE: wordpress MYSQL_USER: exampleuser ## Hier selben Benutzer eingeben ## MYSQL_PASSWORD: examplepass ## Hier selbes Passwort eingeben ## MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: - ./database:/var/lib/mysql networks: - default networks: proxy: external: true
Notwendige Anpassungen:
- MySQL Passwort ändern
- MySQL User ändern
- eure Domain bei Traefik anpassen („webseite1.euredomain.de“)
2.2 Webseite 2 anlegen
nano /opt/containers/seite2/docker-compose.yml
version: '3.1' services: wordpress2: image: wordpress restart: unless-stopped container_name: wordpress2 environment: WORDPRESS_DB_HOST: wordpress-db2 WORDPRESS_DB_USER: exampleuser ## Hier Benutzer eingeben ## WORDPRESS_DB_PASSWORD: examplepass ## Hier Passwort eingeben ## WORDPRESS_DB_NAME: wordpress volumes: - ./app:/var/www/html labels: - "traefik.enable=true" - "traefik.http.routers.wordpress2.entrypoints=websecure" - "traefik.http.routers.wordpress2.rule=Host(`webseite2.euredomain.de`)" - "traefik.http.routers.wordpress2.middlewares=default@file" - "traefik.http.routers.wordpress2.tls=true" - "traefik.http.routers.wordpress2.tls.certresolver=http_resolver" - "traefik.http.routers.wordpress2.service=wordpress2" - "traefik.http.services.wordpress2.loadbalancer.server.port=80" - "traefik.docker.network=proxy" networks: - proxy - default wordpress-db2: image: mariadb:10.6-focal container_name: wordpress-db2 restart: unless-stopped environment: MYSQL_DATABASE: wordpress MYSQL_USER: exampleuser ## Hier selben Benutzer eingeben ## MYSQL_PASSWORD: examplepass ## Hier selbes Passwort eingeben ## MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: - ./database:/var/lib/mysql networks: - default networks: proxy: external: true
Notwendige Anpassungen:
- MySQL Passwort ändern
- MySQL User ändern
- eure Domain bei Traefik anpassen („webseite2.euredomain.de“)
3. WordPress Instanzen starten
WordPress startet ihr wie gewohnt mit folgendem Befehl:
docker compose -f /opt/containers/seite1/docker-compose.yml up -d docker compose -f /opt/containers/seite2/docker-compose.yml up -d
Nun könnt ihr auf beide Webseiten gehen (webseite1.euredomain.de und webseite2.euredomain.de) und WordPress getrennt von einander betreiben. Damit wird es euch möglich, dass ihr mehrere Webseiten zu verschiedenen Themen auf einem Server betreiben könnt. In diesem Fall wurden zwei WordPress Instanzen parallel gestartet. Dies könnt ihr so lange wiederholen, wie euer Server Kapazitäten hat.
Super Anleitung!
Eine Frage: Sollte man nun für jede Instanz einen eigenen API Key bei CrowdSec einrichten, oder reicht hier einer für alle?
Wäre erfreut, wenn ihr das mal für Typo3 umsetzen könntest.
Das startet aber 2x jeweils die Anwendung WP, Traeffik und MySQL!
Mir schwebt eher vor WP per Compose 2x zu starten (jeweils für Seite1 und Seite2), aber Traeffik und MySQL nur 1x per extra compose Datei zu starten und die WP-Seiten mit den vorhandenen Traeffik und MySQL zu verbinden.
Gibt es dafür auch eine Lösung bzw. wie sehe diese genau aus?
Hallo,
eine Sehr schöne anleitung. hat alles wunderbar geklappt.
Ich hätte eine Frage bezüglich einer zusätzlichen subdomain aka www.
Gibt es die möglichkeit pro Seite 2 oder mehrere Host zu setzen, so das diese auch in Traefik ringebunden und die seite umleiten? Wäre sehr net für einen lösung.
Greets,
Caspar
Servus Christian,
wärst du so nett mir da weiterzuhelfen?
Ich habe probiert phpmyadmin als docker-compose auszuführen und damit dann extern auf die datenbank anderer container zuzugreifen, leider ohne Erfolg.
Wäre wirklich cool wenn du mir die paar Zeilen Code für die Docker-Compose geben könntest!
Liebe Grüße und ein schönes Wochenende!
Hey Christian,
könnte man hier noch phpmyadmin mit als Container einbauen?
LG
Hallo Christian,
da ist noch ein kleiner Fehler in der docker-compose.yml für die zweite WordPress Instanz:
– “traefik.http.routers.wordpress-2-secure.service=wordpress-2” und nicht beschrieben – “traefik.http.routers.wordpress-2-secure.service=wordpress-1”
VG