DarkWolfCave
docker

Experimentieren & testen: WordPress mit Docker-Containern

Experimentieren & testen: WordPress mit Docker-Containern - docker Tutorial auf DarkWolfCave
DarkWolf denkt nach KI-Bild Generiert mit Gemini

WordPress in Docker Container installieren

Willkommen zu einem neuen Blogpost! Heute geht es um ein spannendes Thema für alle Technikbegeisterten und Bastler da draußen: Experimentieren und Testen mit WordPress und Docker-Containern. In diesem Beitrag nehme ich dich mit auf eine Reise durch meine Erfahrungen und teile meine persönliche Geschichte, wie ich WordPress mithilfe von Docker-Containern zum Laufen gebracht habe.Also schnalle dich an und lass uns loslegen!

DarkWolfCave.de

WordPress in Docker Container - Was benötigen wir?

Direkt eine Info zu Beginn: Ich werde WordPress in einem Docker Container installieren, aber nur in meinem lokalen Netzwerk betreiben. Dies dient bei mir lediglich als Developer-Umgebung. Also zum Entwickeln und Testen. Vielleicht werde ich einen weiteren Artikel erstellen, was es ansonsten noch so zu beachten gibt, wenn du hier tatsächlich WordPress für das Internet bereitstellen willst. Aber alleine aus Sicht der Absicherung würde ich davon abraten.

Aber zurück zu der lokalen Installation. Hierfür habe ich dir eine kleine Übersicht erstellt, damit du weißt, worauf du dich hier einlässt:

Was benötigen wir?Notwendig oder optional?
Raspberry Pi 4 oder Raspberry Pi 5 (oder Server)Notwendig
Installierten Docker-DienstNotwendig
Installierte Portainer-Umgebungoptional
Im Prinzip die entsprechenden Images, aber diese werden wir uns über docker compose files direkt ladenNotwendig

WordPress in Docker Container - Legen wir los

Ich setze voraus, dass du weißt, wie du dich mit deinem Raspberry Pi verbinden kannst, sowie dass Docker und Portainerbei dir bereits laufen. Falls du zu diesen Installationen Hilfe benötigst, schaue bitte oben in der Tabelle nach. Dort habe ich die entsprechenden Artikel verlinkt.

Starten wir also Portainer über den Webbrowser und melden uns auf der GUI an.

Volume erstellen - MySQL Daten persistent ablegen

Erstellen wir zuerst ein Volume für die MySQL Datenbank, damit diese auch sicher gespeichert sind, und nicht bei einem neuen deploy des Containers verloren gehen.

  • Volumes
  • Add Volume

Vergib einfach einen Namen wordpress_mysqldb_data und klicke auf Create the volume. Alle anderen Punkte kannst du so belassen, wie sie sind.

Wordpress in Docker Container - Portainer Volume

Jetzt hast du ein neues Volume, welches auf deinem Raspberry in der Regel dann unter /var/lib/docker/volumes/wordpress_mysqldb_data/_dataangelegt wurde.

Volume erstellen - WordPress Daten persistent ablegen

Bei mir gibt es eine kleine Besonderheit. Denn ich lege die persistenten Daten für WordPress auf meiner NAS über NFS ab. Ansonsten müsste ich die Benutzerrechte auf dem Raspberry Pi, wo normal die Docker-Container eingerichtet werden, ändern, sodass ich über SFPT / SSH meine WordPress Daten ablegen kann.

Da aber auf der NAS deutlich mehr Speicherplatz zur Verfügung steht, und die Daten in einem Backup gesichert werden, nehme ich diese Möglichkeit. Bei mir läuft eine Synology NAS. Daher kann die Konfiguration bei dir etwas anders verlaufen. In dem Fall, dass du deine persistenten Daten direkt auf deinem Raspberry Pi speichern möchtest, wähle in den folgenden Schritten dann einfach nur den Namen und als driver:local aus (also genauso wie wir es unter dem Punkt für das MySQL Volume durchgeführt haben). Alle anderen Schritte kannst du überspringen.

  • Volumes
  • Add Volume
  • Use NFS volume

Benenne das Volume, sehr sinnvoll, falls du mehrere unterschiedliche WordPress Seiten nutzen möchtest. Zum Beispiel: wordpress_seite_1 (oder den Namen deiner Webseite). Ich switche den Button Use NFS volume nach rechts und fülle die nun erscheinenden Parameter entsprechend aus.

  • Address = die IP-Adresse deiner NAS
  • NFS Version = belasse ich bei NFS4, kommt darauf an, was deine NAS unterstützt
  • Mount Point = der Pfad auf deiner NAS. Also der freigegebene Ordner. Bei Synology wichtig der Doppelpunkt am Anfang und der Name des Volumes
  • Options = belasse ich mit den default Werten

Wie immer das Ganze mit dem Knöpfchen Create the volume beenden.

Wordpress in Docker Container - Portainer Volume NFS

Volume erstellen - Für eine spezielle Wordpress.ini (php.ini)

Legen wir noch ein letztes Volume an. Hier werden wir später eine spezielle wordpress.ini Datei hinterlegen, die einige Werte in der php.ini innerhalb des Docker-Containers überschreiben wird.

Wir gehen wie gerade auch schon vor, ich überlasse es dir, ob auf deiner NAS oder direkt auf dem Raspberry Pi. Bitte beachte aber, dass du einen eigenen Ordner dafür benutzt. Hier darf später nichts anderes enthalten sein. Ich nenne dieses Volume wordpress_ini und habe den Ordner auf meinem NAS angelegt.

Wordpress in Docker Container - Portainer Volume

Anlegen der speziellen Wordpress.ini

Wir benötigen später noch eine wordpress.ini, die ein paar Änderungen an der internen php.ini vornimmt. Diese erstellen wir am besten jetzt schon und legen sie in dem gerade angelegten Volume (in meinem Beispiel wordpress_ini) ab.

Wir ändern ein paar Werte, denn Default in der php.ini im Container ist zum Beispiel upload_max_filesize = 2M, was für die wenigsten Plug-ins ausreichend wäre. Also, du könntest so kein größeres ZIP-File hochladen. Einfach die folgenden Werte in deine wordpress.ini hinzufügen und entsprechend auf dem Volume abspeichern.

file_uploads = On
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_time = 1000

WordPress in Docker Container - Erstellen wir uns Stacks

Ich habe mich für Stacks entschieden, da ich hier direkt mehrere Container mit einem Schritt erstellen kann. Insgesamt werden es mindestens zwei Stacks, die wir erstellen werden. Im Ersten deployen wir MySQL und phpMyAdmin, denn diese sollen allen WordPress-Instanzen zur Verfügung gestellt werden. Im Zweiten kommt dann die eigentliche WordPress-Instanz hinein.

Stack erstellen - MySQL und phpMyAdmin

Beginnen wir also direkt mit unserem ersten Stack für den MySQL und phpMyAdmin Container:

  • Stacks
  • Add stack
  • Create stack

Wordpress in Docker Container - Portainer compose editor

Als Namen verwende ich mysql_db_phpmyadmin und belasse die Auswahl bei ” Web editor”. In dem unteren Feld erstellen wir uns jetzt ein docker compose file:

Stack erstellen - WordPress

Damit wir nicht aus der Übung kommen, geht es auch direkt weiter mit dem Stack für unsere WordPress Instanz. Wie gerade beschrieben, mit Add Stack ein neues erstellen, einen Namen (zum Beispiel wp_projekt_1) vergeben und in dem Textfeld Folgendes einfügen. Beachte bitte, dass du vorher, wie oben beschrieben, die Volumes alle erstellt hast.

version : '3.9'

services:
  #Einstellungen für WordPress
  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8889:80    #interner Port (80 im Container) und externer 8889 (Raspberry)
    environment:
      WORDPRESS_DB_HOST: mysqldb #mysql db hostname
      WORDPRESS_DB_NAME: name-deiner-datenbank #Name deiner Datenbank
      WORDPRESS_DB_USER: wordpressuser #wie unter MYSQL_USER konfiguriert
      WORDPRESS_DB_PASSWORD: wordpresspass #wie unter MYSQL_PASSWORD konfiguriert
    volumes:
      - wordpress_seite_1:/var/www/html #Volume für persistente Daten (vorher erstellen)
      - wordpress_ini:/usr/local/etc/php/wordpress_ini #auch vorher erstellen
    command: ["sh", "-c", "cp /usr/local/etc/php/wordpress_ini/wordpress.ini /usr/local/etc/php/conf.d/wordpress.ini && docker-entrypoint.sh apache2-foreground"] #siehe darkwolfcave.de für Erklärung
    networks:
      - dwcwp_db

#Define volumes
volumes:
  wordpress_seite_1:
    external: true
  wordpress_ini:
    external: true

#Define networks
networks:
  dwcwp_db:
   external: true

Natürlich schauen wir uns auch wieder ein paar der Attribute etwas genauer an:

ports: - 8889:80Der vordere Port (8889) ist der, auf deinem Raspberry, und darf nicht doppelt vergeben sein. Der Hintere (80) ist der innerhalb des Containers.
WORDPRESS_DB_HOSTWenn du nichts weiter geändert hast, dann ist es mysqldb.
WORDPRESS_DB_NAMEDer Datenbankname für deine WordPress-Instanz. Entweder wie im ersten Stack angegeben oder wie in phpMyAdmin erstellt.
WORDPRESS_DB_USERWie unter MYSQL_USER angelegt
WORDPRESS_DB_PASSWORDWie unter MYSQL_PASSWORD angelegt
Volumes:
* - wordpress_seite_1:*Das Volume, welches wir weiter oben für die persistenten WordPress Daten angelegt haben.
- wordpress_ini:Das Volume, welches wir weiter oben für die WordPress.ini angelegt haben.
command: [“sh”, “-c”, “cp /usr/local/etc/php/wordpress_ini/wordpress.ini /usr/local/etc/php/conf.d/wordpress.ini && docker-entrypoint.sh apache2-foreground”]Dieser Befehl kopiert die wordpress.ini aus unserem Volume zu einem anderen Pfad innerhalb des Containers. Dafür muss natürlich die wordpress.ini vorher erstellt werden und in dem Volume vorhanden sein.

Wordpress in Docker Container - WordPress Installation

Herzlichen Glückwunsch! Du hast jetzt deine eigene WordPress Instanz auf deinem Raspberry, um damit lokal testen und ausprobieren zu können. Viel Spaß!

Warum denn zwei Stacks?

Jetzt fragst du dich vielleicht die ganze Zeit schon, warum packt der Kerl das in zwei getrennte Stacks? Warum nicht alles in einem, das würde doch auch gehen, oder?

Ja! Es würde auch funktionieren. Allerdings möchte ich mehrere unterschiedliche WordPress Instanzen in den Containern benutzen und diese auch gezielt starten und beenden können. Daher habe ich mich dazu entschlossen, jede WordPress Instanz in einem separatem Stack als Docker Container aufzusetzen.

Mein dritter Stack beinhalten ein passendes Volume, wo nur diese Daten abgelegt werden, und einen anderen Port. Der Rest bleibt also gleich. Es werden lediglich der Name, der Datenbankname und das Volume angepasst.

Falls du dies nachstellen möchtest, gibt es aber noch eine Sache zu beachten:

Manuelles erstellen der Datenbanken und User zuweisen

Falls du auch gerne mehrere WordPress Instanzen in deinen Docker Container laufen lassen möchtest, musst du in dem mysql_db_phpmyadmin Stack Folgendes durch eine # auskommentieren oder die Zeile ganz löschen:

MYSQL_DATABASE: name-deiner-datenbank #bei mehreren WordPress Instanzen bitte manuell in phpmyadmin anlegen und hier auskommentieren! Bitte Erklärung auf darkwolfcave.de beachten!

Jetzt wird natürlich auch keine Datenbank mehr automatisch erstellt und du musst dieses in phpMyAdmin selbst für jede verwendete Datenbank durchführen.

Nehmen wir kurz an, du möchtest für zwei Projekte von dir, jeweils eine WordPress Instanz in einem Docker Container laufen lassen.

  • Projekt1 = wordpressdb
  • Projekt2 = lerne_neue_sprachen

Der erste Stack bleibt, bis auf die Zeile mit dem MYSQL_DATABASE, so wie er ist. Logge dich also in deinem phpMyAdmin (IP-Adresse:PORT) über deinen Webbrowser ein und führe folgenden Befehl aus. Solltest du den User auf andere Art benannt haben, musst du hier “wordpressuser” entsprechend ersetzen:

CREATE DATABASE IF NOT EXISTS `wordpressdb` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
GRANT ALL PRIVILEGES ON wordpressdb.* TO 'wordpressuser'@'%';

Wordpress in Docker Container - SQL Query

Für dein zweites Projekt startest du dann noch einmal den SQL-Befehl, aber mit deinem anderen Namen:

CREATE DATABASE IF NOT EXISTS `lerne_neue_sprachen` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
GRANT ALL PRIVILEGES ON lerne_neue_sprachen.* TO 'wordpressuser'@'%';

Jetzt musst du nur noch in deinem zweiten und dritten Stack die richtigen Datenbanknamen hinter WORDPRESS_DB_NAME: schreiben und das Volume anpassen. Somit laufen bei dir zwei WordPress Instanzen in Docker Container, die du separat ein- und ausschalten kannst.

Du hast weitere Fragen oder benötigst Hilfe? Gerne versuche ich im Rahmen meiner Möglichkeiten dich zu unterstützen. Dafür kannst du hier die Kommentar-Sektion (nicht vergessen Antworten zu abonnieren) nutzen oder du schaust auf meinem Discord-Kanal vorbei.

FAQ - Frequently Asked Questions DarkWolfCave
DarkWolf hilft bei FAQs

Häufig gestellte Fragen

Was wird benötigt, um WordPress in einem Docker-Container zu betreiben?
Du benötigst entweder einen Raspberry Pi 4 oder einen neuen Raspberry Pi 5 (oder einen Server), einen installierten Docker-Dienst und optional eine installierte Portainer-Umgebung.
Warum sollte ich WordPress in einem Docker-Container betreiben?
Die Verwendung von Docker-Containern ermöglicht eine saubere und isolierte Umgebung für die Entwicklung und das Testen von WordPress. Dies erleichtert auch die Portabilität und Skalierbarkeit der Anwendung.
Wie erstelle ich den Stack für MySQL und phpMyAdmin?
Erstelle in Portainer einen Stack mit dem Namen "mysql_db_phpmyadmin" und füge das entsprechende docker-compose-File hinzu. Achte darauf, die MySQL-Datenbank und den Benutzer manuell über phpMyAdmin anzulegen, falls du mehrere WordPress-Instanzen betreiben möchtest. Alles Weitere findest du detaillierter in diesem Guide.
Kann ich mehrere WordPress-Instanzen auf demselben Raspberry Pi betreiben?
Ja, du kannst mehrere WordPress-Instanzen auf demselben Raspberry Pi betreiben, indem du separate Stacks für jede Instanz erstellst und entsprechende Anpassungen vornimmst.
Kannst du mir alles detailliert und komplett persoenlich erklaeren?
Natuerlich! Über eine entsprechende Patreon-Mitgliedschaft biete ich dir einen exklusiven und persoenlichen Zugang in Discord an. Hier stehe ich dir dann für deine Fragen zur Verfuegung. Gerne können wir auch in einem Discord-Call direkt an deinem PC alles Schritt für Schritt durchgehen. Wenn du also detaillierte Einblicke in meine Blog-Reihe "Snippets aus der Praxis" oder spezifische Fragen zu WordPress, Webentwicklung oder anderen Themen hast, stehe ich dir über die entsprechende Patreon-Mitgliedschaft persoenlich zur Verfuegung.

Kommentare

URLs werden automatisch verlinkt
Kommentare werden geladen...