Tutorial

Comment installer la pile Linux, Apache, MariaDB, PHP (LAMP) sur CentOS 8

ApachePHPLAMP StackMariaDB

Introduction

Une pile “LAMP” est un groupe de logiciels open-source qui est généralement installé ensemble pour permettre à un serveur d'accueillir des sites web dynamiques et des applications web écrits en PHP. Ce terme est en fait un sigle qui représente le système d'exploitation Linux, avec le serveur web Apache. Les données backend sont stockées dans une base de données MariaDB et le traitement dynamique est géré par PHP.

La couche de base de données d'une pile LAMP est généralement un serveur de base de données MySQL, mais avant la sortie de CentOS 8, MySQL n'était pas disponible à partir des référentiels CentOS par défaut. Pour cette raison, MariaDB, un fork communautaire de MySQL, est devenu une alternative largement acceptée à MySQL comme système de base de données par défaut pour les piles LAMP sur machines CentOS. MariaDB fonctionne en remplacement du serveur MySQL d'origine, ce qui signifie en pratique que vous pouvez passer à MariaDB sans avoir à modifier la configuration ou le code de votre application.

Dans ce guide, vous allez installer une pile LAMP sur un serveur CentOS 8, en utilisant MariaDB comme système de gestion de base de données.

Conditions préalables

Pour suivre ce guide, vous devrez avoir accès à un serveur CentOS 8 en tant qu'utilisateur non root avec des privilèges sudo, et un pare-feu actif installé sur votre serveur. Pour le mettre en place, vous pouvez suivre notre Guide de configuration initiale du serveur pour CentOS 8.

Étape 1 - Installation du serveur web Apache

Afin d'afficher des pages web aux visiteurs de notre site, nous allons utiliser Apache, un serveur web open source très populaire qui peut être configuré pour servir des pages PHP. Nous utiliserons le gestionnaire de packages ​​​​dnf​ (qui est le nouveau gestionnaire de packages par défaut sur CentOS 8) pour installer ce logiciel.

Installez le package httpd avec :

  • sudo dnf install httpd

Lorsque vous y êtes invité, entrez y pour confirmer que vous voulez installer Apache.

Une fois l'installation terminée, exécutez la commande suivante pour activer et démarrer le serveur :

  • sudo systemctl start httpd

Si vous avez activé le pare-feu firewalld conformément à notre guide de configuration initiale du serveur, vous devrez autoriser les connexions à Apache. La commande suivante permettra d'activer en permanence les connexions HTTP, qui fonctionnent par défaut sur le port 80 :

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

Pour vérifier que le changement a été appliqué, vous pouvez exécuter :

  • sudo firewall-cmd --permanent --list-all

Vous verrez une sortie de ce type :

Output
public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Vous devrez recharger la configuration du pare-feu pour que les changements prennent effet :

  • sudo firewall-cmd --reload

Avec l'ajout de la nouvelle règle de pare-feu, vous pouvez vérifier si le serveur est opérationnel en accédant à l'adresse IP publique ou au nom de domaine de votre serveur depuis votre navigateur web.

Remarque : si vous utilisez DigitalOcean comme fournisseur d'hébergement DNS, vous pouvez consulter la documentation de nos produits pour obtenir des instructions détaillées sur la façon de configurer un nouveau nom de domaine et de le faire pointer vers votre serveur.

Si vous n'avez pas de nom de domaine pointé vers votre serveur et que vous ne connaissez pas l'adresse IP publique de votre serveur, vous pouvez la trouver en exécutant la commande suivante :

  • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Cela imprimera quelques adresses IP. Vous pouvez essayer chacune d'entre elles à tour de rôle dans votre navigateur web.

Vous pouvez également vérifier quelle est l'adresse IP accessible, telle qu'elle est vue depuis d'autres endroits sur Internet :

  • curl -4 icanhazip.com

Saisissez l'adresse que vous recevez dans votre navigateur web : elle vous conduira à la page d'accueil par défaut d'Apache :

Page Apache par défaut CentOS 8

Si vous voyez cette page, c'est que votre serveur web est maintenant correctement installé.

Étape 2 - Installation de MariaDB

Maintenant que vous avez un serveur web opérationnel, vous devez installer un système de base de données pour pouvoir stocker et gérer les données de votre site. Nous allons installer MariaDB, un fork communautaire du serveur MySQL original d'Oracle.

Pour installer ce logiciel, exécutez :

  • sudo dnf install mariadb-server

Lorsque l'installation est terminée, vous pouvez activer et démarrer le serveur MariaDB avec :

  • sudo systemctl start mariadb

Pour améliorer la sécurité de votre serveur de base de données, il est recommandé d'exécuter un script de sécurité, qui est pré-installé avec MariaDB. Ce script supprimera certains paramètres par défaut peu sûrs et verrouillera l'accès à votre système de base de données. Lancez le script interactif en exécutant :

  • sudo mysql_secure_installation

Ce script vous guidera à travers une série d'invites où vous pourrez modifier la configuration de votre système MariaDB. La première invite vous demandera de saisir le mot de passe actuel de l'utilisateur root de la base de données. Il ne faut pas le confondre avec l'utilisateur root du système. L'utilisateur root de la base de données est un utilisateur administratif disposant de tous les privilèges sur le système de base de données. Comme vous venez d'installer MariaDB et que vous n'avez pas encore apporté de modifications à la configuration, ce mot de passe sera vide, il suffit donc d'appuyer sur ENTER (ENTRÉE) à l'invite.

L'invite suivante vous demande si vous souhaitez créer un mot de passe pour l'utilisateur root de la base de données. Comme MariaDB utilise une méthode d'authentification spéciale pour l'utilisateur root, qui est généralement plus sûre que l'utilisation d'un mot de passe, vous n'avez pas besoin de le définir maintenant. Tapez N et appuyez ensuite sur ENTER (ENTRÉE).

À partir de là, vous pouvez appuyer sur Y puis sur ENTER (ENTRÉE) afin d'accepter les valeurs par défaut pour toutes les questions suivantes. Cela supprimera les utilisateurs anonymes et la base de données de test, désactivera la connexion root à distance, et chargera ces nouvelles règles afin que le serveur respecte immédiatement les modifications que vous avez apportées.

Lorsque vous avez terminé, connectez-vous à la console MariaDB en saisissant :

  • sudo mysql

Cette action entraînera la connexion au serveur MariaDB en tant qu'utilisateur root de la base de données administrative, ce qui est déduit par l'utilisation de sudo lors de l'exécution de cette commande. Vous devriez voir une sortie comme celle-ci :

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

Notez que vous n'avez pas eu besoin de fournir un mot de passe pour vous connecter en tant qu'utilisateur root. Cela fonctionne car la méthode d'authentification par défaut pour l'utilisateur administratif de MariaDB est unix_socket au lieu de password. Même si cela peut sembler être un problème de sécurité au premier abord, cela rend le serveur de base de données plus sûr, car les seuls utilisateurs autorisés à se connecter en tant qu'utilisateur root de MariaDB sont les utilisateurs du système avec des privilèges sudo se connectant depuis la console ou par le biais d'une application fonctionnant avec les mêmes privilèges. Concrètement, cela signifie que vous ne pourrez pas utiliser l'utilisateur root de la base de données administrative pour vous connecter à partir de votre application PHP.

Pour une sécurité accrue, il est préférable de créer des comptes d'utilisateurs dédiés avec des privilèges moins étendus pour chaque base de données, surtout si vous prévoyez d'héberger plusieurs bases de données sur votre serveur. Pour illustrer une telle configuration, nous allons créer une base de données nommée example_database et un utilisateur nommé example_user, mais vous pouvez remplacer ces noms par des valeurs différentes.

Pour créer une nouvelle base de données, exécutez la commande suivante depuis votre console MariaDB :

  • CREATE DATABASE example_database;

Vous pouvez maintenant créer un utilisateur et lui accorder tous les privilèges sur la base de données personnalisée que vous venez de créer. La commande suivante définit le mot de passe de cet utilisateur comme password, mais vous devez remplacer cette valeur par un mot de passe sécurisé de votre choix :

  • GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Cela donnera à l'utilisateur example_user tous les privilèges sur la base de données example\_database, tout en empêchant cet utilisateur de créer ou de modifier d'autres bases de données sur votre serveur.

Purgez les privilèges pour vous assurer qu'ils sont enregistrés et disponibles dans la session en cours :

  • FLUSH PRIVILEGES;

Ensuite, quittez le shell MariaDB :

  • exit

Vous pouvez tester si le nouvel utilisateur a les bonnes permissions en vous connectant à nouveau à la console MariaDB, en utilisant cette fois les identifiants personnalisés :

  • mysql -u example_user -p

Notez la présence d'un indicateur -p dans cette commande, qui vous demandera le mot de passe que vous avez choisi lors de la création de l'utilisateur example_user. Après vous être connecté à la console MariaDB, confirmez que vous avez accès à la base de données example\_database :

  • SHOW DATABASES;

Cela donnera la sortie suivante :

Output
+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

Pour quitter le shell MariaDB, saisissez :

  • exit

À ce stade, votre système de base de données est en place et vous pouvez passer à l'installation de PHP, le dernier composant de la pile LAMP.

Étape 3- Installation de PHP

Apache est installé pour servir votre contenu et MariaDB est installé pour stocker et gérer vos données. PHP est le composant de notre installation qui traitera le code pour afficher du contenu dynamique à l'utilisateur final. En plus du package php, vous aurez besoin de php-mysqlnd, un module PHP qui permet à PHP de communiquer avec les bases de données utilisant MySQL. Les packages PHP de base seront automatiquement installés en tant que dépendances.

Pour installer les packages php et php-mysqlnd en utilisant le gestionnaire de paquets dnf, exécutez :

sudo dnf install php php-mysqlnd

Une fois l'installation terminée, vous devrez redémarrer le serveur web Apache afin d'activer le module PHP :

sudo systemctl restart httpd

Votre serveur web est maintenant entièrement configuré. Au cours de la prochaine étape, nous créerons un script de test PHP pour nous assurer que tout fonctionne comme prévu.

Étape 4 - Test de PHP avec Apache

L'installation Apache par défaut sur CentOS 8 créera un document root situé dans /var/www/html. Vous n'avez pas besoin de modifier les paramètres par défaut d'Apache pour que PHP fonctionne correctement sur votre serveur web.

Le seul ajustement que nous ferons consistera à modifier les paramètres de permission par défaut du dossier root de votre document Apache. Ainsi, vous pourrez créer et modifier des fichiers dans ce répertoire avec votre utilisateur système habituel, sans avoir besoin de préfixer chaque commande par sudo.

La commande suivante va changer la propriété de la racine du document Apache par défaut au profit d'un utilisateur et d'un groupe appelés sammy. Veillez donc à remplacer le nom d'utilisateur et le groupe mis en évidence dans cette commande pour refléter le nom d'utilisateur et le groupe de votre système.

  • sudo chown -R sammy.sammy /var/www/html/

Nous allons maintenant créer une page PHP de test pour nous assurer que le serveur web fonctionne comme prévu.

L'éditeur de texte par défaut fourni avec CentOS 8 est vi. vi, un éditeur de texte extrêmement puissant, mais il peut être difficile à utiliser pour les utilisateurs qui manquent d'expérience. Vous pouvez installer un éditeur plus adapté, tel que nano, pour faciliter l'édition des fichiers de configuration sur votre serveur CentOS 8 :

  • sudo dnf install nano

Tapez y lorsque vous êtes invité à confirmer l'installation.

Créez un nouveau fichier PHP appelé info.php dans le répertoire /var/www/html :

  • nano /var/www/html/info.php

Le code PHP suivant affichera des informations sur l'environnement PHP en cours d'exécution sur le serveur :

/var/www/html/info.php
<?php

phpinfo();

Lorsque vous avez terminé, enregistrez et fermez le fichier. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL+X, puis Y et ENTER pour confirmer.

Nous pouvons maintenant tester si notre serveur web peut afficher correctement le contenu généré par un script PHP. Allez dans votre navigateur et accédez au nom d'hôte ou à l'adresse IP de votre serveur, suivi de /info.php :

http://server_host_or_IP/info.php

Vous verrez une page similaire à celle-ci :

Page d'infos Apache PHP par défaut CentOS 8

Après avoir vérifié les informations pertinentes sur votre serveur PHP par le biais de cette page, il est préférable de supprimer le fichier que vous avez créé, car il contient des informations sensibles sur votre environnement PHP et votre serveur CentOS. Vous pouvez utiliser rm pour supprimer ce fichier :

  • rm /var/www/html/info.php

Vous pourrez toujours générer de nouveau ce fichier si vous en avez besoin plus tard. Ensuite, nous allons tester la connexion à la base de données depuis PHP.

Étape 5 - Test de la connexion à la base de données à partir de PHP (facultatif)

Pour tester si PHP est capable de se connecter à MariaDB et d'exécuter des requêtes de base de données, vous pouvez créer un tableau de test avec des données factices et interroger son contenu à partir d'un script PHP.

Tout d'abord, connectez-vous à la console MariaDB avec l'utilisateur de la base de données que vous avez créé à l'étape 2 de ce guide :

  • mysql -u example_user -p

Créez un tableau nommé todo_list. Depuis la console MariaDB, exécutez l'instruction suivante :

CREATE TABLE example_database.todo_list (
    item_id INT AUTO_INCREMENT,
    content VARCHAR(255),
    PRIMARY KEY(item_id)
);

Maintenant, insérez quelques lignes de contenu dans le tableau de test. Vous pouvez répéter la commande suivante plusieurs fois, en utilisant des valeurs différentes :

  • INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Pour confirmer que les données ont bien été enregistrées dans votre tableau, exécutez :

  • SELECT * FROM example_database.todo_list;

Vous verrez la sortie suivante :

Output
+---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

Après avoir confirmé que vous avez des données valides dans votre tableau de test, vous pouvez quitter la console MariaDB :

  • exit

Vous pouvez maintenant créer le script PHP qui se connectera à MariaDB et interrogera votre contenu. Créez un nouveau fichier PHP dans votre répertoire root personnalisé en utilisant votre éditeur préféré. Nous utiliserons nano pour cela :

  • nano /var/www/html/todo_list.php

Ajoutez le contenu suivant à votre script PHP :

/usr/share/nginx/html/todo_list.php
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>";
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Enregistrez et fermez le fichier lorsque vous avez fini de le modifier.

Vous pouvez maintenant accéder à cette page dans votre navigateur web en consultant le nom d'hôte ou l'adresse IP publique de votre serveur, suivi de /todo_list.php :

http://server_host_or_IP/todo_list.php

Vous devriez voir une page comme celle-ci, montrant le contenu que vous avez inséré dans votre tableau de test :

Exemple todo list PHP

Cela signifie que votre environnement PHP est prêt à se connecter et à interagir avec votre serveur MariaDB.

Conclusion

Dans ce guide, vous avez construit une base flexible pour servir des sites web et des applications PHP à vos visiteurs, en utilisant Apache comme serveur web. Vous avez configuré Apache pour traiter les requêtes PHP, et vous avez également mis en place une base de données MariaDB pour stocker les données de votre site web.

0 Comments

Creative Commons License