Page 1 sur 1

[tuto][linux][novice] Serveur Web avec Nginx + MariaDB + PHP (LEMP)

Publié : 11 décembre 2023, 17:24
par N4T0R4
Ce guide vous montre comment installer la pile LEMP (Nginx, MariaDB et PHP8.2) sur Debian 12. Une pile logicielle est un ensemble d'outils logiciels regroupés. LEMP signifie Linux, Nginx (Engine-X), MariaDB/MySQL et PHP, qui sont tous open source et gratuits. Il s'agit de la pile logicielle la plus courante qui prend en charge les sites Web dynamiques et les applications Web. Linux est un système d'exploitation ; Nginx est un serveur Web ; MariaDB/MySQL est un serveur de base de données et PHP est un langage de script côté serveur responsable de la création de pages Web dynamiques. Dans ce guide, nous installons en tant que root, si vous avez un compte normal, utilisez la commande sudo.

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
2. Installer le serveur Web Nginx

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
Après l'avoir installé, nous pouvons permettre à Nginx de démarrer automatiquement au démarrage en exécutant la commande suivante.

Code : Tout sélectionner

systemctl enable nginx
Démarrez ensuite Nginx avec cette commande :

Code : Tout sélectionner

systemctl start nginx
Vérifiez maintenant son état.

Code : Tout sélectionner

systemctl status nginx
Entrez maintenant l'adresse IP publique de votre serveur Debian 12 dans la barre d'adresse de votre navigateur. Vous devriez voir une page Web "Bienvenue sur Nginx", ce qui signifie que le serveur Web Nginx fonctionne correctement. Si vous installez LEMP sur votre machine Debian 12 locale, entrez 127.0.0.1 ou localhost dans la barre d'adresse de votre navigateur.

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
Si vous utilisez un pare-feu UFW, exécutez cette commande pour ouvrir le port TCP 80.

Code : Tout sélectionner

ufw allow http
Nous devons maintenant faire de www-data (l'utilisateur Nginx) le propriétaire du répertoire Web. Par défaut, il appartient à l'utilisateur root.

Code : Tout sélectionner

chown www-data:www-data /usr/share/nginx/html -R
Configuration

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:

    Code : Tout sélectionner

    ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
    active le fichier de configuration example.com. Après le prochain démarrage ou rechargement, nginx chargera ce fichier.
Fichiers journaux

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.
Erreur au rechargement

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
3. Installer le serveur de base de données MariaDB

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
Après l'installation, le serveur MariaDB devrait démarrer automatiquement. Utilisez systemctl pour vérifier son statut.

Code : Tout sélectionner

systemctl status mariadb
S'il n'est pas en cours d'exécution, démarrez-le avec cette commande:

Code : Tout sélectionner

systemctl start mariadb
Pour permettre à MariaDB de démarrer automatiquement au démarrage, exécutez

Code : Tout sélectionner

systemctl enable mariadb
Exécutez maintenant le script de sécurité après l'installation.

Code : Tout sélectionner

mysql_secure_installation
Lorsque vous êtes invité à entrer le mot de passe root MariaDB, appuyez sur la touche Entrée car le mot de passe root n'a pas encore été défini. Tapez ensuite y pour définir le mot de passe root du serveur MariaDB.

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
pour sortir

Code : Tout sélectionner

exit;
4. Installer PHP8.2

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
Activez la lecture automatique au démarrage.

Code : Tout sélectionner

systemctl enable php8.2-fpm
Vérifier l'état:

Code : Tout sélectionner

systemctl status php8.2-fpm
5. Créer un bloc de serveur Nginx

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
Utilisez ensuite un éditeur de texte en ligne de commande tel que Nano pour créer un nouveau fichier de bloc de serveur dans le répertoire /etc/nginx/conf.d/. Collez le texte suivant dans le fichier. L'extrait suivant fera écouter Nginx sur le port IPv4 80 et le port IPv6 80 avec le nom univalent du serveur.

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;
  }
}
Enregistrez et fermez le fichier. (Pour enregistrer le fichier dans l'éditeur de texte Nano, appuyez sur Ctrl+O, puis appuyez sur Entrée pour confirmer. Pour quitter, appuyez sur Ctrl+X.)

Testez ensuite les configurations Nginx.

Code : Tout sélectionner

nginx -t
Si le test réussit, redémarrez Nginx.

Code : Tout sélectionner

systemctl reload nginx
6. Tester PHP

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
Enregistrez et fermez le fichier. Maintenant, dans la barre d'adresse du navigateur, entrez server-ip-address/info.php. Remplacez l'adresse IP du serveur par votre adresse IP réelle. Si vous suivez ce guide sur votre ordinateur local, entrez 127.0.0.1/info.php ou localhost/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
Au lieu de taper manuellement cette commande, nous pouvons faire redémarrer Nginx automatiquement en modifiant le module système nginx.service systemd. Pour remplacer la configuration par défaut du service systemd, nous créons un répertoire séparé.

Code : Tout sélectionner

mkdir -p /etc/systemd/system/nginx.service.d/
Créez ensuite un fichier dans ce répertoire.

Code : Tout sélectionner

nano /etc/systemd/system/nginx.service.d/restart.conf
Ajoutez les lignes suivantes au fichier, ce qui entraînera le redémarrage automatique de Nginx 5 secondes après la détection d'une panne. Le RetarSec par défaut est de 100 ms, ce qui est bien trop court. Nginx peut se plaindre que "la demande de démarrage réessaye trop rapidement" si RestartSec n'est pas assez grand.

Code : Tout sélectionner

[Service]

Restart=always
RestartSec=5s
Enregistrez et fermez le fichier. Ensuite, rechargez systemd pour que les modifications prennent effet.

Code : Tout sélectionner

systemctl daemon-reload
Pour tester si cela fonctionnera, tuez Nginx avec:

Code : Tout sélectionner

pkill nginx
Vérifiez ensuite l'état de Nginx. Vous constaterez que Nginx redémarre automatiquement.

Code : Tout sélectionner

systemctl status nginx
LEMP (Nginx, MariaDB et PHP8.2) installé avec succès sur Debian 12.