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-mysqlActivation et démarrage des services :
sudo systemctl enable apache2 mariadb
sudo systemctl start apache2 mariadbSécurisation de la base de données :
sudo mysql_secure_installationConfiguration 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-mysqlConfiguration 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 mariadbConfiguration 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 apache22. Installer Nginx :
sudo apt install nginx3. 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 nginxGuide 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 1Configuration 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 nginxConfigurez 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 --reloadGuide 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 mariadbConfiguration 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 httpdConfiguration 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.iniou/etc/php.ini. Modifiezmemory_limit,upload_max_filesizeetpost_max_sizeselon vos besoins.MariaDB : Éditez
/etc/mysql/mariadb.conf.d/50-server.cnfpour 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-availableet activez-les aveca2ensite. Pour Nginx, ajoutez des fichiers.confdanssites-enabledouconf.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.
