Dieser Post soll eine kurze Einführung zu Docker und WordPress sowie die darunterliegenden Services geben und veranschaulichen wie diese miteinander interagieren.
1. Was ist Docker?
Docker ist eine Open Source Software die genutzt wird um Software Abhängigkeiten in einen Container zu bündeln. Container könnt ihr euch vorstellen als eine leichtgewichtige Version einer virtuellen Maschine(VM) die sehr sehr schnell hoch fahrbar ist. Es gibt noch viele besondere Eigenheiten, aber für unser Verständnis wird dies reichen.
Wenn der Container heruntergefahren wird, werden alle Daten gelöscht und bei der Neuinstantiierung eines Containers wird der Ausgangszustand wieder hergestellt – man spricht daher auch von Zustandslosigkeit.
2. Was ist WordPress ?
WordPress it ein Open-Source Content Management System mit einer sehr großen Community. Es gibt eine große Auswahl an Vorlagen um darauf aufbauend eigene Seiten zu erstellen, sei es ein Blog, Webseite oder E-Commerce Shop. Auch ohne vorherige Programmierkenntnisse können durch Plugins Funktionalitäten erweitert werden. Sollte auf dem WordPress marketplace doch kein passendes Template oder Plugin vorhanden sein, ist es auch möglich, eigene zu erstellen und diese zu teilen.
3. Was steckt hinter WordPress ?
Um WordPress zu nutzen wird ein Webserver benötigt, welcher die Skriptsprache PHP “verstehen kann” und eine Datenbank, um eingegebene Daten zu speichern.
3.1. Caddy als Webserver
Webseiten sind eigentlich nur Dateien auf einem anderem Computer welche noch einmal vorverarbeitet werden um auf dem Empfängerbildschirm schön aussehen zu lassen. Der Webserver ist dafür zuständig bei einer Anfrage mit den korrekten Dateien zu antworten. Sehr bekannte Webserver sind hierbei Apache Webserver und NGINX. Jedoch ist Caddy als weniger bekannte Alternative trotzdem nicht zu unterschätzen. Es ist ein leichtgewichtiger Webserver mit integrierter automatischer Erzeugung von TLS Zertifikaten durch Let’s Encrypt und ermöglicht eine einfache Konfiguration über ein “Caddyfile”. Es kann unter caddyserver.com/ heruntergeladen werden.
3.2. MySQL und MariaDB als Datenbank
WordPress speichert nicht jede abzurufende Seite als einzelne Datei. Vielmehr ist es so, dass jeder Inhalt eines Blog Post, Webseite oder gar Kategorien-Tag in einer Datenbank abgespeichert werden. WordPress nutzt dann PHP um die Datenbank abzufragen und das Ergebnis auf der Webseiten Vorlage (Template) auszugeben, weshelb es auch als Content Management System gilt. Es unterstützt offiziell das Open Source Datenbankmanagementsystem MySQL. Jedoch kann auch MariaDB als Ersatz für MySQL genutzt werden, da es ursprünglich aus dem Quellcode von MySQL heraus entwickelt wurde. Für einen tieferen Einblick würde ich auf folgenden Blog verweisen blog.panoply.io.
3.3. PHP-FPM
PHP ist eine Skriptsprache und ein Modul, welches vom Server aufgerufen wird um serverseitige Skripte zu übersetzen und die Ausgabe dem Clienten zu übertragen. Normallerweise würde das PHP Modul sich in der gleichen Umgebung befinden wie der Webserver. Im unserem Fall benutzen wir jedoch PHP-FPM welches ein eigenständiger Server mitsamt dem PHP Modul ist. Der eigentliche Webserver kann nun PHP Anfragen an das PHP-FPM Modul weiterleiten. Dies bringt den Vorteil einer Skalierung mit, wenn sich beispielsweise PHP Modul und Webserver auf unterschiedlichen Raspberry Pis befinden würden. In unserem Fall ist es eine nette Übung dies zu trennen und ist hilfreich, wenn wir nur unseren Server oder nur unsere PHP Version updaten wollen. Weiterführende Informationen zu PHP-FPM unter hostek.com.
4. Wichtige Dateien unserer WordPress Intallation
Wir haben unsere Services definiert. An dieser Stelle möchte ich explizit auch noch einmal darauf hinweisen, dass Container zustandslos sind – daher: bei Abschaltung werden unsere Daten gelöscht. Um die WordPress relevanten Daten zu speichern müssen wir diese identifizieren und auf unserem Host System binden. Dazu verbinden wir bestimmte Ordner von unserem Host System mit dem des Containers. Wenn nun Dateien in diesem Ordner gespeichert werden, werden sie auf dem Host System gepseichert. Wichtige Dateien sind Folgende:
-
- Datenbank spezifische Dateien
- die WordPress Installation an sich, mit Plugins, Templates, etc.
- die Caddy Webserver Konfiguration
- die TLS Zertifikate die durch Let’s Encrypt erstellt werden und uns HTTPS erlauben
5. Der Raspberry Pi
Der Raspberry Pi ist ein leistungsstarker kleiner Mini-Computer. Der größte Unterschied zwischem ihm und herkömmlichen Computern ist, dass der Prozessor eine andere Architektur besitzt und Computerbefehle anders entgegennimmt. Normalerweise ist dies kein Problem, da viele Anbieter ihre Software auch schon für den Raspberry Pi bereitstellen. Wir wollen jedoch mit Docker arbeiten welches wiederum mit Images arbeitet. Images die auf Intel Prozessoren kompiliert wurden und laufen, werden durch die anders übersetzten Befehle nicht auf dem ARM Prozessor unseres Raspberry Pi’s laufen. Das bedeutet, dass wir explizit nach ARM Images ausschau halten müssen (oder uns im Zweifel ein Image auf unserem Raspberry Pi noch einmal anhand des Rezeptes neu aufbauen müssen). Dies erwies sich zum Teil als problematisch, da ich beispielsweise kein MySQL v7 Image für die ARM Architektur gefunden habe und daher auf MariaDB umschwenken musste.
Pingback: #3 Wordpress backup und was zu beachten ist - hungsblog
Pingback: #1 Installation von Wordpress auf einem Raspberry Pi mit Hilfe von Docker-Compose in unter 10 Minuten - hungsblog
Hey Hung,
ebenfalls ehemaliger Informatikstudent (angewandte Informatik, Worms), 33 Jahre alt. Habe mich mega über deinen Beitrag zum Thema gefreut, weil ich fast verzweifelt bin. Erst hatte ich versucht, alles in separate Container aufzuteilen (LAMP / LEMP), was aber nicht gelang (es scheiterte immer an MySQL / MariaDB) oder daran, dass ich keine ARM-Variante für den Raspi fand. Das hier finde ich schon ziemlich nützlich. Würde gerne eine schlanke WP-Seite betreiben, die einen Webstream meines Aquariums darstellt. Zusätzlich zum Stream sollen noch Wasserwerte, Temperatur, PH-Werte etc. gemessen und ausgegeben werden. Beim Punkt mit der Seite könnte ich ja schonmal einen Haken machen, der Rest folgt dann noch. Vielleicht können wir uns ja mal vernetzen. Vielen Dank für deine Doku, bleib gesund.
Hey Thomas,
tatsächlich hatte ich damals auch Probleme gehabt die richtigen ARM Versionen zu finden, insbesondere die richtie und einigermaßen aktuelle Version von php 7 war damals nicht aufzutreiben. Der Pi ist zwar beliebt, aber eine Webseite will wohl nicht jeder damit betreiben.
Falls du weitere Schwierigkeiten haben solltest, kannst du mich gerne anschreiben. Dein Projekt klingt auf jeden Fall richtig cool und vollkommen geeignet für einen Pi.
Auf LinkedIn findest du mich auch hier. Diese Projekt habe ich in meiner Freizeit bearbeitet und beschäfftige mich normalerweise jedoch eher weniger mit Webentwicklung / Fullstack.
Beste Grüße
Hung
PS: ich habe mich sehr gefreut über dein Kommentar als “mit-auf-dem-Schlauch-Stehender”, da es doch schon recht viel Arbeit macht, alles nochmal auf Deutsch zu übersetzen. Ich bin daher froh, dass es dir geholfen hat 🙂