LAMP-Stack auf Debian 13 und Debian 12 installieren: Apache2, PHP 8, MariaDB und phpMyAdmin

Veröffentlicht am Aktualisiert am 7 Min. Lesezeit

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):

DistributionPHP-Version aus den Paketquellen
Debian 13PHP 8.4
Debian 12PHP 8.2
Debian 11PHP 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:

DistributionDatenbankserver aus den Paketquellen
Debian 13MariaDB 11.8
Debian 12MariaDB 10.11
Debian 11MariaDB 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.10 statt 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 upgrade es 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?
Debian enthält in keiner aktuellen Version ein Paket namens mysql-server. Der mitgelieferte Datenbankserver ist MariaDB, ein aus MySQL hervorgegangener Server mit demselben Protokoll und derselben Abfragesprache. Debian 13 liefert MariaDB 11.8, Debian 12 die Version 10.11 und Debian 11 die Version 10.5.
Welche PHP-Version liefert Debian mit?
Debian 13 bringt PHP 8.4 mit, Debian 12 PHP 8.2 und Debian 11 noch PHP 7.4. Verwenden Sie deshalb die Metapakete ohne Versionsnummer, also php beziehungsweise php-fpm. Ein Befehl mit fester Nummer wie apt install php8.4 schlägt auf Debian 12 fehl, dort existiert dieses Paket nicht.
Wie bekomme ich eine neuere PHP-Version als die von Debian?
Über das PHP-Repository von Ondřej Surý. Der Signaturschlüssel kommt dabei als eigenes Keyring-Paket ins System und wird per signed-by genau dieser Paketquelle zugeordnet. Erst danach stehen versionsbehaftete Paketnamen wie php8.4-fpm auf jeder Debian-Ausgabe zur Verfügung.
Warum lädt der Browser die PHP-Datei herunter, statt sie auszuführen?
In diesem Fall ist das PHP-Modul in Apache2 nicht aktiv. Aktivieren Sie es mit a2enmod und dem Namen Ihrer PHP-Version, etwa a2enmod php8.4, und starten Sie Apache2 anschließend mit systemctl restart apache2 neu.
Warum kann ich mich in phpMyAdmin nicht als root anmelden?
Nach dem Ausführen von mysql_secure_installation nutzt der Datenbank-Benutzer root in der Regel die unix_socket-Authentifizierung und kann sich deshalb nicht über das Webinterface anmelden. Legen Sie dafür einen eigenen Datenbank-Benutzer an.

LAMP Apache2 PHP MariaDB MySQL phpMyAdmin Debian 13 Debian