[tuto][linux][novice] Serveur Web avec Nginx + MariaDB + PHP (LEMP)
1. Mettre à jour les packages
Avant d'installer la pile LEMP, il est recommandé de mettre à jour le référentiel et les packages logiciels. Exécutez la commande suivante :
Code : Tout sélectionner
apt update && apt upgrade -y
Nginx est un serveur Web haute performance très populaire de nos jours. Il peut également être utilisé comme proxy inverse et serveur de mise en cache. Entrez la commande suivante pour installer le serveur Web Nginx.
Code : Tout sélectionner
apt install nginx
Code : Tout sélectionner
systemctl enable nginx
Code : Tout sélectionner
systemctl start nginx
Code : Tout sélectionner
systemctl status nginx
Si la connexion est refusée ou ne peut pas être établie, le pare-feu bloque peut-être les requêtes entrantes sur le port TCP 80. Si vous utilisez le pare-feu iptables, vous devez exécuter la commande suivante pour ouvrir le port TCP 80.
Code : Tout sélectionner
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
Code : Tout sélectionner
ufw allow http
Code : Tout sélectionner
chown www-data:www-data /usr/share/nginx/html -R
Vous devez savoir où nginx stocke sa configuration.
- /etc/nginx est le répertoire de configuration de nginx. Tous les fichiers de configuration y sont placés. Ce répertoire est utilisé pour les chemins relatifs dans la directive include.
- /etc/nginx/nginx.conf est le fichier de configuration principal de nginx. nginx commence à lire sa configuration ici.
- /etc/nginx/sites-enabled est le répertoire dans lequel vous pouvez placer les fichiers de configuration de votre serveur HTTP(S). Une fois nginx démarré ou rechargé, tous les fichiers à partir de là seront chargés par nginx. Cela fonctionne car le fichier principal /etc/nginx/nginx.conf contient la directive include sites-enabled/*;. Les fichiers sont chargés par ordre alphabétique.
- /etc/nginx/sites-available est le répertoire dans lequel vous pouvez placer vos fichiers de configuration de serveur HTTP(S), mais ils ne seront pas chargés par nginx. Un fichier de configuration dans ce répertoire peut être activé en créant un lien symbolique dans le répertoire /etc/nginx/sites-enabled. Par exemple:
active le fichier de configuration example.com. Après le prochain démarrage ou rechargement, nginx chargera ce fichier.Code : Tout sélectionner
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Les fichiers journaux (ou fichiers logs) sont utiles lorsque vous devez dépanner quelque chose. Il existe deux fichiers journaux par défaut :
- /var/log/nginx/access.log est le fichier dans lequel nginx enregistre toutes les requêtes. Le format de ce fichier journal est appelé combiné et est expliqué ici.
- /var/log/nginx/error.log est le fichier dans lequel nginx enregistre toutes les conditions d'erreur et les informations d'état.
Si vous essayez de recharger votre configuration avec la commande sudo systemctl reload nginx et que nginx se plaint que vous avez fait une erreur, vous pouvez voir l'erreur précise en exécutant :
Code : Tout sélectionner
nginx -t
MariaDB remplace MySQL. Il est développé par d'anciens membres de l'équipe MySQL qui craignent qu'Oracle ne transforme MySQL en un produit à source fermée. Entrez la commande suivante pour installer MariaDB sur Debian 12.
Code : Tout sélectionner
apt install mariadb-server mariadb-client
Code : Tout sélectionner
systemctl status mariadb
Code : Tout sélectionner
systemctl start mariadb
Code : Tout sélectionner
systemctl enable mariadb
Code : Tout sélectionner
mysql_secure_installation
Vous pouvez ensuite appuyer sur Entrée pour répondre aux questions restantes, ce qui supprimera l'utilisateur anonyme, désactivera la connexion root à distance et supprimera la base de données de test. Cette étape est la principale exigence pour sécuriser la base de données MariaDB. (Notez que Y est en majuscule, ce qui signifie qu'il s'agit de la réponse par défaut.)
Par défaut, le package MaraiDB de Debian utilise unix_socket pour l'authentification de l'utilisateur, ce qui signifie essentiellement que vous pouvez utiliser le nom d'utilisateur et le mot de passe du système d'exploitation pour vous connecter à la console MariaDB. Vous pouvez donc exécuter la commande suivante pour vous connecter sans fournir le mot de passe root MariaDB.
Code : Tout sélectionner
mariadb -u root
Code : Tout sélectionner
exit;
PHP8.2 inclus dans le référentiel Debian 12 et présente une amélioration mineure des performances par rapport à PHP7.x. Entrez la commande suivante pour installer PHP8.2 et certaines extensions courantes.
apt install php php-fpm php-mysql php-common php-cli php-common php-json php-opcache php-readline php-mbstring php-xml php-gd php-curl
Les extensions PHP sont généralement requises pour les systèmes de gestion de contenu (CMS) tels que WordPress. Par exemple, si php8.2-xml est absent de votre installation, certaines pages de votre site WordPress peuvent être vides et vous pouvez trouver une erreur dans le journal des erreurs Nginx, telle que:
Message PHP : Erreur fatale PHP : Erreur non gérée : Appel de fonction non défini xml_parser_create()
L'installation de ces extensions PHP garantira le bon fonctionnement de votre CMS. Lancez maintenant php8.2-fpm.
Code : Tout sélectionner
systemctl start php8.2-fpm
Code : Tout sélectionner
systemctl enable php8.2-fpm
Code : Tout sélectionner
systemctl status php8.2-fpm
Le bloc serveur Nginx est similaire à l'hôte virtuel dans Apache. Nous n'utiliserons pas le bloc de serveur par défaut car il n'est pas adapté à l'exécution de code PHP et si nous le modifions, cela deviendra un gâchis. Par conséquent, supprimez le lien symbolique par défaut dans le répertoire activé pour le site en exécutant la commande suivante. (Il est toujours disponible en tant que /etc/nginx/sites-available/default.)
Code : Tout sélectionner
rm /etc/nginx/sites-enabled/default
Code : Tout sélectionner
nano /etc/nginx/conf.d/default.conf
Code : Tout sélectionner
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html/;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}
# A long browser cache lifetime can speed up repeat visits to your page
location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}
# disable access to hidden files
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
}
Testez ensuite les configurations Nginx.
Code : Tout sélectionner
nginx -t
Code : Tout sélectionner
systemctl reload nginx
Pour tester PHP-FPM avec le serveur Web Nginx, nous devons créer un fichier info.php dans le répertoire webroot.
Code : Tout sélectionner
nano /usr/share/nginx/html/info.php
Vous verrez les informations PHP de votre serveur. Cela signifie que les scripts PHP peuvent fonctionner correctement avec le serveur Web Nginx.
7. Redémarrage automatique de Nginx
Si, pour une raison quelconque, votre processus Nginx est arrêté, vous devez exécuter la commande suivante pour le redémarrer.
Code : Tout sélectionner
systemctl restart nginx
Code : Tout sélectionner
mkdir -p /etc/systemd/system/nginx.service.d/
Code : Tout sélectionner
nano /etc/systemd/system/nginx.service.d/restart.conf
Code : Tout sélectionner
[Service]
Restart=always
RestartSec=5s
Code : Tout sélectionner
systemctl daemon-reload
Code : Tout sélectionner
pkill nginx
Code : Tout sélectionner
systemctl status nginx