Installer et configurer un serveur web Apache et une base de données SQL sur Debian
- Une machine ou serveur Debian avec un accès Internet
- Un compte utilisateur avec privilèges sudo ou root
- Un terminal Bash et des notions élémentaires de la ligne de commande Linux
🎯 Objectif du tutoriel
Dans ce guide, vous allez apprendre à installer et configurer un environnement web de base sous Debian en déployant le serveur HTTP Apache2, un VirtualHost dédié pour votre application, ainsi que le système de gestion de base de données MySQL ou MariaDB sécurisé.
Le couple Apache et MySQL représente le socle historique et robuste de la pile LAMP. Il permet d'héberger rapidement et de manière modulaire vos sites web statiques, CMS ou applications dynamiques.
🛠️ Étape 1 : Installation et démarrage d'Apache
Commencez par mettre à jour l'index des dépôts de paquets, puis installez Apache :
sudo apt update
sudo apt install -y apache2
Activez et démarrez le service Apache pour qu'il s'exécute immédiatement et à chaque redémarrage du système :
sudo systemctl enable --now apache2
- Fichiers de configuration :
/etc/apache2/ - Fichiers de sites disponibles :
/etc/apache2/sites-available/ - Fichiers de sites activés :
/etc/apache2/sites-enabled/ - Racine web par défaut :
/var/www/html/
⚙️ Étape 2 : Configuration d'un VirtualHost dédié
Pour isoler la configuration de votre site web, créez un fichier VirtualHost personnalisé au lieu d'utiliser le fichier par défaut.
1. Création de l'arborescence et des permissions
Créez le répertoire dédié à votre site et affectez-lui les droits d'accès adéquats :
sudo mkdir -p /var/www/mon-site
sudo chown -R $USER:www-data /var/www/mon-site
sudo chmod -R 755 /var/www/mon-site
Créez ensuite une page d'accueil de test :
echo "<!DOCTYPE html><html><head><title>Mon Site</title></head><body><h1>Serveur Apache et MySQL opérationnel !</h1></body></html>" > /var/www/mon-site/index.html
2. Déclaration du fichier VirtualHost
Dupliquez le fichier de configuration par défaut vers un nouveau fichier :
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/mon-site.conf
Éditez le fichier /etc/apache2/sites-available/mon-site.conf :
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName localhost
DocumentRoot /var/www/mon-site
<Directory /var/www/mon-site>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mon-site_error.log
CustomLog ${APACHE_LOG_DIR}/mon-site_access.log combined
</VirtualHost>
3. Activation du site et rechargement d'Apache
Désactivez le site par défaut, activez votre nouveau VirtualHost, validez la syntaxe de configuration puis rechargez le service :
sudo a2dissite 000-default.conf
sudo a2ensite mon-site.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
Pour tester que la page est servie correctement depuis le terminal :
curl -I http://localhost
Vous devez obtenir une réponse HTTP/1.1 200 OK.
🗄️ Étape 3 : Installation et sécurisation de la base de données
Sous Debian, vous pouvez installer MariaDB (le fork communautaire standard et recommandé) ou MySQL Server.
- MariaDB (Recommandé sur Debian)
- MySQL Community Server
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadb
sudo apt install -y mysql-server
sudo systemctl enable --now mysql
Sécurisation initiale de la base de données
Exécutez le script d'automatisation de la sécurité afin de supprimer les utilisateurs anonymes, désactiver les connexions root distantes et supprimer la base de test :
- MariaDB (Recommandé sur Debian)
- MySQL Community Server
sudo mariadb_secure_installation
sudo mysql_secure_installation
🔑 Étape 4 : Création de la base de données et de l'utilisateur
Connectez-vous à la console d'administration SQL :
sudo mysql -u root
Exécutez les requêtes SQL suivantes pour créer la base et l'utilisateur applicatif dédié :
-- Création de la base de données
CREATE DATABASE mon_site CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Création de l'utilisateur dédié
CREATE USER 'mon_utilisateur'@'localhost' IDENTIFIED BY 'votre_mot_de_passe_securise';
-- Attribution des privilèges sur la base concernée
GRANT ALL PRIVILEGES ON mon_site.* TO 'mon_utilisateur'@'localhost';
-- Application des changements
FLUSH PRIVILEGES;
-- Quitter la console MySQL
EXIT;
Évitez d'utiliser le compte root directement dans vos fichiers applicatifs. Privilégiez systématiquement un utilisateur avec des privilèges restreints à sa base de données.
🔍 Étape 5 : Diagnostics et vérifications
En cas d'anomalie ou de page inaccessible, utilisez les commandes de contrôle ci-dessous :
1. Statut des services
sudo systemctl status apache2
sudo systemctl status mariadb # ou mysql selon le paquet installé
2. Consultation des journaux d'erreurs
sudo tail -f /var/log/apache2/mon-site_error.log
sudo journalctl -u apache2 -e --no-pager
3. Contrôle des ports réseau en écoute
Vérifiez qu'Apache écoute sur le port 80 (HTTP) et la base de données sur le port 3306 :
sudo ss -tlpn | grep -E ':(80|3306)'
📋 Résumé des commandes clés
| Action | Commande |
|---|---|
| Vérifier la syntaxe Apache | sudo apache2ctl configtest |
| Activer un VirtualHost | sudo a2ensite mon-site.conf |
| Désactiver un VirtualHost | sudo a2dissite 000-default.conf |
| Recharger Apache sans coupure | sudo systemctl reload apache2 |
| Connexion client MySQL | mysql -u mon_utilisateur -p |
| Lister les ports d'écoute | sudo ss -tlpn |
🚀 Pour aller plus loin
- Sécurisation HTTPS : Mettre en place un certificat SSL gratuit via Let's Encrypt et le client
certbot. - Support applicatif dynamique : Installer PHP (
php,libapache2-mod-php,php-mysql) pour héberger des applications WordPress ou Symfony. - Reverse Proxy : Configurer
mod_proxyetmod_proxy_httppour rediriger les requêtes vers des conteneurs applicatifs locaux (ex: Node.js ou Go sur le port 8080).