LAMP auf Raspery PI mit Debian

🖥️ LAMP-Server auf Raspberry Pi 5 [edit]

Ausführliche Anleitung mit DNS, Virtual Hosts und externem Datenbankzugriff

Ü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 update && sudo apt full-upgrade -y
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:

sudo apt install apache2 php libapache2-mod-php php-mysql -y
2.2 MariaDB Datenbank-Server

Installieren Sie den Datenbankserver:

sudo apt install mariadb-server -y
sudo mysql_secure_installation
Hinweis: Das Sicherheitsskript 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:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Suchen Sie die Zeile bind-address und ändern Sie sie zu:

bind-address = 0.0.0.0

Speichern: STRG+O, Enter, STRG+X

3.2 Remote-Benutzer erstellen

Loggen Sie sich in MariaDB ein und erstellen Sie einen Admin-Benutzer:

sudo mysql -u root -p

Geben Sie dann folgende SQL-Befehle ein:

CREATE USER 'admin'@'%' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
3.3 Dienst neu starten
sudo systemctl restart mariadb

Schritt 4: DNS Server (Bind9) einrichten

⚠️ Optional: Dieser Schritt ist optional. Alternativ können Sie die hosts-Datei auf Ihrem PC bearbeiten. Für einen echten Server ist DNS jedoch die saubere Lösung.
4.1 Bind9 installieren
sudo apt install bind9 bind9utils bind9-doc -y
4.2 Zonen definieren

Öffnen Sie die Bind9-Konfiguration:

sudo nano /etc/bind/named.conf.local

Fügen Sie am Ende folgende Zeilen hinzu:

zone "lokal" {
    type master;
    file "/etc/bind/db.lokal";
};
4.3 Zonendatei erstellen

Kopieren Sie eine Vorlage und bearbeiten Sie sie:

sudo cp /etc/bind/db.local /etc/bind/db.lokal
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
sudo systemctl restart bind9

Schritt 5: Apache Virtual Hosts erstellen

5.1 Verzeichnisse erstellen
sudo mkdir -p /var/www/projekt1
sudo mkdir -p /var/www/projekt2
5.2 Inhalte erstellen

Erstellen Sie Index-Dateien für die Test-Webseiten:

sudo nano /var/www/projekt1/index.php

Fügen Sie ein:

<?php echo "<h1>Hier ist Projekt 1</h1>"; ?>

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/projekt1
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:

sudo nano /etc/apache2/sites-available/projekt1.conf

Fügen Sie folgende Konfiguration ein:

<VirtualHost *:80>
    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 projekt1.conf
sudo a2ensite projekt2.conf
sudo systemctl reload apache2

Schritt 6: Firewall konfigurieren

Öffnen Sie die erforderlichen Ports:

sudo ufw allow 22/tcp    # SSH
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
✓ Firewall aktiv: Der Pi ist nun geschützt und nur über die definierten Ports erreichbar.

Tests und Überprüfung

✓ Test 1: DNS-Funktionalität

Öffnen Sie auf Ihrem PC die Eingabeaufforderung und prüfen Sie:

ping projekt1.lokal

Sie sollten Antworten von der IP des Raspberry Pi (192.168.1.50) erhalten.

✓ Test 2: Webseiten-Zugriff

Öffnen Sie in Ihrem Browser:

✓ 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?
Schritt 1: Apache Status prüfen
sudo systemctl status apache2
Schritt 2: vHosts überprüfen
sudo apache2ctl -S
Schritt 3: Firewall kontrollieren
sudo ufw status
❌ DNS funktioniert nicht?
Bind9 Status prüfen
sudo systemctl status bind9
DNS-Auflösung testen
nslookup projekt1.lokal 192.168.1.50
❌ MariaDB nicht erreichbar?
Bind-Adresse überprüfen
mysql> SHOW VARIABLES LIKE 'bind%';
Port-Erreichbarkeit testen
telnet 192.168.1.50 3306

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.

LAMP Server Konfigurationsanleitung für Raspberry Pi 5

Alle Befehle wurden für Debian/Raspberry Pi OS optimiert. © 2025