Tutorial: Raspberry Pi als WordPress-Server einrichten

Nie zuvor war es einfacher eine eigene Website zu erstellen. Oftmals haben solche einfachen Lösungen aber nur limitierte Konfigurationsmöglichkeiten. Eine der beliebtesten Lösungen zum Erstellen von einfachen Seiten und Blogs ist WordPress. Um die volle Kontrolle über unsere Daten zu haben, entscheiden wir uns für einen Raspberry Pi WordPress-Server, der zu Hause gehostet wird. Was dafür benötigt wird und worauf wir achten müssen, schauen wir uns in diesem Tutorial an.

Übrigens: Zwar ist diese Anleitung in erster Linie für WordPress gedacht, aber du kannst auch jede andere PHP Anwendung entsprechend auf dem Raspberry Pi lauffähig machen. Dazu brauchst du einfach nur den WordPress Installationsteil überspringen bzw. zu ersetzen.

 

Zubehör

Die folgenden Schritte können auf jedem Raspberry Pi mit Netzwerkverbindung (Ethernet oder W-LAN) ausgeführt werden. Dennoch empfiehlt es sich bei höherer Last einen leistungsstärkeren Pi – wie das 4er Modell mit 4 GB – zu nehmen. Außerdem empfehle ich eine Netzwerkverbindung per Ethernetkabel. Mein Setup sieht dabei folgendermaßen aus:

Mein Pi ist dabei direkt neben dem Router platziert und somit einfach per Kabel verbunden.

 

Vorbereitung

Wir beginnen bei der Installation des Betriebssystems: Zwar kann ein existierendes Raspberry Pi OS verwendet werden, aber es empfiehlt sich die Raspberry Pi OS Lite Version zu verwenden, da diese ohne unnötige Desktopumgebung kommt. Nachdem wir das Image heruntergeladen haben, flashen wir es auf die SD-Karte. Damit wir nicht per Tastatur am Raspberry Pi arbeiten müssen, erstellen wir auf der SD-Karte eine leere Datei namens ssh, nachdem der Flash-Vorgang fertig ist. Dadurch ist der SSH Zugriff aktiviert und wir können uns von unserem PC verbinden, nachdem der Pi gestartet und mit dem Netzwerk verbunden ist.

Auf Linux/Mac Systemen können wir das über die Kommandozeile:

ssh pi@raspberrypi

Alternativ kannst du auch die IP-Adresse des Pi’s in deinen Router-UI nachsehen und dich mit dieser verbinden.

An dieser Stelle empfehle ich zunächst einmal das Standardpasswort (raspberry) des Nutzers zu ändern:

passwd

 

Raspberry Pi Webserver einrichten

Wir machen nun mit der Installation des Webservers weiter. Hierfür gibt es zum Apache2 und die schlankere Version nginx. Wir entscheiden uns für Letzteres. Für die Installation brauchen wir lediglich einen Befehl:

sudo apt-get install nginx --yes

Der Server sollte bereits nach der Installation gestartet worden sein, allerdings kannst du ihn auch manuell starten:

sudo service nginx start

Wir testen das ganze, indem wir in unserem Browser die IP-Adresse des Raspberry Pi’s eingeben (alternativ sollte auch http://raspberrypi/ funktionieren):

Raspberry Pi nginx server

Unser Webserver läuft also bereits erfolgreich! Wir könnten hier schon einzelne HTML Dateien ausgeben und hätten eine statische Website, die lokal verfügbar ist. Vorher nehmen wir aber noch ein paar Konfigurationen von nginx vor:

sudo nano /etc/nginx/nginx.conf

Folgende Einstellungen ändern wir (Eine Raute # vor einer Zeile bedeutet, dass diese auskommentiert / inaktiv ist).

  • Unter events kommentieren wir multi_accept on; ein (# entfernen) – das ermöglicht, dass sich mehrere Clients gleichzeitig verbinden.
  • Unter http können wir keepalive von 65 Sekunden heruntersetzen (10-20).
  • weitere Erklärungen zu den Einstellungsmöglichkeiten gibt es hier.

WordPress benötigt jedoch noch PHP, was wir im Folgenden installieren.

PHP installieren

Neben PHP laden wir auch gleich noch einige Zusatzmodule (wie den FastCGI Process Manager), welche im Anschluss gebraucht werden, herunter:

sudo apt-get install php7.3-fpm php7.3-mysql php7.3-xmlrpc php7.3-curl php7.3-gd php-imagick php7.3-imap --yes

Die aktuellsten PHP Versionen ändern sich von Zeit zu Zeit und können hier nachgesehen werden. Du kannst die Versionen entsprechend deiner Wahl anpassen. Mit apt-cache search php7 kannst du die verfügbaren Pakete suchen.

Damit nginx auch PHP-FPM nutzen kann, müssen wir noch eine Einstellung vornehmen:

sudo nano /etc/nginx/sites-available/default

Hier wirst du folgenden Teil finden, von dem wir zunächst index.php hinzufügen und die hervorgehobenen Zeilen einkommentieren:

        index index.html index.htm index.nginx-debian.html index.php;
        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
               include snippets/fastcgi-php.conf;
        
               # With php-fpm (or other unix sockets):
               fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

Um zu schauen, ob die Konfiguration gültig ist, kannst du sudo nginx -t ausführen. Damit die neue Konfiguration geladen wird, führen wir Folgendes aus:

sudo service nginx reload

 

Datenbank

Neben PHP als verarbeitende Sprache, müssen unsere Daten irgendwo gespeichert werden. Hierfür können wir entweder MySQL von Oracle nutzen oder die Open-Source Alternative MariaDB, welche kompatibel zu MySQL ist. Diese installieren wir auch mit lediglich einem Befehl:

sudo apt-get install mariadb-server mariadb-client --yes

Nach der Installation gibt es nur den Root-User, der noch kein Passwort hat. Für unsere Raspberry Pi WordPress Instanz legen wir einen neuen Datenbank-User an, der ein sicheres Passwort bekommt. Zunächst öffnen wir die MariaDB Konsole:

sudo mariadb

Hier geben wir folgenden, angepassten Befehl ein (du kannst dem User auch einen anderen Namen als „wordpress“ geben):

CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'wordpress'@'localhost';
FLUSH PRIVILEGES;
exit;

Nun können wir uns mit dem neu erstellten User einloggen, um zu testen, dass es geklappt hat (mit exit; kannst du die Konsole wieder verlassen):

mariadb -u wordpress -p

Hier erstellen wir gleich schon einmal die Datenbank, die wir später für WordPress nutzen werden:

CREATE DATABASE wordpress_blog;

Weitere Sicherheitseinstellungen

Da wir unsere WordPress Instanz später ins World Wide Web stellen, sollten wir Sicherheitsvorkehrungen treffen. Hierfür gibt es von MariaDB ein Skript, welches ein paar Fragen stellt und dementsprechende Sicherheitseinstellungen vornimmt. Dieses kannst du folgendermaßen ausführen:

sudo mysql_secure_installation

Die Antworten sind überall zu bejahen (außer das Ändern des Pi-User-Passworts, falls du es am Anfang schon gemacht hast).

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

 

Datenbank-Zugriff

Falls du die Datenbank auch über ein UI nutzen willst, kannst du dafür ein Tool wie PHPmyAdmin nutzen. Dies ist schnell installiert und bietet

 

Installation von WordPress auf dem Raspberry Pi

Soweit sind alle benötigten Komponenten installiert und wir können uns um die Installation von WordPress kümmern. Dazu löschen wir zunächst einmal die index Dateien auf dem Raspberry Pi im nginx Verzeichnis:

cd /var/www/html/
sudo rm index.*

Nun können wir die aktuelle WordPress Version herunterladen:

sudo wget https://wordpress.org/latest.tar.gz

Wir entpacken die Datei und verschieben die Dateien des Ordners nach /var/www/html. Außerdem löschen wir die nicht benötigte Datei sowie den Ordner.

sudo tar xzf latest.tar.gz
sudo mv wordpress/* .
sudo rm -r latest.tar.gz wordpress

Zu guter Letzt müssen wir noch angeben, dass die entpackten Dateien dem www-data User gehören.

sudo chown -R www-data: .

 

WordPress: Erste Schritte und Einrichtung

Rufen wir nun die interne IP-Adresse des Raspberry Pi’s auf, so sehen wir bereits den WordPress Konfigurations-Screen. Hier geben wir nun die vorher eingerichteten Zugangsdaten der Datenbank an (passe die Daten entsprechend deines Users und Datenbanknamens an):

WordPress Init ScreenIm nächsten Schritt geben wir die Informationen zu unserem Blog an. Außerdem erstellen wir den Admin-User. Achte auch hier auf ein starkes Passwort!

WordPress Welcome Config ScreenDanach sind wir bereits fertig und können uns einloggen. Hier können wir erste Schritte und Einstellungen vornehmen und dann unsere Seite bereits ansehen.

Raspberry Pi WordPress Blog Preview

 

Router konfigurieren – Zugriff aus dem WWW

Bisher ist unsere Webseite nur im lokalen Netz verfügbar und noch nicht aus dem Internet erreichbar. Um dies zu ermöglichen, brauchen wir zwei Dinge:

  1. Port 80 muss offen und auf den Raspberry Pi zeigen.
  2. Ein DynDNS Server muss auf unsere (wechselnde) IP-Adresse zeigen, damit der Blog immer über die gleiche Adresse erreichbar ist.
  3. Ein SSL Zertifikat sollte heutzutage auch nicht fehlen: Bei Let’s Encrypt gibt es kostenlose Zertifikate, die sich alle 3 Monate erneuern und von allen Browsern akzeptiert werden.

In deinen Router Einstellungen (normalerweise über 192.168.1.1 erreichbar) gibt es den Punkt „Port-Forwarding“: Hier kannst du bestimmte Ports öffnen und auf eine interne IP-Adresse zeigen lassen. In unserem Fall ist das die IP-Adresse des Raspberry Pi’s (bei mir bspw. 192.168.1.8).

Außerdem brauchen wir einen DynDNS Server. Hier gibt es Anbieter wie No-IP, die kostenlos genutzt werden können. Was dabei zu beachten ist, erfährst du hier.

 

Raspberry Pi WordPress Server Fazit

Der Raspberry Pi kann neben seinen vielen anderen Möglichkeiten auch als Blog-Server genutzt werden. Nebenbei kann er außerdem als Smart-Home Server o.ä. genutzt werden. Man sollte allerdings bedenken, dass man durch eine eigens gehostete Webseite auch potenziell angreifbar ist und deshalb besonders auf Sicherheitsupdates von WordPress und den Plugins achtet.

Übrigens: Eine weitere Möglichkeit seinen Webserver mit wenig Konfiguration zu erstellen bietet Docker. Hierzu kann ich in Zukunft bei Bedarf gerne zeigen, wie man es damit umsetzt.

20 Kommentare

  1. Hey, cooles Tutorial, aber ich habe ein Frage… wie bekomme ich dieses Zeichen: „~“ am Raspberry hin? Ich komm einfach nicht drauf 🙁 Würde mich über Hilfe Freuen
    MFG Tom

    Antworten
  2. Hallo und vielen Dank für das Tutorial,

    alles klappt soweit prima, ABER ich habe mehrere Probleme WordPress zu betreiben:

    a) Wenn ich Mediafiles über 2MB hochlade kriege ich einen Hinweis das die Size auf 2MB beschränkt ist.
    b) Wenn ich Mediafiles unter 2MB hochlade kriege ich den Fehler: „Post-processing of the image likely failed because the server is busy or does not have enough resources. Uploading a smaller image may help. Suggested maximum size is 2500 pixels.“

    Habe ich etwas falsch konfiguriert?

    Danke!

    Antworten
  3. Hallo, prima Anleitung. Aktuell kommt die Fehlermedung „Die Antwort ist keine gültige JSON Antwort“ nach jedem Anstoß einer Aktualisierung der Website und die Aktualisierung findet nicht statt.

    Antworten
    • Hallo Christoph, hast du in der config /etc/nginx/sites-available/default „index.php“ hinzugefügt?

      # Add index.php to the list if you are using PHP
      index index.php index.html index.htm index.nginx-debian.html;

      Und den server_name solltest du auch noch setzen. bei mir stand da nur „_“

      server_name yourservername;

      Antworten
      • Bei mir funktioniert das auch nicht… bei mir steht dann immer noch 404 Not Found
        nginx/1.14.2

        Hast du noch eine Idee woran das liegt?

        Mit freundlichen Grüßen

  4. Hallo,
    ich bekomme wie Rutagilbo auch bei jeglicher Aktualisierung der Seite den Fehler: Dies ist keine gültige JSON-Antwort. Was kann ich tun?

    Viele Grüße,
    Tom

    Antworten
  5. Bei mir kommt leider die Fehlermeldung:

    403 Forbidden
    nginx/1.14.2

    Über Hilfe würde ich mich sehr freuen.

    Antworten
  6. Hallo all
    nach dem Update der RPi dateien (sudo apt-get update && sudo apt-get upgrade) bleibt beim Aufruf der Main-Page bei der nginx Seite (welcome to nginx) stehen und es wird nicht mehr auf die (meine) WP Hauptseite (http://menu/) weitergeleitet.
    wo muss nach einem Upgrade im OS / nginx / php Teil angepasst werden, danit es wieder auf die Nauptseite weitergeleitet wird ??
    danke fürs feedback

    Antworten
  7. Hallo zusammen,
    erst mal vorweg: Klasse Tutorial!

    Leider klappt bei mir nicht alles:
    Der Server läuft, die Website lädt und der lokale Zugriff via lok. IP funktioniert super.
    Ich habe mir bei Strato eine Domain gekauft, dort alle entsprechenden Einstellungen vorgenommen, das Forwarding in der Fritzbox eingestellt – es klappt super. Leider lädt er die Bilder der Website beim Online Zugriff nicht und ich habe nur ein paar Textbausteine… Was fehlt?

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!