Debian 12 : Installer et Configurer Apache2 + PHP + HTTPS

Catégorie: Linux / Debian / Web / Apache | Niveau: Intermédiaire

Introduction

Ce tutoriel vous guide à travers l'installation et la configuration de base d'un serveur web Apache2 avec support PHP sur Debian 12. Nous verrons ensuite comment configurer un VirtualHost pour héberger un site web spécifique et le sécuriser avec un certificat HTTPS gratuit fourni par Let's Encrypt via Certbot.

Prérequis : Un serveur Debian 12 accessible, avec droits `sudo`, et un nom de domaine pointant vers l'adresse IP publique de votre serveur.

1. Installation d'Apache2 et PHP

Mettez à jour la liste des paquets et installez Apache2, PHP et les modules nécessaires pour l'intégration avec Apache et MySQL/MariaDB :


sudo apt update
sudo apt install apache2 -y
sudo apt install php php-mysql libapache2-mod-php -y
        

Une fois l'installation terminée, Apache devrait démarrer automatiquement. Vous pouvez vérifier son statut :


sudo systemctl status apache2
        

Redémarrez Apache pour vous assurer que le module PHP est bien chargé :


sudo systemctl restart apache2
        

Vous devriez pouvoir accéder à la page par défaut d'Apache en entrant l'adresse IP de votre serveur dans un navigateur web.

2. Préparation du Répertoire et Permissions

Créez le répertoire qui contiendra les fichiers de votre site web et assignez les bonnes permissions pour qu'Apache puisse les lire.


# Créez la structure de dossiers (adaptez 'augustin-roux.info' à votre nom de domaine)
sudo mkdir -p /sites/augustin-roux.info/public_html

# Donnez la propriété à l'utilisateur/groupe Apache (www-data sur Debian)
sudo chown -R www-data:www-data /sites/augustin-roux.info/public_html

# Définissez les permissions appropriées (755 pour les dossiers, 644 pour les fichiers)
sudo chmod -R 755 /sites/augustin-roux.info
# (Vous ajusterez les permissions des fichiers une fois qu'ils seront créés)
# Exemple: sudo find /sites/augustin-roux.info/public_html -type f -exec chmod 644 {} \;
        

Placez vos fichiers de site (par exemple, votre `index.php`) dans le dossier `/sites/augustin-roux.info/public_html`.

3. Configuration du VirtualHost Apache

Nous allons créer un fichier de configuration VirtualHost spécifique pour votre domaine afin qu'Apache sache où trouver les fichiers de votre site et comment le servir.


# Créez et éditez le fichier de configuration (remplacez par votre domaine)
sudo nano /etc/apache2/sites-available/augustin-roux.info.conf
        

Collez la configuration suivante, en adaptant `ServerName`, `ServerAlias`, `DocumentRoot`, et les chemins des logs et certificats SSL (ces derniers seront créés plus tard par Certbot) :

# VirtualHost pour HTTP (Port 80) - Redirection vers HTTPS
<VirtualHost *:80>
    ServerName augustin-roux.info
    ServerAlias www.augustin-roux.info

    # Activer le moteur de réécriture
    RewriteEngine On
    # Rediriger tout le trafic vers la version HTTPS du même hôte/URL
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

# VirtualHost pour HTTPS (Port 443)
<VirtualHost *:443>
    ServerName augustin-roux.info
    ServerAlias www.augustin-roux.info
    DocumentRoot /sites/augustin-roux.info/public_html

    # --- Configuration SSL (Sera gérée par Certbot) ---
    # Les lignes suivantes seront ajoutées/modifiées par Certbot
    SSLEngine on
    # SSLCertificateFile /etc/letsencrypt/live/augustin-roux.info/fullchain.pem
    # SSLCertificateKeyFile /etc/letsencrypt/live/augustin-roux.info/privkey.pem
    # Include /etc/letsencrypt/options-ssl-apache.conf # Fichier d'options SSL recommandé par Certbot

    # --- Logs ---
    ErrorLog ${APACHE_LOG_DIR}/augustin-roux.info-ssl-error.log
    CustomLog ${APACHE_LOG_DIR}/augustin-roux.info-ssl-access.log combined

    # --- Configuration du Répertoire ---
    <Directory /sites/augustin-roux.info/public_html>
        # AllowOverride None # Mettre 'All' pour activer les .htaccess si besoin
        Require all granted
        # Options -Indexes +FollowSymLinks # Désactiver le listage de répertoires
        Options +FollowSymLinks -Indexes
    </Directory>

    # --- En-têtes de Sécurité HTTP ---
    <IfModule mod_headers.c>
        # Empêche l'affichage dans une frame/iframe sur d'autres sites
        Header always set X-Frame-Options "SAMEORIGIN"
        # Active la protection XSS du navigateur
        Header always set X-XSS-Protection "1; mode=block"
        # Empêche le navigateur de "deviner" le type MIME
        Header always set X-Content-Type-Options "nosniff"
        # Contrôle la politique de Referrer
        Header always set Referrer-Policy "strict-origin-when-cross-origin"
        # Politique de permissions (désactive certaines API par défaut)
        # Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
        # Force l'utilisation de HTTPS pour une durée définie (HSTS)
        # À N'ACTIVER QU'UNE FOIS QUE HTTPS FONCTIONNE PARFAITEMENT !
        # Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    </IfModule>

    # --- Compression (mod_deflate) ---
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json application/xml
    </IfModule>

</VirtualHost>

Sauvegardez et fermez le fichier.

4. Activation des Modules Apache et du Site

Activez les modules Apache nécessaires (rewrite pour la redirection, headers pour la sécurité, deflate pour la compression, ssl pour HTTPS) et activez la configuration de votre site :


sudo a2enmod rewrite headers deflate ssl
sudo a2ensite augustin-roux.info.conf # Remplacez par le nom de votre fichier .conf
        

Vérifiez la syntaxe de votre configuration Apache :


sudo apachectl configtest
        

Si la syntaxe est OK, rechargez Apache pour appliquer les changements :


sudo systemctl reload apache2
        

À ce stade, accéder à `http://augustin-roux.info` devrait vous rediriger vers HTTPS, mais vous aurez une erreur de certificat car nous ne l'avons pas encore configuré.

5. Installation et Utilisation de Certbot (Let's Encrypt)

Certbot est l'outil recommandé pour obtenir et renouveler automatiquement les certificats SSL/TLS gratuits de Let's Encrypt.

Installez Certbot et son plugin Apache :


sudo apt install certbot python3-certbot-apache -y
        

Lancez Certbot pour obtenir le certificat et configurer automatiquement Apache. Il lira votre fichier de configuration VirtualHost.


# Assurez-vous que votre DNS pointe correctement vers le serveur AVANT de lancer cette commande
sudo certbot --apache -d augustin-roux.info -d www.augustin-roux.info
        

Suivez les instructions à l'écran (accepter les termes, entrer une adresse e-mail pour les notifications). Certbot modifiera votre fichier `.conf` pour ajouter les lignes `SSLCertificateFile`, `SSLCertificateKeyFile` et `Include` nécessaires.

Une fois terminé, Certbot rechargera Apache. Votre site devrait maintenant être accessible en HTTPS sans avertissement de sécurité.

6. Vérifier le Renouvellement Automatique

Certbot configure normalement une tâche (via systemd timer ou cron) pour renouveler automatiquement les certificats avant leur expiration. Vous pouvez tester si le renouvellement fonctionnerait :


sudo certbot renew --dry-run
        

Si le test réussit, vous n'avez rien d'autre à faire pour le renouvellement.

Conclusion

Vous disposez maintenant d'un serveur web Apache2 fonctionnel sur Debian 12, servant votre site PHP via un VirtualHost dédié et sécurisé par HTTPS grâce à Let's Encrypt. N'oubliez pas d'activer l'en-tête `Strict-Transport-Security` dans votre VirtualHost une fois que vous êtes sûr que tout fonctionne parfaitement.