Objectif
Déployer un serveur web complet avec Apache, MariaDB et PHP sur Debian 11. Cette infrastructure permet d'héberger des applications web dynamiques et constitue la base de nombreux services web.
Prérequis
- Serveur Debian 11 installé et fonctionnel
- Accès root ou utilisateur avec droits sudo
- Connexion réseau active et configurée
- Nom de domaine ou adresse IP accessible (pour les tests)
Procédure Complète
Étape 1 : Mise à jour du système
Avant toute installation, mettre à jour la liste des paquets et le système :
apt update && apt upgrade -y
-y permet de confirmer automatiquement les installations.
Étape 2 : Installation d'Apache
Apache est le serveur web qui va traiter les requêtes HTTP :
apt install apache2 -y
Activer Apache au démarrage du système :
systemctl enable apache2
Démarrer le service Apache :
systemctl start apache2
Vérifier le statut du service :
systemctl status apache2
Vous devriez voir la page par défaut d'Apache "Apache2 Debian Default Page".
Étape 3 : Installation de MariaDB
MariaDB est le système de gestion de base de données :
apt install mariadb-server -y
Activer MariaDB au démarrage :
systemctl enable mariadb
Démarrer le service :
systemctl start mariadb
Sécuriser l'installation de MariaDB :
mysql_secure_installation
- Enter current password for root : [Appuyer sur Entrée]
- Switch to unix_socket authentication : N
- Change the root password? : Y → [Saisir un mot de passe fort]
- Remove anonymous users? : Y
- Disallow root login remotely? : Y
- Remove test database? : Y
- Reload privilege tables? : Y
Étape 4 : Installation de PHP
Installation de PHP et des modules nécessaires :
apt install php php-mysql php-cli php-curl php-gd php-xml php-mbstring -y
- php : Interpréteur PHP
- php-mysql : Connexion PHP vers MySQL/MariaDB
- php-cli : Interface en ligne de commande PHP
- php-curl : Transferts de données via URL
- php-gd : Manipulation d'images
- php-xml : Traitement XML
- php-mbstring : Gestion des chaînes multi-octets
Redémarrer Apache pour prendre en compte PHP :
systemctl restart apache2
Étape 5 : Test de PHP
Créer un fichier de test PHP :
nano /var/www/html/phpinfo.php
Contenu du fichier phpinfo.php :
<?php phpinfo(); ?>
Sauvegarder et quitter (Ctrl+O, Entrée, Ctrl+X)
Une page détaillée affichant la configuration PHP complète doit apparaître.
Supprimer immédiatement le fichier phpinfo.php après le test, car il expose des informations sensibles sur la configuration du serveur.
Supprimer le fichier de test :
rm /var/www/html/phpinfo.php
Vérifications
Vérification des services
systemctl status apache2 systemctl status mariadb
Les deux services doivent être "active (running)"
Vérification des ports
ss -tulpn | grep -E '(apache|mysql)'
Résultat attendu :
- Apache : port 80 (HTTP) et éventuellement 443 (HTTPS)
- MySQL/MariaDB : port 3306
Test de connexion à MariaDB
mysql -u root -p
Saisir le mot de passe root défini lors de mysql_secure_installation
Une fois connecté, tester une commande SQL :
SHOW DATABASES; EXIT;
Vérification de la version PHP
php -v
Affiche la version de PHP installée (généralement PHP 7.4.x sur Debian 11)
Test d'une page PHP simple
Créer un fichier de test basique :
echo "<?php echo 'LAMP fonctionne correctement !'; ?>" > /var/www/html/test.php
Accéder à http://ADRESSE_IP_SERVEUR/test.php
Sécurité et Limites
Mesures de sécurité essentielles
apt install ufw -y ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp ufw enable
Permissions des fichiers web
chown -R www-data:www-data /var/www/html chmod -R 755 /var/www/html
Désactiver l'affichage des erreurs PHP en production
Éditer le fichier de configuration PHP :
nano /etc/php/7.4/apache2/php.ini
Modifier les directives suivantes :
display_errors = Off log_errors = On error_log = /var/log/php/error.log
Sécuriser MariaDB
Configuration complémentaire dans /etc/mysql/mariadb.conf.d/50-server.cnf :
nano /etc/mysql/mariadb.conf.d/50-server.cnf
Vérifier que la directive suivante est présente (pour empêcher les connexions distantes) :
bind-address = 127.0.0.1
Limites techniques (niveau BTS)
- Pas de certificat SSL/TLS configuré (HTTPS)
- Pas de système de sauvegarde automatique
- Pas de monitoring avancé
- Pas de réplication de base de données
- Pas de CDN ou cache avancé
- Pas de système de haute disponibilité
- Configuration minimale pour environnement de test/développement
Points de vigilance
- Toujours supprimer les fichiers de test (phpinfo.php, test.php)
- Utiliser des mots de passe forts pour MySQL root
- Maintenir le système à jour régulièrement
- Surveiller les logs : /var/log/apache2/ et /var/log/mysql/
- Créer des utilisateurs MySQL spécifiques par application (jamais utiliser root)
Fichiers et Répertoires Importants
| Chemin | Description |
|---|---|
| /var/www/html/ | Répertoire racine des fichiers web |
| /etc/apache2/ | Configuration Apache |
| /etc/mysql/ | Configuration MariaDB/MySQL |
| /etc/php/7.4/ | Configuration PHP |
| /var/log/apache2/ | Logs Apache (access.log, error.log) |
| /var/log/mysql/ | Logs MariaDB |
Points Clés pour l'Oral BTS
- LAMP = Linux + Apache + MySQL/MariaDB + PHP
- Apache : serveur web HTTP qui écoute sur le port 80
- MariaDB : fork communautaire de MySQL (100% compatible)
- PHP : langage de script côté serveur pour contenu dynamique
- systemctl : gestionnaire de services sous systemd (Debian 11)
- Sécurisation obligatoire : mysql_secure_installation, firewall, permissions
- Cette stack permet d'héberger WordPress, Nextcloud, GLPI, etc.