LAMP-Stack auf Debian 13 und Debian 12 installieren: Apache2, PHP 8, MariaDB und phpMyAdmin
Apache2, PHP 8, MariaDB und phpMyAdmin auf Debian 13 oder Debian 12: die komplette Einrichtung Schritt für Schritt, inklusive Absicherung und Fehlerbehebung.
Sie möchten Apache2, PHP 8, eine MySQL-Datenbank und phpMyAdmin, also einen kompletten LAMP-Stack, auf Ihrem Debian 13 (Trixie) oder Debian 12 (Bookworm) Server installieren? Diese Anleitung führt Sie Schritt für Schritt durch die komplette Einrichtung, vom Webserver bis zum abgesicherten Datenbankzugang.
Wichtig zum Datenbankserver: Debian enthält kein Paket mysql-server, in keiner aktuellen Version. Sie installieren unter Debian immer MariaDB. MariaDB ist aus MySQL hervorgegangen, spricht dasselbe Protokoll und dieselbe Abfragesprache, und Werkzeuge wie phpMyAdmin oder die PHP-Erweiterung php-mysql arbeiten unverändert damit. Wenn in dieser Anleitung von MySQL-Datenbanken die Rede ist, läuft darunter also MariaDB.
Voraussetzungen
Sie benötigen einen SSH-Zugang mit Root-Rechten (oder einen Benutzer mit sudo-Berechtigung) auf einem aktuellen Debian. Empfohlen werden Debian 13 "Trixie" und Debian 12 "Bookworm". Debian 10 hat im Juni 2024 sein Supportende erreicht und erhält keine regulären Sicherheitsupdates mehr, es eignet sich daher nicht mehr für den produktiven Betrieb.
Aktualisieren Sie zuerst die Paketliste und spielen Sie vorhandene Updates ein:
apt update
apt upgrade -y
Apache2 und Basispakete installieren
Installieren Sie den Webserver zusammen mit den Hilfspaketen, die Sie in den folgenden Schritten brauchen:
apt install -y nano curl wget unzip ca-certificates apt-transport-https lsb-release gnupg apache2
Rufen Sie danach im Browser http://<Ihre-Server-IP>/ auf. Erscheint die Apache2-Standardseite, läuft der Webserver bereits.
PHP 8 installieren
Welche PHP-Version Sie aus den Paketquellen bekommen, hängt von Ihrer Distribution ab. Deshalb schlägt ein Befehl mit fester Versionsnummer wie apt install php8.4 auf Debian 12 fehl, dort gibt es nur PHP 8.2. Diese Übersicht zeigt die jeweils mitgelieferte Version (Stand Juli 2026):
| Distribution | PHP-Version aus den Paketquellen |
|---|---|
| Debian 13 | PHP 8.4 |
| Debian 12 | PHP 8.2 |
| Debian 11 | PHP 7.4 |
Verwenden Sie deshalb die Metapakete ohne Versionsnummer. Sie ziehen automatisch die passende Version Ihrer Distribution nach und funktionieren auf jedem Debian gleich:
apt install -y php php-cli php-common php-curl php-gd php-intl php-mbstring php-mysql php-opcache php-readline php-xml php-zip php-bz2 libapache2-mod-php
Möchten Sie PHP statt über das Apache-Modul per FPM betreiben, gilt dasselbe Prinzip. Auch hier führt das Metapaket zuverlässig zum Ziel, während versionsbehaftete Namen wie php8.4-fpm nur auf Debian 13 existieren:
apt install -y php-fpm
Welche Version tatsächlich installiert wurde, zeigt Ihnen:
php -v
Brauchen Sie eine Version, die Ihre Debian-Ausgabe nicht mitbringt (etwa PHP 8.4 auf Debian 12), binden Sie das PHP-Repository von Ondřej Surý ein. Der Signaturschlüssel wird dabei über ein eigenes Keyring-Paket installiert und in der Sources-Zeile per signed-by= genau diesem Repository zugeordnet:
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
dpkg -i /tmp/debsuryorg-archive-keyring.deb
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
apt update
Der früher verbreitete Weg über apt-key add ist seit Debian 11 abgekündigt und sollte nicht mehr verwendet werden, weil ein so hinterlegter Schlüssel für sämtliche Paketquellen des Systems gültig wäre.
Erst über diese Paketquelle stehen die versionsbehafteten Paketnamen für alle Debian-Ausgaben zur Verfügung. Anschließend installieren Sie die gewünschte PHP-Version samt der üblichen Erweiterungen:
apt install -y php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-xml php8.4-zip php8.4-bz2 libapache2-mod-php8.4
Laufen danach mehrere PHP-Versionen parallel, legen Sie fest, welche Apache2 verwenden soll:
a2dismod php8.2
a2enmod php8.4
systemctl restart apache2
Mit php -v prüfen Sie, welche Version auf der Kommandozeile aktiv ist.
MariaDB als Datenbankserver installieren und absichern
Wie eingangs erwähnt, gibt es unter Debian kein mysql-server-Paket. Der Datenbankserver heißt hier MariaDB, und zwar in dieser Ausgabe je nach Debian-Version:
| Distribution | Datenbankserver aus den Paketquellen |
|---|---|
| Debian 13 | MariaDB 11.8 |
| Debian 12 | MariaDB 10.11 |
| Debian 11 | MariaDB 10.5 |
Installieren Sie den Server und starten Sie direkt danach die Absicherung:
apt install -y mariadb-server mariadb-client
mysql_secure_installation
Das Skript stellt mehrere Fragen. Aktuelle MariaDB-Versionen fragen zuerst, ob auf unix_socket-Authentifizierung umgestellt werden soll. Diese Option ist sinnvoll, weil sich der Datenbank-Benutzer root dann nur noch als System-Benutzer root anmelden kann. Alle weiteren Fragen (anonyme Benutzer entfernen, Remote-Login für root verbieten, Testdatenbank löschen, Rechte neu laden) beantworten Sie jeweils mit y. Vergeben Sie außerdem ein starkes Datenbank-Passwort.
Prüfen Sie danach, ob der Dienst läuft:
systemctl status mariadb
phpMyAdmin installieren
Für phpMyAdmin haben Sie zwei Möglichkeiten. Das Paket phpmyadmin liegt in allen aktuellen Debian-Versionen in den Paketquellen und lässt sich in einem Schritt installieren:
apt install phpmyadmin -y
Bequem, aber die Version hinkt dem Stand des Herstellers oft hinterher. Wer die jeweils aktuelle Ausgabe möchte, lädt phpMyAdmin stattdessen direkt herunter. Genau diesen Weg beschreiben die folgenden Schritte:
cd /usr/share && wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip && unzip phpmyadmin.zip && rm phpmyadmin.zip && mv phpMyAdmin-*-all-languages phpmyadmin && chmod -R 0755 phpmyadmin
Legen Sie anschließend die Konfigurationsdatei an:
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
phpMyAdmin benötigt einen zufälligen Wert als blowfish_secret, mit dem die Sitzungsdaten im Cookie verschlüsselt werden. Erzeugen Sie einen solchen Wert:
openssl rand -base64 32
Tragen Sie ihn danach in die Konfigurationsdatei ein:
nano /usr/share/phpmyadmin/config.inc.php
Die passende Zeile lautet:
$cfg['blowfish_secret'] = 'HIER_DEN_ERZEUGTEN_WERT_EINTRAGEN';
phpMyAdmin mit Apache2 verknüpfen
Erstellen Sie eine eigene Apache2-Konfigurationsdatei für phpMyAdmin:
nano /etc/apache2/conf-available/phpmyadmin.conf
Der Inhalt für phpmyadmin.conf:
#PHPMyAdmin-Apache2-Konfiguration
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
</Directory>
<Directory /usr/share/phpmyadmin/templates>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
Require all denied
</Directory>
Aktivieren Sie die Konfiguration, laden Sie Apache2 neu und legen Sie das temporäre Verzeichnis mit den passenden Rechten an:
a2enconf phpmyadmin && systemctl reload apache2 && mkdir -p /usr/share/phpmyadmin/tmp/ && chown -R www-data:www-data /usr/share/phpmyadmin/tmp/
Datenbank-Benutzer anlegen
Melden Sie sich als Systembenutzer root an der Datenbank an:
mysql -u root
Legen Sie nun einen eigenen Datenbank-Benutzer an. Verwenden Sie dabei nicht "root", "admin", "user" oder "username" als Namen, sondern einen eigenen Benutzernamen und ein langes, zufälliges Passwort:
#WICHTIG! ERSETZEN SIE USER UND PASSWORD DURCH IHRE EIGENEN ZUGANGSDATEN.
CREATE USER 'USER'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Für einzelne Anwendungen sollten Sie zusätzlich Benutzer mit eingeschränkten Rechten anlegen, die nur auf ihre eigene Datenbank zugreifen dürfen:
CREATE DATABASE meineapp;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON meineapp.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
Die Datenbank-Konsole verlassen Sie jederzeit mit:
exit
LAMP-Stack testen
Rufen Sie phpMyAdmin unter http://<Ihre-Server-IP>/phpmyadmin auf und melden Sie sich mit dem eben angelegten Benutzer an. Klappt die Anmeldung, arbeiten Apache2, PHP und MariaDB korrekt zusammen.
Die PHP-Anbindung prüfen Sie zusätzlich mit einer kurzen Testdatei:
echo "<?php phpinfo();" > /var/www/html/info.php
Nach dem Aufruf von http://<Ihre-Server-IP>/info.php löschen Sie die Datei unbedingt wieder, denn sie verrät Details über Ihre Serverkonfiguration:
rm /var/www/html/info.php
Sicherheitshinweise für den Produktivbetrieb
Ein frisch installierter LAMP-Stack ist noch nicht abgesichert. Diese Punkte sollten Sie ergänzen:
- phpMyAdmin ist ein beliebtes Angriffsziel. Beschränken Sie den Zugriff auf Ihre eigene IP-Adresse, indem Sie im Directory-Block
Require ip 203.0.113.10statt der offenen Freigabe verwenden. - Richten Sie HTTPS ein, damit Passwörter nicht im Klartext übertragen werden. Ohne Verschlüsselung sind Ihre Zugangsdaten auf dem Weg zum Server mitlesbar.
- Halten Sie phpMyAdmin aktuell. Da Sie es manuell installiert haben, aktualisiert
apt upgradees nicht automatisch. - Erstellen Sie regelmäßige Datenbank-Backups und legen Sie diese außerhalb des Servers ab.
Häufige Fehler und Lösungen
Der Browser lädt die PHP-Datei herunter, statt sie auszuführen: Das PHP-Modul ist in Apache2 nicht aktiv. Aktivieren Sie es mit a2enmod php8.4 und starten Sie den Webserver mit systemctl restart apache2 neu.
phpMyAdmin meldet "The configuration file now needs a secret passphrase": In config.inc.php fehlt der Wert für blowfish_secret. Erzeugen Sie ihn mit openssl rand -base64 32 und tragen Sie ihn ein.
"Access denied for user" beim Login in phpMyAdmin: Der Datenbank-Benutzer root nutzt nach mysql_secure_installation in der Regel die unix_socket-Authentifizierung und kann sich deshalb nicht über das Webinterface anmelden. Verwenden Sie den zusätzlich angelegten Benutzer.
Apache2 startet nach einer Konfigurationsänderung nicht mehr: Prüfen Sie die Konfiguration mit apachectl configtest, die Ausgabe nennt Datei und Zeile des Fehlers.
Häufige Fragen
Warum installiert Debian MariaDB statt MySQL?
Welche PHP-Version liefert Debian mit?
Wie bekomme ich eine neuere PHP-Version als die von Debian?
Warum lädt der Browser die PHP-Datei herunter, statt sie auszuführen?
Warum kann ich mich in phpMyAdmin nicht als root anmelden?
2023-2026 KernelHost GmbH. Alle Rechte vorbehalten. Diese Anleitung ist urheberrechtlich geschützt. Eine Veröffentlichung auf anderen Webseiten, auch auszugsweise oder in bearbeiteter Form, ist ohne unsere schriftliche Zustimmung nicht gestattet. Zitate mit Quellenangabe und Link sind ausdrücklich willkommen.

