Loading...
Macht es Sinn, WordPress in einem Container zu deployen?

Macht es Sinn, WordPress in einem Container zu deployen?

Lukas Mauser - Co-Founder von sliplane.ioLukas Mauser
9 min

Ich hatte meine Höhen und Tiefen mit WordPress, ich bin ehrlich gesagt kein Hardcore-Fan, aber man kann die Beliebtheit nicht leugnen.

Du kannst Docker verwenden, um eine WordPress-Instanz auf deinem lokalen Computer und in der Cloud zu starten. Aber macht es Sinn, WordPress in Docker zu verwenden?

Wann es keinen Sinn macht, WordPress in Docker zu betreiben

Für nicht-technische Benutzer ist es normalerweise zu viel Aufwand, Docker lokal zu betreiben. Es bringt eine Lernkurve mit sich und es gibt andere Tools, die den Einstieg viel einfacher machen:

  • Lokale Entwicklungstools wie XAMPP, MAMP oder Local
  • Managed Hosting - lass das lokale Setup weg und gehe direkt zu einer verwalteten WordPress-Plattform wie WordPress.com, WP Engine oder Kinsta
  • Traditionelles Shared Hosting: immer noch die günstigste Option für einfache WordPress-Seiten

Du kannst natürlich trotzdem Docker verwenden, es ist nichts grundsätzlich falsch an einem WordPress-in-Docker-Setup. Tatsächlich gibt es einige gute Gründe dafür...

Wann es Sinn macht, WordPress in Docker zu betreiben

Wenn du andererseits Entwickler bist und vielleicht sogar in einem Team mit häufigen WordPress-Deployments arbeitest, macht es viel Sinn, WordPress in Docker zu betreiben. Es ist wirklich nützlich, die Produktionsumgebung auf deinem eigenen Computer für die Entwicklung zu spiegeln und sie einfach mit dem Team zu teilen, sodass alle Entwickler konsistente Umgebungen haben, besonders wenn du an mehreren Seiten mit verschiedenen PHP-Versionen, Datenbanken oder OS-Plugins arbeitest.

In Kombination mit Sliplane kannst du deine containerisierten Apps einfach deployen und Fortschritte intern und mit Kunden teilen, das Deployment in eine QA-Pipeline integrieren.

Ich kenne viele Entwickler, die überhaupt nicht mit Docker umgehen wollen, und ich war früher auch so einer. Am Anfang kann es sich wie viel schmerzhafter Overhead anfühlen, das Setup zum Laufen zu bringen. Allerdings wird es einen Wendepunkt geben, nachdem du dir einige grundlegende Docker-Konzepte angeeignet hast, und an diesem Punkt willst du nicht mehr zurück!

Kannst du WordPress in Docker in der Produktion betreiben?

Absolut. WordPress in Docker zu betreiben ist auch in einer Produktionsumgebung möglich.

Wenn du mit Docker vertraut bist, ist es ziemlich einfach, kleine bis mittelgroße WordPress-in-Docker-Setups zu starten. Das Schwierigere ist, es sicher zu halten und eine konsistente Wartung zu gewährleisten. Wenn du dich nicht damit beschäftigen willst, ist es wahrscheinlich eine gute Idee, sich für eine verwaltete Docker-Hosting-Lösung zu entscheiden.

Einige Vorteile des Betriebs von WordPress in Docker:

  • sehr flexibel, du kannst alles hinzufügen und installieren
  • erschwinglich: du bekommst viel Rechenleistung für wenig Geld
  • portabel, du kannst einfach zu einem anderen Host wechseln
  • weit verbreitet

WordPress in Docker zu betreiben kann herausfordernd werden, sobald du eine bestimmte Größe mit zehntausenden von Seiten, Millionen von monatlich aktiven Benutzern und hunderten Gigabytes an Dateispeicher erreichst. Aber selbst dann kann das Setup mit ein paar Anpassungen sehr groß skalieren. Hier sind einige Dinge, über die du nachdenken solltest, obwohl ich normalerweise empfehle, diese Komponenten nur hinzuzufügen, wenn du sie wirklich brauchst (und du kannst das spüren: langsame Seite, Speicher voll, Abstürze, ...)

  • Persistenter Speicher: es ist okay, Themes auf deinem Server zu speichern, aber wenn es um Medien geht, bist du besser dran, wenn du einen Object-Storage-Anbieter wählst. Es gibt Plugins wie Media Cloud, die den Wechsel sehr einfach machen.
  • Caching: ab einer bestimmten Größe macht es Sinn, Caching hinzuzufügen, um Anfragen zu beschleunigen, zum Beispiel Redis über das Redis Cache Plugin
  • Separate Datenbank: verschiebe die Datenbank auf eine separate Maschine. Es macht Sinn, die Datenbank im selben Netzwerk zu behalten und wenn möglich private Verbindungen zu verwenden.
  • Load Balancing: Wenn vertikale Skalierung nicht mehr funktioniert, kannst du einen Load Balancer vor deine WordPress-Instanz setzen und die Last auf mehrere Instanzen verteilen. Das erfordert allerdings, dass deine WordPress-Container statuslos sind.

Wie man WordPress in Docker betreibt

Wir müssen zwei Container einrichten:

  1. Datenbank-Container (MySQL/MariaDB) - speichert deinen WordPress-Inhalt, Benutzer, Einstellungen usw.
  2. WordPress-Container - führt die PHP-Anwendung aus und stellt deine Website bereit

Mit Docker CLI

Lass uns damit beginnen, ein Netzwerk zu erstellen, damit die Container miteinander kommunizieren können:

# Erstelle ein Netzwerk
docker network create wordpress-network

Als nächstes starten wir den Datenbank-Container, wir verwenden MySQL:

# MySQL ausführen
docker run -d \
  --name wordpress-db \
  --network wordpress-network \
  -e MYSQL_DATABASE=wordpress \
  -e MYSQL_USER=wp_user \
  -e MYSQL_PASSWORD=wp_pass \
  -e MYSQL_ROOT_PASSWORD=root_password \
  -v mysql_data:/var/lib/mysql \
  mysql:9.4

Aufschlüsselung dieses Befehls:

  • docker run -d - Führt den Container im detached Modus aus (im Hintergrund)
  • --name wordpress-db - Gibt dem Container einen freundlichen Namen, auf den wir verweisen können
  • --network wordpress-network - Verbindet den Container mit unserem benutzerdefinierten Netzwerk
  • -e MYSQL_DATABASE=wordpress - Erstellt eine Datenbank namens "wordpress"
  • -e MYSQL_USER=wp_user - Erstellt einen MySQL-Benutzer für WordPress
  • -e MYSQL_PASSWORD=wp_pass - Setzt das Passwort für diesen Benutzer
  • -e MYSQL_ROOT_PASSWORD=root_password - Setzt das MySQL-Root-Passwort
  • -v mysql_data:/var/lib/mysql - Erstellt ein persistentes Volume zur Speicherung von Datenbankdaten
  • mysql:9.4 - Verwendet das offizielle MySQL 9.4 Docker Image

Jetzt, da unsere Datenbank läuft, können wir den WordPress-Container deployen:

# WordPress ausführen
docker run -d \
  --name wordpress-site \
  --network wordpress-network \
  -p 8080:80 \
  -e WORDPRESS_DB_HOST=wordpress-db:3306 \
  -e WORDPRESS_DB_NAME=wordpress \
  -e WORDPRESS_DB_USER=wp_user \
  -e WORDPRESS_DB_PASSWORD=wp_pass \
  -v wordpress_data:/var/www/html \
  wordpress:latest

Aufschlüsselung dieses Befehls:

  • docker run -d - Läuft im detached Modus
  • --name wordpress-site - Benennt den Container für einfache Referenz
  • --network wordpress-network - Verbindet sich mit demselben Netzwerk wie unsere Datenbank
  • -p 8080:80 - Mappt Port 8080 auf deinem Computer zu Port 80 im Container
  • -e WORDPRESS_DB_HOST=wordpress-db:3306 - Sagt WordPress, wo die Datenbank zu finden ist (unter Verwendung des Container-Namens)
  • -e WORDPRESS_DB_NAME=wordpress - Spezifiziert, welche Datenbank verwendet werden soll
  • -e WORDPRESS_DB_USER=wp_user - Datenbank-Benutzername (muss mit dem übereinstimmen, was wir in MySQL gesetzt haben)
  • -e WORDPRESS_DB_PASSWORD=wp_pass - Datenbank-Passwort (muss mit dem übereinstimmen, was wir in MySQL gesetzt haben)
  • -v wordpress_data:/var/www/html - Macht WordPress-Dateien und Uploads persistent
  • wordpress:latest - Verwendet das offizielle WordPress Docker Image

Deine WordPress-Seite wird unter http://localhost:8080 verfügbar sein.

Mit Docker Compose

Du kannst auch Docker Compose verwenden, um den Prozess zu vereinfachen:

Erstelle eine docker-compose.yml-Datei:


services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_pass
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:9.4
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_pass
      MYSQL_ROOT_PASSWORD: root_password
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wordpress_data:
  db_data:

Dann führe aus:

docker-compose up -d

WordPress in Docker deployen

Es gibt einige Anbieter, bei denen du deine Container deployen kannst. Wenn du nach einer Lösung mit minimalem Overhead suchst, empfehle ich Sliplane.

Schritt 1: Erstelle ein neues Projekt

  1. Besuche Sliplane und melde dich mit deinem GitHub-Account an.
  2. Klicke auf "Create Project" und gib deinem Projekt einen Namen (z.B. WordPress). Dieses Projekt wird als Container-Umgebung dienen, in der du zwei Services deployen wirst: einen für MySQL und einen für WordPress.

Schritt 2: Deploye einen MySQL Service

  1. Klicke im Projekt-Dashboard auf "Deploy Service".
  2. Erstelle einen neuen Server, um deinen MySQL-Service zu hosten. Du kannst den Standort und Servertyp auswählen, der Basis-Server sollte stark genug sein, um zu beginnen.
  3. Wähle das "MySQL"-Preset aus den verfügbaren Services. Dieses Preset verwendet das bitnami/mysql-Image unter der Haube und kommt mit sinnvollen Standard-Konfigurationen. Du kannst auch andere Datenbank-Container wie MariaDB verwenden, die ähnlich mit WordPress funktionieren.
  4. Konfiguration überprüfen: Das MySQL-Preset ist vorkonfiguriert und kann so deployed werden, aber du kannst es bei Bedarf weiter anpassen. Ich empfehle, den öffentlichen Zugang zur Datenbank aus Sicherheitsgründen zu deaktivieren.
  5. Klicke auf "Deploy Service" und warte ein paar Sekunden, bis das Deployment abgeschlossen ist.

Schritt 3: Deploye einen WordPress Service

Nachdem dein MySQL-Service erfolgreich deployed und läuft, ist der nächste Schritt, den WordPress CMS-Container zu deployen. Dieser Container wird sich mit deiner MySQL-Datenbank verbinden, um Daten zu speichern und abzurufen.

  1. Klicke in deinem "WordPress"-Projekt erneut auf "Deploy Service".
  2. Wähle den Server aus, auf dem dein MySQL-Service läuft.
  3. Wähle "Registry" als Deploy-Quelle
  4. Gib im "Image URL"-Feld "wordpress" ein und wähle das offizielle WordPress-Image aus dem Dropdown. Wir gehen mit der neuesten Version, aber du kannst einen spezifischen Tag wählen, wenn du möchtest.
  5. Konfiguriere im Bereich Environment Variables folgendes:
    WORDPRESS_DB_HOST=internal-mysql-hostname
    WORDPRESS_DB_NAME=wordpress
    WORDPRESS_DB_USER=wp_user
    WORDPRESS_DB_PASSWORD=wp_pass
    

    Wichtig: Stelle sicher, dass diese Werte exakt mit dem übereinstimmen, was du in deinem MySQL-Service konfiguriert hast. Der WORDPRESS_DB_HOST sollte den internen Hostnamen deines MySQL-Containers verwenden.

  1. Füge ein neues Volume mit einem Namen deiner Wahl hinzu und setze den Mount-Pfad auf "/var/www/html". Hier werden deine WordPress-Dateien und Uploads gespeichert.
  2. Gib dem Service abschließend einen Namen und klicke auf "Deploy Service".

Nachdem das Deployment abgeschlossen ist, kannst du auf deine WordPress-Seite unter der zugewiesenen URL zugreifen und mit der Installation fortfahren.

Zusammenfassung

Für nicht-technische Benutzer ist traditionelles Hosting einfacher, aber für Entwickler, die konsistente Umgebungen pflegen und so nah wie möglich an der Produktion arbeiten wollen, ist die Verwendung von WordPress in Docker eine großartige Wahl.

Du kannst auch WordPress-Docker-Setups in der Produktion betreiben, aber es erfordert einiges technisches Wissen, und wenn du dich nicht mit dem Overhead beschäftigen willst, ist eine verwaltete Lösung wie Sliplane der richtige Weg.

Willkommen in der Container-Cloud

Sliplane macht es einfach, Container in der Cloud zu deployen und bei Bedarf zu skalieren. Probier es jetzt aus!