Guide Complet d'Installation LAMP (Apache, Nginx, Hybride) sur Ubuntu, Fedora et Arch

Guide indépendant

Table des Matières

Guide Complet d'Installation LAMP (Apache, Nginx, Hybride)

Introduction et présentation

L'acronyme LAMP désigne un ensemble de logiciels libres permettant de construire des serveurs web dynamiques. Traditionnellement, il signifie Linux (le système d'exploitation), Apache (le serveur web), MySQL/MariaDB (le système de gestion de base de données) et PHP (le langage de script). Cependant, l'évolution des technologies web a conduit à des variantes performantes remplaçant Apache par Nginx (LEMP), ou utilisant une architecture hybride tirant parti des deux serveurs web.

Ce guide exhaustif est destiné aux administrateurs système et aux développeurs souhaitant déployer ces architectures selon leurs besoins spécifiques. Que vous cherchiez la simplicité d'Apache, la performance brute de Nginx avec PHP-FPM, ou la flexibilité d'un proxy inverse Nginx devant Apache pour la gestion des vieux scripts .htaccess, ce document couvre toutes les étapes nécessaires.

Nous aborderons l'installation sur trois distributions majeures représentatives des différentes familles Linux : Ubuntu 24.04 / Debian 13 (basées sur Debian), Fedora 43 (basée sur RPM et à la pointe de l'innovation), et Arch Linux (rolling release). Les commandes fournies sont adaptées aux versions spécifiques mentionnées.

Prérequis et contexte

Avant de commencer l'installation de l'une des trois configurations, assurez-vous de disposer des éléments suivants :

  • Accès root ou sudo : Vous devez avoir les droits d'administration pour installer des paquets et modifier les configurations système.

  • Connexion Internet : Nécessaire pour télécharger les paquets depuis les dépôts officiels.

  • Machine mise à jour : Il est recommandé de faire une mise à jour du système avant toute installation.

  • Firewall de base : Comprendre comment ouvrir les ports 80 (HTTP) et 443 (HTTPS) via ufw, firewalld ou iptables.

Guide pour Ubuntu 24.04 / Debian 13

Configuration 1 : Apache2 + PHP + MariaDB

C'est la configuration classique, la plus simple à mettre en œuvre, idéale pour la compatibilité avec la majorité des CMS (WordPress, Joomla, etc.).

Commandes d'installation :

sudo apt update
sudo apt install apache2 mariadb-server php libapache2-mod-php php-mysql

Activation et démarrage des services :

sudo systemctl enable apache2 mariadb
sudo systemctl start apache2 mariadb

Sécurisation de la base de données :

sudo mysql_secure_installation

Configuration 2 : Nginx + PHP + MariaDB

Nginx gère les connexions simultanées différemment d'Apache (event-driven) et utilise PHP-FPM (FastCGI Process Manager) pour traiter le PHP, offrant souvent de meilleures performances pour les sites à fort trafic.

Commandes d'installation :

sudo apt update
sudo apt install nginx mariadb-server php-fpm php-mysql

Configuration de base de Nginx (Bloc Server) :

Éditez /etc/nginx/sites-available/default et assurez-vous que la section location ~ \.php$ ressemble à ceci :

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock; # Vérifiez la version de PHP
}

Redémarrage :

sudo systemctl restart nginx
sudo systemctl enable php8.3-fpm nginx mariadb

Configuration 3 : Nginx + Apache2 + PHP + MariaDB

Dans cette configuration, Nginx agit comme un Reverse Proxy frontal. Il gère les fichiers statiques (images, CSS, JS) et transmet les requêtes dynamiques PHP à Apache qui écoute sur un port différent (ex: 8080).

1. Installer Apache et PHP sur le port 8080 :

sudo apt install apache2 mariadb-server php libapache2-mod-php
# Modifier le port d'écoute d'Apache
sudo sed -i 's/Listen 80/Listen 8080/' /etc/apache2/ports.conf
sudo sed -i 's/VirtualHost \*:80/VirtualHost *:8080/' /etc/apache2/sites-available/000-default.conf
sudo systemctl restart apache2

2. Installer Nginx :

sudo apt install nginx

3. Configurer le Proxy Nginx :

Dans /etc/nginx/sites-available/default :

server {
    listen 80;
    server_name monsite.local;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
sudo systemctl restart nginx

Guide pour Fedora 43

Configuration 1 : Apache + PHP + MariaDB

Fedora utilise le gestionnaire de paquets dnf et SELinux est activé par défaut, ce qui peut nécessiter des ajustements de contexte de sécurité.

sudo dnf install httpd mariadb-server php php-mysqlnd
sudo systemctl enable --now httpd mariadb
sudo mysql_secure_installation
# Ajuster SELinux pour autoriser les connexions web réseau si nécessaire
sudo setsebool -P httpd_can_network_connect_db 1

Configuration 2 : Nginx + PHP + MariaDB

L'installation sous Fedora est similaire à Debian, mais les chemins de fichiers de configuration peuvent varier légèrement.

sudo dnf install nginx mariadb-server php-fpm php-mysqlnd
sudo systemctl enable --now nginx mariadb php-fpm

Configurez /etc/nginx/nginx.conf ou un fichier dans /etc/nginx/conf.d/ pour pointer vers le socket PHP-FPM via fastcgi_pass unix:/run/php-fpm/www.sock;.

Configuration 3 : Nginx + Apache + PHP + MariaDB

# Installer la pile Apache
sudo dnf install httpd mariadb-server php
sudo sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf
sudo systemctl enable --now httpd

# Installer Nginx
sudo dnf install nginx
sudo systemctl enable --now nginx

Configurez Nginx en proxy vers http://127.0.0.1:8080 comme indiqué dans la section Ubuntu. Assurez-vous que le pare-feu (firewalld) autorise le trafic.

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

Guide pour Arch Linux

Configuration 1 : Apache + PHP + MariaDB

Arch Linux demande une configuration plus manuelle. Les modules doivent être décommentés dans les fichiers de configuration.

sudo pacman -S apache php php-apache mariadb

Configuration PHP : Dans /etc/httpd/conf/httpd.conf, commentez LoadModule mpm_event_module... et décommentez LoadModule mpm_prefork_module.... Ensuite, ajoutez à la fin du fichier :

LoadModule php_module modules/libphp.so
AddHandler application/x-httpd-php .php

Démarrage :

sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl enable --now httpd mariadb

Configuration 2 : Nginx + PHP + MariaDB

sudo pacman -S nginx php-fpm mariadb
sudo systemctl enable --now nginx php-fpm mariadb

Éditez /etc/nginx/nginx.conf. Dans le bloc server, décommentez la section location ~ \.php$ et assurez-vous que fastcgi_pass unix:/run/php-fpm/php-fpm.sock; est correct.

Configuration 3 : Nginx + Apache + PHP + MariaDB

Installez Apache et PHP comme dans la config 1, mais changez le port dans /etc/httpd/conf/httpd.conf (Listen 8080). Installez Nginx normalement.

sudo pacman -S nginx
# Configurer le proxy dans /etc/nginx/nginx.conf vers 127.0.0.1:8080
sudo systemctl enable --now nginx httpd

Configuration et personnalisation

Une fois l'installation terminée, la personnalisation est clé pour la sécurité et les performances.

  • PHP (php.ini) : Situé généralement dans /etc/php/X.X/fpm/php.ini ou /etc/php.ini. Modifiez memory_limit, upload_max_filesize et post_max_size selon vos besoins.

  • MariaDB : Éditez /etc/mysql/mariadb.conf.d/50-server.cnf pour binder l'adresse IP si vous accédez à la DB depuis l'extérieur, ou optimiser le cache (innodb_buffer_pool_size).

  • Virtual Hosts : Pour Apache, créez des fichiers dans sites-available et activez-les avec a2ensite. Pour Nginx, ajoutez des fichiers .conf dans sites-enabled ou conf.d.

Trucs et astuces

  • OPcache : Assurez-vous que l'OPcache PHP est activé pour un gain de performance massif en production.

  • Let's Encrypt : Utilisez Certbot pour obtenir des certificats SSL gratuits automatiquement pour Apache ou Nginx.

  • Hybride : L'avantage du mode hybride est de laisser Nginx servir les fichiers statiques (ce qu'il fait extrêmement vite) et utiliser Apache uniquement pour le PHP complexe ou l'utilisation des fichiers .htaccess.

  • Arch Linux : Sur Arch, faites toujours attention aux mises à jour de paquets (pacman -Syu) qui peuvent modifier les fichiers de configuration .pacnew.

Problèmes courants et solutions (FAQ)

Erreur 403 Forbidden sur Nginx ?

Vérifiez les permissions du dossier racine (généralement /usr/share/nginx/html ou /var/www/html). L'utilisateur www-data ou nginx doit avoir les droits de lecture.

PHP s'affiche comme du texte (code source) ?

Le handler PHP n'est pas correctement configuré. Vérifiez que le module PHP est chargé dans Apache ou que le bloc location ~ \.php$ est inclus et correct dans Nginx.

Connexion refusée à la base de données ?

Vérifiez que MariaDB est démarré. Sur Fedora/SELinux, assurez-vous que le booléen httpd_can_network_connect_db est à on.

Conflit de ports (Address already in use) ?

En mode hybride, assurez-vous qu'Apache et Nginx n'écoutent pas tous les deux sur le port 80. Apache doit être sur 8080 (ou autre) et Nginx sur 80.

Ressources et liens utiles