Installer Apache, PHP et MariaDB sur Debian 13 (Trixie)

Installer Apache, PHP et MariaDB sur Debian 13 (Trixie)

0 commentaire(s)

Guide révisé pour Debian 13. Stack native APT, sans XAMPP et sans dépôt tiers pour PHP 8.4.

Versions cibles (dépôts officiels Debian 13) :

Composant Version approximative
Apache 2.4.x
PHP 8.4.x
MariaDB 11.8.x
phpMyAdmin 5.2.x

1. Introduction


1.1. Objectif


Mettre en place une plateforme de développement locale avec :

  • Apache2
  • PHP 8.4
  • MariaDB
  • phpMyAdmin

Chaque composant est installé puis vérifié avant de passer au suivant.

1.2. Pourquoi éviter XAMPP


XAMPP est pratique pour démarrer, mais peu flexible sous Linux : changer de version PHP, brancher les services sur systemd, ou coller à la façon Debian de gérer les paquets devient vite pénible.

Sous Debian 13, PHP 8.4, MariaDB 11.8 et Apache sont déjà dans les dépôts officiels. Pas besoin du dépôt Sury pour cette stack.

2. Préparation de l'environnement


2.1. Vérifier la version de Debian


Bash
cat /etc/os-release

Vous devez voir VERSION_CODENAME=trixie (Debian 13).

2.2. Mise à jour des paquets


Bash
sudo apt update && sudo apt upgrade -y

3. Installation des services principaux


3.1. Apache


Apache sert vos pages HTTP sur le port 80 par défaut.

Installer d’abord le paquet, sinon systemctl renvoie Unit apache2.service does not exist :

Bash
sudo apt install apache2 -y
sudo systemctl enable --now apache2
sudo systemctl status apache2 --no-pager

Le statut doit indiquer active (running).

Vérification navigateur (port 80 par défaut) : http://localhost/

Si la page Apache n’apparaît pas :

Bash
sudo systemctl start apache2
sudo systemctl status apache2 --no-pager

Commandes utiles :

Bash
sudo systemctl stop apache2
sudo systemctl restart apache2
sudo systemctl reload apache2

3.1.1. Changer le port HTTP vers 90 (optionnel)


Un nombre incalculable d'application utilise le port 80, ce qui peut donner des situations particulières. En effet, si votre serveur appache s'ouvre après une application qui l'utilise déjà, vous êtes bloqué.

Sous Debian, le port se configure à deux endroits : l’écoute globale (ports.conf) et chaque Virtual Host. Ne changez pas seulement l’un des deux.

A. Écoute globale :

Bash
sudo nano /etc/apache2/ports.conf

Remplacez :

Listen 80

par :

Listen 90

Laissez Listen 443 tel quel si la section SSL est présente (inutile pour ce guide local HTTP).

B. Virtual Host par défaut :

Bash
sudo nano /etc/apache2/sites-available/000-default.conf

Remplacez :

<VirtualHost *:80>

par :

<VirtualHost *:90>

C. Tester la conf, puis recharger :

Bash
sudo apache2ctl configtest
sudo systemctl reload apache2

configtest doit afficher Syntax OK.

D. Vérifier que le port 90 écoute :

Bash
ss -tlnp | grep ':90'
  1. Accès navigateur : http://localhost:90/

Utilisez bien http://, pas https://.
Apache écoute du HTTP plain sur le port 90. Si le navigateur force le HTTPS (mode HTTPS-Only de Firefox, HSTS, etc.), vous aurez SSL_ERROR_RX_RECORD_TOO_LONG. Dans ce cas : tapez explicitement http://localhost:90/ ou désactivez temporairement le HTTPS-Only pour localhost.

À partir d’ici, toutes les URLs locales utilisent le port 90
(http://localhost:90/, http://localhost:90/info.php, http://localhost:90/phpmyadmin).

Si vous créez d’autres vhosts plus tard, mettez aussi <VirtualHost *:90> (ou le port choisi) dans chaque fichier de site.

3.2. MariaDB


MariaDB remplace MySQL dans les dépôts Debian. L’API reste compatible pour la plupart des projets PHP.

Bash
sudo apt install mariadb-server -y
sudo systemctl enable --now mariadb
sudo systemctl status mariadb --no-pager

Sécuriser l’installation :

Sous Debian, MariaDB est déjà sécurisé par défaut. Le script affiche d’ailleurs :

MariaDB is secure by default in Debian. Running this script is useless at best...

On le lance quand même pour choisir clairement le mode d’auth de root :

Bash
sudo mariadb-secure-installation

Deux possibilités existent. Choisissez-en une, notez-la, puis suivez les mentions si option A / si option B dans la suite du guide.

Option A — simple Option B — plus sûre
Auth de root Mot de passe SQL unix_socket
Compte pour phpMyAdmin / apps root + mdp (pas de user dev) dev + mdp (créé juste après le script)
Admin terminal mariadb -u root -p sudo mariadb
Créer un user dev ? Non Oui (obligatoire)

Warning — option A.
Se connecter à phpMyAdmin (et éventuellement aux apps) en root est le chemin le plus simple.
C'est aussi le moins propre / le moins sûr : un mdp root fuité = toutes les bases.
OK pour un PC perso en local.
L'option B existe précisément pour ceux qui préfèrent ne jamais exposer root au web.

Option A — root + mot de passe (simple)


Réponses dans mariadb-secure-installation :

Question Réponse
Current password for root Entrée (vide)
Switch to unix_socket authentication n
Change the root password? Y → choisissez un mot de passe et notez-le
Remove anonymous users? Y
Disallow root login remotely? Y
Remove test database? Y
Reload privilege tables? Y

Vérifier :

Bash
mariadb -u root -p

Si option A pour tout le reste du tuto : utilisez uniquement root + ce mot de passe (phpMyAdmin, exemples PDO, etc.).
Ne créez pas d'utilisateur dev.

Option B — unix_socket + utilisateur dev (plus sûre)


Réponses dans mariadb-secure-installation :

Question Réponse
Current password for root Entrée (vide)
Switch to unix_socket authentication Y
Change the root password? n
Remove anonymous users? Y
Disallow root login remotely? Y
Remove test database? Y
Reload privilege tables? Y

Admin terminal (pas de mdp SQL pour root) :

Bash
sudo mariadb

Pourquoi un user dev en option B ?
phpMyAdmin peut se connecter en root quand root a un mot de passe SQL — c'est l'option A.
En option B, root est en unix_socket : MariaDB n'accepte root que si le processus Linux est déjà root (sudo mariadb). Apache / phpMyAdmin tournent en www-data, donc un login web root échoue. Il faut un user SQL avec mot de passe (dev).

Créez immédiatement dev (compte web / apps pour toute la suite du tuto si option B) :

SQL
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'change_me_strong_password';
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Remplacez change_me_strong_password par un vrai mot de passe et notez-le.

Vérifier :

Bash
mariadb -u dev -p

Si option B pour tout le reste du tuto : phpMyAdmin, PDO, etc. → dev + ce mot de passe. Jamais root depuis le web.

Variante plus stricte (une seule base) :

SQL
CREATE DATABASE mon_projet;
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'change_me_strong_password';
GRANT ALL PRIVILEGES ON mon_projet.* TO 'dev'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Détail des questions du script (commun aux deux)


Enter current password for root
Mot de passe root actuel pour autoriser le script. Sous install fraîche Debian : souvent vide → Entrée.

Switch to unix_socket authentication

  • n → option A (mdp SQL).
  • Y → option B (socket Linux / sudo).

Change the root password?

  • Option A : Y + définir le mdp.
  • Option B : n (inutile au quotidien avec le socket).

Remove anonymous users? → Y (comptes sans user inutiles, quel que soit le mode)
Disallow root login remotely? → Y (root local uniquement ; « disallow » = interdire le distant)
Remove test database? → Y
Reload privilege tables? → Y

Sur la machine où ce guide a été suivi en live : option A (root simple, pas de dev). L'option B reste documentée pour ceux qui la choisissent.

3.3. PHP 8.4


Sous Debian 13, PHP 8.4 est disponible nativement. Aucun dépôt Sury n’est requis.

Bash
sudo apt install \
php8.4 \
php8.4-cli \
libapache2-mod-php8.4 \
php8.4-mysql \
php8.4-xml \
php8.4-mbstring \
php8.4-curl \
php8.4-zip \
php8.4-sqlite3 \
php8.4-gd \
php8.4-intl \
-y

Recharger Apache pour prendre en charge le module PHP :

Bash
sudo systemctl restart apache2

Vérifier la CLI :

Bash
php -v

Vous devez voir une ligne du type PHP 8.4.x.

Créer un fichier de test :

Bash
echo '<?php phpinfo();' | sudo tee /var/www/html/info.php

Ouvrir http://localhost:90/info.php, vérifier PHP 8.4, puis supprimer le fichier :

Bash
sudo rm /var/www/html/info.php

Ne laissez pas info.php en place hors environnement de confiance : il expose la configuration du serveur.

3.4. phpMyAdmin


Ordre obligatoire : installer le paquet (§3.4.1) → vérifier que les fichiers existent → seulement ensuite activer Apache (§3.4.2).
Sans le paquet, /etc/phpmyadmin/apache.conf n’existe pas : un ln crée un lien cassé et a2enconf échoue avec Conf phpmyadmin does not exist!.

3.4.1. Installation


Bash
sudo apt update
sudo apt install phpmyadmin -y

Pendant l’installation (écrans debconf) :

  1. Choisir le serveur web : apache2 (Espace pour cocher, Tab, Entrée).
  2. Faut-il configurer la base de données de phpmyadmin avec dbconfig-common ? → Oui.
    MariaDB est déjà installée ; dbconfig-common crée pour vous la base et l’utilisateur internes dont phpMyAdmin a besoin.
    Répondez Non seulement si vous voulez tout faire à la main (inutile pour un env de dev simple).
  3. Définir un mot de passe pour l’utilisateur MySQL/MariaDB phpmyadmin (notez-le ; ce n’est pas le même compte que root ou dev pour vous connecter à l’interface web).

Point de contrôle — ne passez à 3.4.2 que si ceci est OK :

Bash
dpkg -l phpmyadmin | grep '^ii'
ls -la /etc/phpmyadmin/apache.conf
  • la 1ʳᵉ commande doit montrer ii phpmyadmin
  • la 2ᵉ doit lister le fichier (pas « Aucun fichier »)

Si phpmyadmin n’est pas ii, arrêtez-vous : réinstallez (sudo apt install phpmyadmin -y) avant toute conf Apache.

3.4.2. Activer la configuration Apache


À faire uniquement après le point de contrôle §3.4.1.

Le paquet fournit /etc/phpmyadmin/apache.conf. Apache doit la charger via conf-available → a2enconf.

Souvent l’installeur a déjà créé le lien. Vérifiez :

Bash
ls -la /etc/apache2/conf-available/phpmyadmin.conf
  • Si le fichier/lien existe et pointe vers /etc/phpmyadmin/apache.conf → activez et rechargez seulement :
Bash
sudo a2enconf phpmyadmin
sudo systemctl reload apache2
  • Sinon, créez le lien (avec sauvegarde si un fichier occupe déjà le nom) :
Bash
# Abort if the package config is missing (do not create a broken symlink)
test -f /etc/phpmyadmin/apache.conf || {
echo "ERROR: /etc/phpmyadmin/apache.conf missing — finish §3.4.1 first"
exit 1
}
# Keep a copy if a file already occupies that name
if [ -e /etc/apache2/conf-available/phpmyadmin.conf ]; then
sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf \
/etc/apache2/conf-available/phpmyadmin.conf.bak
fi
sudo ln -sf /etc/phpmyadmin/apache.conf \
/etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin
sudo systemctl reload apache2
  • test -f : bloque si le paquet n’est pas là (évite le symlink cassé).
  • cp -a : vraie sauvegarde avant remplacement.
  • ln -sf : lien vers la conf du paquet.

3.4.3. Accès


URL : http://localhost:90/phpmyadmin

  • Si option A : login root + mot de passe de mariadb-secure-installation. Pas de dev.
  • Si option B : login dev + mot de passe créé en §3.2.
    Un login web root échoue ici à cause de unix_socket (en option A, root + mdp fonctionne).

3.4.4. User dev — rappel / réparation (option B uniquement)


Si option A : ignorez cette section. Vous restez sur root.

Si option B : dev a déjà été créé en §3.2. Ici seulement en cas d'oubli ou de reset.

Bash
sudo mariadb
SQL
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'change_me_strong_password';
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Changer le mot de passe de dev :

SQL
ALTER USER 'dev'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
EXIT;

Une base dédiée (recommandé pour un projet, toujours en option B) :

SQL
CREATE DATABASE mon_projet;
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'change_me_strong_password';
GRANT ALL PRIVILEGES ON mon_projet.* TO 'dev'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3.4.5. Dépannage connexion


Se connecter en admin :

Bash
# Si option A :
mariadb -u root -p
# Si option B :
sudo mariadb

Lister les utilisateurs :

SQL
SELECT User, Host, plugin FROM mysql.user;
  • Si option A : root a un plugin mot de passe → phpMyAdmin = root.
  • Si option B : root a en général plugin = unix_socket → phpMyAdmin = dev.

Changer un mot de passe :

SQL
-- Si option A :
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
-- Si option B :
ALTER USER 'dev'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;

Quitter :

SQL
EXIT;

3.4.6. Sécurisation rapide (local)


Pour un poste de développement local, l’accès localhost suffit souvent. Pour restreindre davantage, éditez la conf Apache phpMyAdmin et limitez l’accès, par exemple :

Require local

Puis :

Bash
sudo systemctl reload apache2

4. Configuration PHP


4.1. Vérifier la version active


Bash
php -v
php -m

4.2. Plusieurs versions PHP (optionnel)


Si vous installez plus tard d’autres branches (ex. via Sury pour PHP 8.5), basculez la CLI avec :

Bash
sudo update-alternatives --display php
sudo update-alternatives --config php

Pour Apache mod_php, n’activez qu’un module PHP à la fois :

Bash
# Example: switch from php8.4 to another installed version
sudo a2dismod php8.4
sudo a2enmod phpX.Y
sudo systemctl restart apache2

Remplacez phpX.Y par la version réellement installée.

4.3. Fichier php.ini Apache


Bash
sudo nano /etc/php/8.4/apache2/php.ini

Après modification :

Bash
sudo systemctl restart apache2

Réglages fréquents en local :

display_errors = On
error_reporting = E_ALL
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M

5. Fichiers essentiels


5.1. Apache


Rôle Chemin
Config principale /etc/apache2/apache2.conf
Ports d’écoute /etc/apache2/ports.conf
Document root /var/www/html/
Sites disponibles /etc/apache2/sites-available/
Sites activés /etc/apache2/sites-enabled/
Vhost par défaut /etc/apache2/sites-available/000-default.conf
Logs accès /var/log/apache2/access.log
Logs erreur /var/log/apache2/error.log

Activer / désactiver un vhost :

Bash
sudo a2ensite nom-du-site.conf
sudo a2dissite nom-du-site.conf
sudo systemctl reload apache2

5.2. PHP


Rôle Chemin
php.ini (Apache) /etc/php/8.4/apache2/php.ini
php.ini (CLI) /etc/php/8.4/cli/php.ini
Extensions voir php -i | grep extension_dir

5.3. MariaDB


Rôle Chemin
Config serveur /etc/mysql/mariadb.conf.d/50-server.cnf
Données /var/lib/mysql/
Logs erreur /var/log/mysql/error.log

5.4. phpMyAdmin


Rôle Chemin
Config app /etc/phpmyadmin/config.inc.php
Conf Apache /etc/phpmyadmin/apache.conf
Logs /var/log/apache2/error.log et access.log

6. Checklist de validation


Bash
# Services
systemctl is-active apache2
systemctl is-active mariadb
# Versions
apache2 -v
php -v
mariadb --version
# Ports
ss -tlnp | grep -E ':90|:3306'
  • http://localhost:90/ répond
  • Apache écoute bien sur le port 90 (pas 80)
  • php -v affiche 8.4.x
  • http://localhost:90/phpmyadmin s’ouvre
  • Si option A : phpMyAdmin OK avec root + mdp (pas de dev)
  • Si option B : user dev créé (§3.2) et phpMyAdmin OK avec dev + mdp
  • info.php a été supprimé

7. Particularités Debian 13


  • PHP 8.4 est natif : pas besoin de dépôt Sury ni de apt-key (déprécié).
  • MariaDB est en 11.8 ; le script de sécurisation s’appelle mariadb-secure-installation.
  • Apache reste en 2.4, avec les mêmes outils a2enmod / a2ensite / systemctl.
  • Ce guide utilise le port HTTP 90 (ports.conf + Virtual Host).
  • MariaDB : option A = root simple (pas de dev) ; option B = unix_socket + dev. L'option B existe pour ceux que le warning A convainc.

8. Suite possible


Pour des projets locaux avec un nom de domaine custom (monprojet.local), configurez un Virtual Host Apache pointant vers un dossier dédié (hors /var/www/html si vous le souhaitez), puis ajoutez l’entrée dans /etc/hosts.

Article détaillé ici : Comment créer un VirtualHost Apache sur Debian 13 pour un projet PHP local

Vous aimerez peut-être aussi :

Commentaires

Aucun commentaire approuvé pour le moment.

Connectez-vous avec un compte commentateur pour publier un commentaire. Se connecter.