Träumen Sie davon, Ihre eigene Website zu hosten, ohne horrende monatliche Gebühren zu zahlen? Möchten Sie die volle Kontrolle über Ihre digitale Präsenz haben und gleichzeitig ein spannendes Heimserver-Projekt umsetzen? Dann ist dieser Artikel genau das Richtige für Sie! Wir zeigen Ihnen, wie Sie eine perfekte WordPress-Installation auf einem Raspberry Pi mit HypriotOS, Docker und Portainer einrichten. Eine leistungsstarke, flexible und kostengünstige Lösung, die auch für Einsteiger mit etwas technischem Interesse gut machbar ist.
Die Kombination dieser Technologien bietet Ihnen unzählige Vorteile: Der Raspberry Pi ist energieeffizient und günstig, HypriotOS ist für Docker optimiert, Docker sorgt für isolierte und reproduzierbare Umgebungen, und Portainer macht die Verwaltung dieser Umgebungen kinderleicht über eine intuitive Weboberfläche. Klingt gut? Dann legen wir los!
Warum diese Kombination? Die Vorteile auf einen Blick
- Kosteneffizienz: Ein Raspberry Pi und eine SD-Karte sind die einzigen nennenswerten Anschaffungskosten. Kein monatliches Hosting mehr!
- Volle Kontrolle: Sie sind Ihr eigener Administrator. Jede Konfiguration liegt in Ihrer Hand.
- Lernkurve: Ein fantastisches Projekt, um tiefer in die Welt von Linux, Docker und Servermanagement einzutauchen.
- Flexibilität mit Docker: Ihre WordPress-Installation läuft isoliert in einem Container. Das bedeutet, sie ist portabel, leicht zu aktualisieren und stört keine anderen Dienste, die Sie eventuell auf Ihrem Pi betreiben möchten.
- Einfache Verwaltung mit Portainer: Keine komplizierten Kommandozeilenbefehle mehr, um Ihre Container zu überwachen, starten oder stoppen. Portainer bietet eine grafische Oberfläche für alles.
- Leistung: Moderne Raspberry Pi Modelle (insbesondere der RPi 4) bieten genug Leistung für kleine bis mittelgroße WordPress-Websites.
Die Bausteine für Ihre Perfekte WordPress-Installation
Bevor wir starten, stellen Sie sicher, dass Sie alle notwendigen Komponenten zur Hand haben:
- Raspberry Pi (Modell 3B+ oder besser, empfohlen RPi 4): Für eine gute Performance empfehlen wir mindestens einen RPi 3B+, idealerweise einen RPi 4 mit 4GB oder 8GB RAM.
- MicroSD-Karte: Eine hochwertige Class 10 oder A1/A2 MicroSD-Karte mit mindestens 16 GB, besser 32 GB oder mehr, ist essenziell für die Geschwindigkeit und Stabilität Ihres Systems.
- Netzteil: Das offizielle Netzteil für Ihren Raspberry Pi Modell ist immer die beste Wahl, um Stabilitätsprobleme zu vermeiden.
- Netzwerkkabel (Ethernet): Für eine stabile Verbindung und bessere Performance ist ein Kabel immer dem WLAN vorzuziehen, besonders bei einem Server.
- Optional: Gehäuse und Kühlkörper: Für den Dauerbetrieb, insbesondere bei einem RPi 4, sind Kühlkörper oder sogar ein Lüfter empfehlenswert.
- Computer mit SD-Kartenleser: Zum Flashen des Betriebssystems auf die SD-Karte.
Schritt 1: HypriotOS auf den Raspberry Pi bringen
HypriotOS ist eine spezialisierte Debian-Distribution, die von Grund auf für Docker auf dem Raspberry Pi optimiert wurde. Es ist schlank, schnell und bringt Docker bereits vorinstalliert mit.
- HypriotOS Image herunterladen: Besuchen Sie die offizielle Hypriot-Website (blog.hypriot.com/downloads/) und laden Sie das neueste „HypriotOS for Raspberry Pi” Image herunter.
- Image auf SD-Karte flashen: Nutzen Sie ein Tool wie BalenaEtcher (empfohlen) oder Raspberry Pi Imager. Wählen Sie das heruntergeladene HypriotOS-Image und Ihre MicroSD-Karte aus und starten Sie den Flash-Vorgang.
- Erster Boot und SSH-Zugang: Stecken Sie die SD-Karte in Ihren Raspberry Pi, schließen Sie das Netzwerkkabel an und versorgen Sie ihn mit Strom. Der Pi bootet automatisch. HypriotOS ist standardmäßig für SSH vorkonfiguriert. Nach dem Bootvorgang können Sie sich via SSH verbinden. Denken Sie daran, die IP-Adresse Ihres Pi herauszufinden (z.B. über Ihren Router oder ein Tool wie Angry IP Scanner).
ssh pirate@<IP_DES_RPI>
Das Standardpasswort ist `hypriot`.
- System aktualisieren und Passwort ändern: Als Erstes sollten Sie das Standardpasswort ändern und das System aktualisieren:
passwd sudo apt update && sudo apt upgrade -y sudo reboot
Ändern Sie auch den Hostnamen des Pi, wenn Sie möchten, mit `sudo raspi-config`.
Schritt 2: Docker und Docker Compose – Das Herzstück der Containerisierung
Wie bereits erwähnt, kommt HypriotOS mit vorinstalliertem Docker. Sie müssen also in der Regel nichts extra installieren. Um die Installation zu überprüfen, geben Sie ein:
docker version
Sie sollten sowohl die Client- als auch die Server-Version von Docker sehen. Für unsere WordPress-Installation nutzen wir Docker Compose, um mehrere Container (WordPress und eine Datenbank) gleichzeitig zu definieren und zu starten. Docker Compose ist bei HypriotOS meist ebenfalls vorinstalliert, aber es lohnt sich, die Version zu prüfen:
docker-compose version
Sollte `docker-compose` nicht gefunden werden oder eine sehr alte Version sein, können Sie es wie folgt nachinstallieren oder aktualisieren (oft ist es ein Python-Paket):
sudo apt install docker-compose -y
Stellen Sie sicher, dass Ihr Benutzer (`pirate`) in der Docker-Gruppe ist, damit Sie Docker-Befehle ohne `sudo` ausführen können (Hypriot konfiguriert dies oft schon):
sudo usermod -aG docker pirate
newgrp docker # Oder einfach neu anmelden per SSH
Schritt 3: Portainer – Das Dashboard für Ihre Docker-Umgebung
Portainer ist eine Open-Source-Verwaltungsoberfläche, die es Ihnen ermöglicht, Docker-Umgebungen über eine intuitive Weboberfläche zu verwalten. Dies vereinfacht die Arbeit mit Containern erheblich.
Installieren Sie Portainer als Docker-Container mit den folgenden Befehlen:
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
- `docker volume create portainer_data`: Erstellt ein persistentes Volume für Portainer-Daten.
- `-p 9443:9443`: Der Port, über den Sie auf die Portainer-Oberfläche zugreifen (HTTPS).
- `-p 8000:8000`: Port für Edge Agent (wird für dieses Setup nicht benötigt, kann weggelassen werden, aber schadet nicht).
- `–name portainer`: Gibt dem Container einen Namen.
- `–restart always`: Stellt sicher, dass Portainer nach einem Neustart des Pi automatisch wieder startet.
- `-v /var/run/docker.sock:/var/run/docker.sock`: Bindet den Docker-Socket ein, damit Portainer Docker verwalten kann.
- `-v portainer_data:/data`: Bindet das zuvor erstellte Daten-Volume ein.
- `portainer/portainer-ce:latest`: Das offizielle Portainer Community Edition Image.
Nachdem der Container gestartet ist (dies kann einen Moment dauern, während das Image heruntergeladen wird), öffnen Sie Ihren Webbrowser und navigieren Sie zu https://<IP_DES_RPI>:9443
. Sie werden aufgefordert, einen Administratorbenutzer und ein Passwort zu erstellen. Wählen Sie „Get Started” und „Manage the local Docker environment”.
Schritt 4: Das WordPress-Setup mit Docker Compose definieren
Um WordPress zu betreiben, benötigen wir zwei Hauptkomponenten: den WordPress-Anwendungsserver selbst und eine Datenbank (meist MySQL oder MariaDB). Docker Compose ermöglicht es uns, beide in einer einzigen Konfigurationsdatei zu definieren und zu verwalten.
Loggen Sie sich wieder per SSH auf Ihrem Raspberry Pi ein. Erstellen Sie ein Verzeichnis für Ihre WordPress-Installation und darin eine Datei namens `docker-compose.yml`:
mkdir wordpress-website
cd wordpress-website
nano docker-compose.yml
Fügen Sie den folgenden Inhalt in die `docker-compose.yml`-Datei ein. Achten Sie darauf, die Platzhalter (z.B. `
version: '3.8'
services:
db:
image: mariadb:latest # Oder 'arm32v7/mariadb' für ältere RPi-Modelle, 'mariadb:10.5' für spezifische Versionen
command: --default-authentication-plugin=mysql_native_password
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: <EIN_SEHR_SICHERES_ROOT_PASSWORT_FUER_DIE_DB> # Nur für den DB-Root-Benutzer
MYSQL_DATABASE: <DB_NAME_FUER_WORDPRESS>
MYSQL_USER: <DB_USER_FUER_WORDPRESS>
MYSQL_PASSWORD: <DB_PASSWORT_FUER_WORDPRESS>
networks:
- wordpress_network
wordpress:
image: wordpress:latest # Oder 'arm32v7/wordpress' für ältere RPi-Modelle
ports:
- "8080:80" # Port 8080 auf dem RPi wird auf Port 80 des Containers gemappt
volumes:
- wp_data:/var/www/html
restart: always
environment:
WORDPRESS_DB_HOST: db:3306 # Name des DB-Containers und Standard-DB-Port
WORDPRESS_DB_NAME: <DB_NAME_FUER_WORDPRESS>
WORDPRESS_DB_USER: <DB_USER_FUER_WORDPRESS>
WORDPRESS_DB_PASSWORD: <DB_PASSWORT_FUER_WORDPRESS>
# Optional: Wenn Sie eine spezifische URL oder Domäne nutzen möchten
# WORDPRESS_HOME: http://ihredomain.de:8080
# WORDPRESS_SITEURL: http://ihredomain.de:8080
depends_on:
- db # Stellt sicher, dass die DB vor WordPress startet
networks:
- wordpress_network
volumes:
db_data: # Persistentes Volume für Datenbankdaten
wp_data: # Persistentes Volume für WordPress-Dateien (Themes, Plugins, Uploads)
networks:
wordpress_network:
driver: bridge
Erklärung der `docker-compose.yml` Sektionen:
- `version: ‘3.8’`: Definiert die Version der Compose-Datei.
- `services`: Hier werden die einzelnen Container definiert.
- `db`: Der Datenbank-Service.
- `image: mariadb:latest`: Wir verwenden das offizielle MariaDB-Image. Für den Raspberry Pi ist dieses in der Regel multi-arch-kompatibel, aber Sie könnten auch `arm32v7/mariadb` oder `arm64v8/mariadb` angeben, um sicherzustellen, dass Sie ein ARM-optimiertes Image verwenden.
- `command`: Stellt sicher, dass das korrekte Authentifizierungsplugin für WordPress verwendet wird.
- `volumes: – db_data:/var/lib/mysql`: Erstellt ein persistentes Volume `db_data` auf Ihrem Raspberry Pi, das mit dem `/var/lib/mysql`-Verzeichnis im Container synchronisiert wird. Dies ist entscheidend, damit Ihre Datenbankdaten auch nach einem Neustart des Containers oder des Pi erhalten bleiben.
- `restart: always`: Der Container wird immer neu gestartet, es sei denn, er wird manuell gestoppt.
- `environment`: Hier werden Umgebungsvariablen für die Datenbank gesetzt, die von MariaDB selbst und später von WordPress genutzt werden. Legen Sie hier **starke und einzigartige Passwörter** fest.
- `networks`: Verbindet den Container mit dem definierten Netzwerk.
- `wordpress`: Der WordPress-Anwendungsservice.
- `image: wordpress:latest`: Das offizielle WordPress-Image. Auch hier ist es multi-arch-kompatibel.
- `ports: – „8080:80″`: Ordnet den Port 80 des WordPress-Containers dem Port 8080 auf Ihrem Raspberry Pi zu. Sie können dies auf einen anderen freien Port ändern, wenn 8080 bereits belegt ist.
- `volumes: – wp_data:/var/www/html`: Ein persistentes Volume `wp_data` für alle WordPress-Dateien (Themes, Plugins, Uploads, Konfiguration), damit diese ebenfalls erhalten bleiben.
- `environment`: Umgebungsvariablen für WordPress. Hier teilen wir WordPress mit, wie es sich mit unserer Datenbank verbinden soll. `WORDPRESS_DB_HOST: db:3306` ist wichtig, da `db` der Name unseres Datenbank-Services ist und Docker Compose die interne DNS-Auflösung dafür übernimmt.
- `depends_on: – db`: Stellt sicher, dass der Datenbank-Container gestartet und verfügbar ist, bevor der WordPress-Container versucht zu starten.
- `networks`: Verbindet den Container mit dem definierten Netzwerk.
- `db`: Der Datenbank-Service.
- `volumes`: Definiert die persistente Datenspeicherung für `db_data` und `wp_data`.
- `networks`: Definiert ein benutzerdefiniertes Bridge-Netzwerk für die Services, was eine bessere Isolation und Namensauflösung ermöglicht.
Speichern Sie die Datei (`Strg+O`, Enter, `Strg+X`).
Schritt 5: WordPress über Portainer deployen
Jetzt, wo unsere `docker-compose.yml` bereit ist, nutzen wir Portainer, um den Stack zu deployen.
- Öffnen Sie Portainer in Ihrem Browser (
https://<IP_DES_RPI>:9443
) und loggen Sie sich ein. - Navigieren Sie im linken Menü zu „Stacks”.
- Klicken Sie auf „Add stack”.
- Geben Sie einen Namen für Ihren Stack ein, z.B. `wordpress-website`.
- Kopieren Sie den Inhalt Ihrer `docker-compose.yml`-Datei (den Sie zuvor erstellt und gespeichert haben) und fügen Sie ihn in das Feld „Web editor” ein.
- Klicken Sie auf „Deploy the stack”.
Portainer wird nun die Docker-Images herunterladen (dies kann je nach Internetgeschwindigkeit eine Weile dauern) und die Container starten. Sie können den Fortschritt unter „Containers” verfolgen. Stellen Sie sicher, dass sowohl der `db`- als auch der `wordpress`-Container den Status „running” haben.
Schritt 6: Die Erste Einrichtung von WordPress
Sobald beide Container laufen, ist Ihre WordPress-Installation bereit für die erste Konfiguration.
- Öffnen Sie einen neuen Tab in Ihrem Browser und navigieren Sie zu
http://<IP_DES_RPI>:8080
(ersetzen Sie `` durch die tatsächliche IP-Adresse Ihres Raspberry Pi und 8080 durch den Port, den Sie in der `docker-compose.yml` festgelegt haben). - Sie sollten die bekannte WordPress-Installationsseite sehen. Wählen Sie Ihre Sprache aus.
- Auf der nächsten Seite werden Sie nach den Datenbankdetails gefragt. Diese sollten bereits mit den Werten aus Ihrer `docker-compose.yml` vorbelegt sein, da WordPress diese aus den Umgebungsvariablen des Containers liest. Überprüfen Sie aber, ob die Werte korrekt sind (Datenbank-Name, Benutzername, Passwort, Datenbank-Host ist `db`).
- Klicken Sie auf „Installation starten”.
- Füllen Sie die Informationen für Ihre Website aus (Titel, Benutzername, Passwort für den WordPress-Admin, E-Mail-Adresse). Verwenden Sie hier ein starkes, einzigartiges Passwort!
- Klicken Sie auf „WordPress installieren”.
Herzlichen Glückwunsch! Ihre perfekte WordPress-Website läuft nun auf Ihrem Raspberry Pi in Docker, verwaltet über Portainer!
Wichtige Überlegungen für den Produktiven Einsatz (Optimierung & Sicherheit)
Für den produktiven Einsatz Ihrer WordPress-Website gibt es noch einige wichtige Punkte zu beachten:
Performance-Optimierung:
- Schnelle SD-Karte: Haben Sie bereits eine A1/A2-Karte verwendet, ist das ein guter Start. Bei Performance-Problemen könnte eine SSD (über USB 3.0 bei RPi 4) eine deutliche Verbesserung bringen.
- Caching-Plugins: Installieren Sie ein Caching-Plugin wie WP Super Cache oder W3 Total Cache in WordPress. Das reduziert die Last auf Ihren Pi erheblich.
- Leichte Themes & Plugins: Wählen Sie performante Themes und halten Sie die Anzahl der installierten Plugins gering.
- Swap-Datei: Der Raspberry Pi hat begrenzten RAM. Prüfen Sie die Swap-Nutzung (`free -h`). Bei hoher Auslastung kann das Erhöhen der Swap-Datei helfen, sollte aber sparsam eingesetzt werden, da dies die SD-Karte stärker beansprucht.
Sicherheit:
- SSH-Zugang sichern: Ändern Sie das Standardpasswort des `pirate`-Benutzers. Noch besser: Deaktivieren Sie die passwortbasierte Anmeldung und verwenden Sie SSH-Schlüssel.
- Firewall (UFW): Konfigurieren Sie die Uncomplicated Firewall (UFW) auf Ihrem Raspberry Pi, um nur die benötigten Ports zu öffnen (z.B. SSH auf Port 22, Portainer auf 9443, WordPress auf 8080).
sudo apt install ufw -y sudo ufw allow ssh sudo ufw allow 9443/tcp sudo ufw allow 8080/tcp sudo ufw enable
- SSL/HTTPS: Für eine öffentlich zugängliche Website ist HTTPS unerlässlich. Dies erfordert in der Regel einen Reverse Proxy (z.B. Nginx oder Caddy) vor Ihren WordPress-Container, der die SSL-Zertifikate (z.B. von Let’s Encrypt) verwaltet. Dies ist ein fortgeschrittener Schritt, der die Einrichtung der `docker-compose.yml` erweitern würde. Eine beliebte Lösung ist Nginx Proxy Manager, der selbst in Docker läuft und eine einfache Web-UI bietet.
- Regelmäßige Updates: Halten Sie HypriotOS (`sudo apt update && sudo apt upgrade -y`), Docker-Images (`docker-compose pull` und Stack neu deployen in Portainer) und WordPress (über das WordPress-Dashboard) auf dem neuesten Stand.
- Backups: Erstellen Sie regelmäßige Backups Ihrer WordPress-Dateien (das `wp_data` Volume) und der Datenbank (das `db_data` Volume). Portainer bietet Funktionen zum Exportieren von Volumes oder Sie können Skripte dafür schreiben.
Domain-Anbindung:
Wenn Sie Ihre Website unter einer eigenen Domain (z.B. `ihredomain.de`) erreichbar machen möchten:
- Port-Weiterleitung (Port Forwarding): In Ihrem Router müssen Sie den Port 8080 (oder den von Ihnen gewählten Port) von außen auf die interne IP-Adresse Ihres Raspberry Pi weiterleiten. Beachten Sie, dass die meisten ISPs dynamische IP-Adressen vergeben.
- Dynamisches DNS (DDNS): Melden Sie sich bei einem DDNS-Dienst an (z.B. No-IP, DynDNS), um Ihre dynamische externe IP-Adresse mit einer festen Subdomain zu verknüpfen.
- Reverse Proxy (siehe SSL/HTTPS): Ein Reverse Proxy ist oft auch für die Domain-Anbindung sinnvoll, da er den Verkehr von Port 80/443 auf Ihren internen WordPress-Port (8080) umleiten kann.
Fazit
Sie haben es geschafft! Mit dieser Anleitung haben Sie Ihre eigene perfekte WordPress-Installation auf einem Raspberry Pi mit HypriotOS, Docker und Portainer erfolgreich eingerichtet. Sie haben nicht nur eine funktionierende Website, sondern auch ein tiefes Verständnis für moderne Containerisierung und Serververwaltung erworben.
Dieses Setup ist ein hervorragender Startpunkt für viele weitere Projekte. Sie können weitere Docker-Container für andere Dienste (z.B. ein Medien-Server, Smart-Home-Lösungen oder ein Git-Server) auf demselben Raspberry Pi betreiben, ohne dass diese sich gegenseitig stören. Die Welt des Heimservers steht Ihnen nun offen.
Nehmen Sie die gewonnenen Kenntnisse mit, experimentieren Sie weiter und genießen Sie die volle Kontrolle über Ihre digitale Umgebung. Ihre Reise zum unabhängigen Website-Betreiber hat gerade erst begonnen!