Überblick
Diese Anleitung zeigt die Einrichtung eines vollständigen LAMP-Stacks (Linux, Apache, MariaDB, PHP) auf einem Raspberry Pi 5 mit:
- 🌐 Mehreren Virtual Hosts für verschiedene Webprojekte
- 🔗 Eigenem lokalen DNS-Server (Bind9)
- 📊 MariaDB-Datenbankserver mit externem Zugriff
- 🔒 Firewall-Sicherheit (UFW)
Voraussetzungen
- Hardware: Raspberry Pi 5 mit mindestens 4GB RAM
- OS: Raspberry Pi OS (Bookworm), 64-bit empfohlen
- Netzwerk: Statische IP-Adresse (im Beispiel: 192.168.1.50)
- Zugriff: SSH oder lokale Terminal-Verbindung
- Sonstiges: Internetverbindung für Paketinstallation
Schritt 1: System aktualisieren
Stellen Sie zunächst sicher, dass alle Systempakete aktuell sind:
sudo apt install ufw -y
Was wird gemacht:
- Paketlisten aktualisieren
- Alle Systempakete auf neueste Version bringen
- UFW (Uncomplicated Firewall) installieren
Schritt 2: LAMP-Stack installieren
2.1 Apache Webserver und PHP
Installieren Sie Apache und PHP-Module:
2.2 MariaDB Datenbank-Server
Installieren Sie den Datenbankserver:
sudo mysql_secure_installation
mysql_secure_installation fragt Sie ab, ein Root-Passwort zu setzen, anonyme Benutzer zu entfernen und Remote-Root-Login zu deaktivieren.
Schritt 3: MariaDB für externen Zugriff
3.1 Konfiguration anpassen
Damit Sie von Ihrem PC aus auf die Datenbank zugreifen können, muss MariaDB auf allen Netzwerk-Interfaces lauschen:
Suchen Sie die Zeile bind-address und ändern Sie sie zu:
Speichern: STRG+O, Enter, STRG+X
3.2 Remote-Benutzer erstellen
Loggen Sie sich in MariaDB ein und erstellen Sie einen Admin-Benutzer:
Geben Sie dann folgende SQL-Befehle ein:
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
3.3 Dienst neu starten
Schritt 4: DNS Server (Bind9) einrichten
hosts-Datei auf Ihrem PC bearbeiten. Für einen echten Server ist DNS jedoch die saubere Lösung.
4.1 Bind9 installieren
4.2 Zonen definieren
Öffnen Sie die Bind9-Konfiguration:
Fügen Sie am Ende folgende Zeilen hinzu:
type master;
file "/etc/bind/db.lokal";
};
4.3 Zonendatei erstellen
Kopieren Sie eine Vorlage und bearbeiten Sie sie:
sudo nano /etc/bind/db.lokal
Ersetzen Sie den Inhalt durch:
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ns.lokal. root.lokal. (
2 ; Serial
604800 ; Refresh
86400 ;Retry
2419200 ;Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.lokal.
@ IN A 192.168.1.50
ns IN A 192.168.1.50
; Virtual Hosts
projekt1 IN A 192.168.1.50
projekt2 IN A 192.168.1.50
db IN A 192.168.1.50
4.4 DNS neu starten
Schritt 5: Apache Virtual Hosts erstellen
5.1 Verzeichnisse erstellen
sudo mkdir -p /var/www/projekt2
5.2 Inhalte erstellen
Erstellen Sie Index-Dateien für die Test-Webseiten:
Fügen Sie ein:
Wiederholen Sie für Projekt 2 in /var/www/projekt2/index.php.
5.3 Berechtigungen setzen
sudo chown -R www-data:www-data /var/www/projekt2
sudo chmod -R 755 /var/www
5.4 vHost Konfigurationsdateien
Erstellen Sie die Config für Projekt 1:
Fügen Sie folgende Konfiguration ein:
ServerName projekt1.lokal
ServerAdmin webmaster@localhost
DocumentRoot /var/www/projekt1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Wiederholen Sie für projekt2.conf mit entsprechenden Anpassungen.
5.5 Seiten aktivieren
sudo a2ensite projekt2.conf
sudo systemctl reload apache2
Schritt 6: Firewall konfigurieren
Öffnen Sie die erforderlichen Ports:
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS (optional)
sudo ufw allow 3306/tcp # MariaDB
sudo ufw allow 53 # DNS
sudo ufw enable
Tests und Überprüfung
✓ Test 1: DNS-Funktionalität
Öffnen Sie auf Ihrem PC die Eingabeaufforderung und prüfen Sie:
Sie sollten Antworten von der IP des Raspberry Pi (192.168.1.50) erhalten.
✓ Test 2: Webseiten-Zugriff
Öffnen Sie in Ihrem Browser:
http://projekt1.lokal→ sollte "Hier ist Projekt 1" anzeigenhttp://projekt2.lokal→ sollte "Hier ist Projekt 2" anzeigen
✓ Test 3: Datenbankverbindung
Öffnen Sie ein Tools wie HeidiSQL oder DBeaver auf Ihrem PC:
| Parameter | Wert |
|---|---|
| Host | 192.168.1.50 oder db.lokal |
| Port | 3306 |
| Benutzer | admin |
| Passwort | Ihr gesetztes Passwort |
Troubleshooting
❌ Webseite nicht erreichbar?
❌ DNS funktioniert nicht?
❌ MariaDB nicht erreichbar?
Zusätzliche Hinweise
- SSL/HTTPS: Für Produktivumgebungen wird HTTPS empfohlen. Nutzen Sie Certbot mit Let's Encrypt.
- Backups: Regelmäßig Datenbank und Web-Inhalte sichern.
- Monitoring: Richten Sie Log-Überwachung ein (z.B. mit Promtail/Loki).
- Performance: Bei mehr Virtual Hosts können Sie Apache-Module wie caching aktivieren.
- Sicherheit: Regelmäßige Updates durchführen und fail2ban für Brute-Force-Schutz erwägen.