Installer une pile LAMP sur Debian 13 et Debian 12 : Apache2, PHP 8, MariaDB et phpMyAdmin

Publié le Mis à jour le 8 min de lecture

Apache2, PHP 8, MariaDB et phpMyAdmin sur Debian 13 ou Debian 12 : toute la mise en place pas à pas, sécurisation et dépannage compris.

Vous souhaitez installer Apache2, PHP 8, une base de données MySQL et phpMyAdmin, autrement dit une pile LAMP complète, sur votre serveur Debian 13 (Trixie) ou Debian 12 (Bookworm) ? Ce guide vous accompagne pas à pas dans toute la mise en place, du serveur web jusqu'à l'accès sécurisé à la base de données.

Important au sujet du serveur de base de données : Debian ne contient aucun paquet mysql-server, et ce dans aucune version actuelle. Sous Debian, vous installez toujours MariaDB. MariaDB est issu de MySQL, parle le même protocole et le même langage de requête, et des outils comme phpMyAdmin ou l'extension PHP php-mysql fonctionnent avec lui sans la moindre adaptation. Quand ce guide parle de bases de données MySQL, c'est donc MariaDB qui tourne en dessous.

Prérequis

Il vous faut un accès SSH avec les droits root (ou un utilisateur disposant de sudo) sur un Debian récent. Nous recommandons Debian 13 « Trixie » et Debian 12 « Bookworm ». Debian 10 a atteint sa fin de support en juin 2024 et ne reçoit plus de mises à jour de sécurité régulières : il ne convient donc plus à un usage en production.

Commencez par actualiser la liste des paquets, puis installez les mises à jour disponibles :

apt update

apt upgrade -y

Installer Apache2 et les paquets de base

Installez le serveur web avec les paquets utilitaires dont vous aurez besoin dans les étapes suivantes :

apt install -y nano curl wget unzip ca-certificates apt-transport-https lsb-release gnupg apache2

Ouvrez ensuite http://<IP-de-votre-serveur>/ dans votre navigateur. Si la page par défaut d'Apache2 s'affiche, le serveur web fonctionne déjà.

Installer PHP 8

La version de PHP que vous obtenez depuis les dépôts dépend de votre distribution. Une commande comportant un numéro de version figé comme apt install php8.4 échoue donc sur Debian 12, qui ne propose que PHP 8.2. Ce tableau récapitule la version livrée par chaque distribution (état en juillet 2026) :

DistributionVersion de PHP dans les dépôts
Debian 13PHP 8.4
Debian 12PHP 8.2
Debian 11PHP 7.4

Utilisez donc les métapaquets sans numéro de version. Ils tirent automatiquement la version qui correspond à votre distribution et se comportent de la même façon sur tous les Debian :

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

Si vous préférez faire tourner PHP via FPM plutôt que par le module Apache, le principe reste le même. Là encore, le métapaquet mène au but de façon fiable, alors que les noms versionnés comme php8.4-fpm n'existent que sur Debian 13 :

apt install -y php-fpm

Pour savoir quelle version a réellement été installée :

php -v

S'il vous faut une version que votre édition de Debian ne fournit pas (par exemple PHP 8.4 sur Debian 12), ajoutez le dépôt PHP d'Ondřej Surý. La clé de signature est alors installée sous la forme d'un paquet keyring dédié, puis rattachée à ce seul dépôt dans la ligne sources grâce à signed-by= :

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

L'ancienne méthode par apt-key add est dépréciée depuis Debian 11 et ne doit plus être utilisée : une clé enregistrée de cette façon serait valable pour l'ensemble des dépôts du système.

Ce n'est qu'avec ce dépôt que les noms de paquets versionnés deviennent disponibles sur toutes les éditions de Debian. Vous pouvez ensuite installer la version de PHP souhaitée avec les extensions habituelles :

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

Si plusieurs versions de PHP cohabitent ensuite, indiquez celle qu'Apache2 doit utiliser :

a2dismod php8.2

a2enmod php8.4

systemctl restart apache2

La commande php -v vous indique quelle version est active en ligne de commande.

Installer et sécuriser MariaDB comme serveur de base de données

Comme indiqué en introduction, il n'existe pas de paquet mysql-server sous Debian. Le serveur de base de données s'appelle ici MariaDB, dans la version suivante selon votre Debian :

DistributionServeur de base de données dans les dépôts
Debian 13MariaDB 11.8
Debian 12MariaDB 10.11
Debian 11MariaDB 10.5

Installez le serveur, puis lancez immédiatement la procédure de sécurisation :

apt install -y mariadb-server mariadb-client

mysql_secure_installation

Le script pose plusieurs questions. Les versions récentes de MariaDB demandent d'abord si vous voulez passer à l'authentification unix_socket. Cette option est judicieuse, car l'utilisateur de base de données root ne peut alors se connecter qu'en tant qu'utilisateur système root. Répondez y à toutes les autres questions (supprimer les utilisateurs anonymes, interdire la connexion distante pour root, supprimer la base de test, recharger les privilèges). Définissez également un mot de passe de base de données robuste.

Vérifiez ensuite que le service tourne :

systemctl status mariadb

Installer phpMyAdmin

Pour phpMyAdmin, vous avez deux possibilités. Le paquet phpmyadmin figure dans les dépôts de toutes les versions actuelles de Debian et s'installe en une seule étape :

apt install phpmyadmin -y

C'est pratique, mais cette version accuse souvent un retard sur celle publiée par l'éditeur. Si vous voulez toujours la dernière mouture, téléchargez plutôt phpMyAdmin directement. C'est exactement la méthode décrite dans les étapes suivantes :

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

Créez ensuite le fichier de configuration :

cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

phpMyAdmin a besoin d'une valeur aléatoire comme blowfish_secret : elle sert à chiffrer les données de session stockées dans le cookie. Générez cette valeur :

openssl rand -base64 32

Reportez-la ensuite dans le fichier de configuration :

nano /usr/share/phpmyadmin/config.inc.php

La ligne concernée est la suivante :

$cfg['blowfish_secret'] = 'SAISIR_ICI_LA_VALEUR_GENEREE';

Relier phpMyAdmin à Apache2

Créez un fichier de configuration Apache2 dédié à phpMyAdmin :

nano /etc/apache2/conf-available/phpmyadmin.conf

Le contenu de phpmyadmin.conf :

#Configuration Apache2 pour PHPMyAdmin

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>

Activez la configuration, rechargez Apache2 et créez le répertoire temporaire avec les droits qui conviennent :

a2enconf phpmyadmin && systemctl reload apache2 && mkdir -p /usr/share/phpmyadmin/tmp/ && chown -R www-data:www-data /usr/share/phpmyadmin/tmp/

Créer un utilisateur de base de données

Connectez-vous à la base de données en tant qu'utilisateur système root :

mysql -u root

Créez maintenant votre propre utilisateur de base de données. N'utilisez pas « root », « admin », « user » ou « username » comme nom, mais un identifiant qui vous est propre et un mot de passe long et aléatoire :

#IMPORTANT ! REMPLACEZ USER ET PASSWORD PAR VOS PROPRES IDENTIFIANTS.

CREATE USER 'USER'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Pour chaque application, créez en plus des utilisateurs aux droits restreints, qui n'ont accès qu'à leur propre base de données :

CREATE DATABASE monappli;

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON monappli.* TO 'appuser'@'localhost';

FLUSH PRIVILEGES;

Vous quittez la console de base de données à tout moment avec :

exit

Tester la pile LAMP

Ouvrez phpMyAdmin à l'adresse http://<IP-de-votre-serveur>/phpmyadmin et connectez-vous avec l'utilisateur que vous venez de créer. Si la connexion aboutit, Apache2, PHP et MariaDB travaillent correctement ensemble.

Vous pouvez vérifier en plus l'intégration de PHP avec un court fichier de test :

echo "<?php phpinfo();" > /var/www/html/info.php

Après avoir consulté http://<IP-de-votre-serveur>/info.php, supprimez impérativement ce fichier, car il révèle des détails sur la configuration de votre serveur :

rm /var/www/html/info.php

Conseils de sécurité pour la production

Une pile LAMP fraîchement installée n'est pas encore sécurisée. Complétez-la sur les points suivants :

  • phpMyAdmin est une cible d'attaque très prisée. Restreignez l'accès à votre propre adresse IP en utilisant Require ip 203.0.113.10 dans le bloc Directory, au lieu d'une autorisation ouverte à tous.
  • Mettez en place HTTPS afin que les mots de passe ne transitent pas en clair. Sans chiffrement, vos identifiants sont lisibles sur le trajet vers le serveur.
  • Gardez phpMyAdmin à jour. Comme vous l'avez installé manuellement, apt upgrade ne s'en occupe pas automatiquement.
  • Créez régulièrement des sauvegardes de vos bases de données et conservez-les en dehors du serveur.

Erreurs fréquentes et solutions

Le navigateur télécharge le fichier PHP au lieu de l'exécuter : le module PHP n'est pas actif dans Apache2. Activez-le avec a2enmod php8.4, puis redémarrez le serveur web avec systemctl restart apache2.

phpMyAdmin signale « The configuration file now needs a secret passphrase » : la valeur de blowfish_secret manque dans config.inc.php. Générez-la avec openssl rand -base64 32 et reportez-la dans le fichier.

« Access denied for user » lors de la connexion à phpMyAdmin : après mysql_secure_installation, l'utilisateur de base de données root utilise en général l'authentification unix_socket et ne peut donc pas se connecter via l'interface web. Utilisez l'utilisateur que vous avez créé en plus.

Apache2 ne démarre plus après une modification de la configuration : vérifiez celle-ci avec apachectl configtest, la sortie indique le fichier et la ligne où se trouve l'erreur.

Questions fréquentes

Pourquoi Debian installe-t-il MariaDB au lieu de MySQL ?
Aucune version actuelle de Debian ne contient de paquet nommé mysql-server. Le serveur de base de données livré est MariaDB, issu de MySQL, avec le même protocole et le même langage de requête. Debian 13 fournit MariaDB 11.8, Debian 12 la version 10.11 et Debian 11 la version 10.5.
Quelle version de PHP Debian fournit-il ?
Debian 13 apporte PHP 8.4, Debian 12 PHP 8.2 et Debian 11 encore PHP 7.4. Utilisez donc les métapaquets sans numéro de version, c'est-à-dire php ou php-fpm. Une commande comportant un numéro figé comme apt install php8.4 échoue sur Debian 12, où ce paquet n'existe pas.
Comment obtenir une version de PHP plus récente que celle de Debian ?
Par le dépôt PHP d'Ondřej Surý. La clé de signature arrive sur le système sous la forme d'un paquet keyring dédié et se voit rattachée à ce seul dépôt via signed-by. Ce n'est qu'ensuite que les noms de paquets versionnés comme php8.4-fpm deviennent disponibles sur toutes les éditions de Debian.
Pourquoi le navigateur télécharge-t-il le fichier PHP au lieu de l'exécuter ?
Dans ce cas, le module PHP n'est pas actif dans Apache2. Activez-le avec a2enmod suivi du nom de votre version de PHP, par exemple a2enmod php8.4, puis redémarrez Apache2 avec systemctl restart apache2.
Pourquoi ne puis-je pas me connecter à phpMyAdmin en tant que root ?
Après l'exécution de mysql_secure_installation, l'utilisateur de base de données root utilise en général l'authentification unix_socket et ne peut donc pas se connecter via l'interface web. Créez pour cela un utilisateur de base de données dédié.

LAMP Apache2 PHP MariaDB MySQL phpMyAdmin Debian 13 Debian