Comment installer la pile Linux, Apache, MariaDB, PHP (LAMP) sur Debian 11

De Get Docs
Aller à :navigation, rechercher

Introduction

Une pile "LAMP" est un groupe de logiciels open source qui sont généralement installés ensemble pour permettre à un serveur d'héberger des sites Web dynamiques et des applications Web. Ce terme est un acronyme qui représente le système d'exploitation Linux, avec le serveur web Apache. Les données du site sont stockées dans une base de données MariaDB, et le contenu dynamique est traité par PHP.

Bien que cette pile logicielle inclue généralement MySQL comme système de gestion de base de données, certaines distributions Linux, y compris Debian, utilisent MariaDB en remplacement de MySQL.

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

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin d'un serveur Debian 11 avec une racine autre que ' sudo-compte utilisateur activé et un pare-feu de base. Cela peut être configuré à l'aide de notre guide de configuration initiale du serveur pour Debian 11.

Étape 1 - Installation de Apache et mise à jour du pare-feu

Le serveur Web Apache est l'un des serveurs Web les plus populaires au monde. Il est bien documenté, possède une communauté active d'utilisateurs et a été largement utilisé pendant une grande partie de l'histoire du Web, ce qui en fait un excellent choix pour l'hébergement d'un site Web.

Commencez par mettre à jour le cache du gestionnaire de packages. Si c'est la première fois que vous utilisez sudo au cours de cette session, vous serez invité à fournir votre mot de passe d'utilisateur pour confirmer que vous disposez des privilèges appropriés pour gérer les packages système avec apt:

sudo apt update

Ensuite, installez Apache avec ce qui suit :

sudo apt install apache2

Cette commande vous demandera de confirmer l'installation de Apache. Confirmez par écrit Y, alors ENTER. Une fois l'installation terminée, vous devez ajuster les paramètres de votre pare-feu. En supposant que vous avez suivi les instructions de configuration initiales du serveur pour installer et activer le pare-feu UFW , assurez-vous que votre pare-feu autorise le trafic HTTP et HTTPS.

Sur Debian 11, UFW est fourni avec des profils d'application que vous pouvez utiliser pour ajuster les paramètres de votre pare-feu. Affichez la liste complète des profils d'application en exécutant :

sudo ufw app list

La WWW les profils répertoriés sont utilisés pour gérer les ports utilisés par les serveurs Web :

OutputAvailable applications:
. . .
  WWW
  WWW Cache
  WWW Full
  WWW Secure
. . .

Si vous inspectez le WWW Full profil avec ufw app info, votre sortie indiquera qu'elle active le trafic vers les ports 80 et 443:

sudo ufw app info "WWW Full"
OutputProfile: WWW Full
Title: Web Server (HTTP,HTTPS)
Description: Web Server (HTTP,HTTPS)

Ports:
  80,443/tcp

Ensuite, autorisez le trafic HTTP et HTTPS entrant pour ce profil :

sudo ufw allow in "WWW Full"

Vous pouvez vérifier que tout s'est déroulé comme prévu en consultant l'adresse IP publique de votre serveur dans votre navigateur Web :

http://your_server_ip

Cela renverra la page Web par défaut de Debian 11 Apache, qui est là à des fins d'information et de test :

Si votre navigateur renvoie cette page, votre serveur Web est maintenant correctement installé et accessible via votre pare-feu.

Comment trouver l'adresse IP publique de votre serveur

Si vous ne connaissez pas l'adresse IP publique de votre serveur, vous pouvez la trouver de plusieurs façons. Il s'agit généralement de l'adresse que vous utilisez pour vous connecter à votre serveur via SSH.

Il existe plusieurs façons de procéder à partir de la ligne de commande. Tout d'abord, vous pouvez utiliser le iproute2 outils pour obtenir votre adresse IP en exécutant ::

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

Cela renverra deux ou trois lignes en arrière. Ce sont toutes des adresses correctes, mais votre ordinateur ne peut en utiliser qu'une seule, alors n'hésitez pas à essayer chacune d'entre elles.

Une autre méthode consiste à utiliser le curl utilitaire pour contacter un tiers pour vous dire comment il voit votre serveur. Vous pouvez exécuter la commande suivante et demander à un serveur spécifique quelle est votre adresse IP :

curl http://icanhazip.com

Quelle que soit la méthode que vous préférez, écrivez votre adresse IP dans le navigateur Web pour vérifier que votre serveur exécute la page Apache par défaut.

Étape 2 - Installation de MariaDB

Maintenant que vous avez un serveur Web opérationnel, vous devez installer le système de base de données pour pouvoir stocker et gérer les données de votre site.

Dans Debian 11, le métapaquet mysql-server, qui était traditionnellement utilisé pour installer le serveur MySQL, a été remplacé par default-mysql-server. Ce métapaquet fait référence à MariaDB, un fork communautaire du serveur MySQL d'origine d'Oracle, et il s'agit actuellement du serveur de base de données compatible MySQL par défaut disponible sur les dépôts de gestionnaires de paquets basés sur Debian.

Pour une compatibilité à plus long terme, cependant, il est recommandé qu'au lieu d'utiliser le métapaquet, vous installiez MariaDB en utilisant le paquet réel du programme, mariadb-server.

Pour installer le logiciel MariaDB, exécutez :

sudo apt install mariadb-server

Une fois l'installation terminée, il est recommandé d'exécuter un script de sécurité préinstallé avec MariaDB. Ce script supprimera certains paramètres par défaut non sécurisés et verrouillera l'accès à votre système de base de données. Démarrez le script interactif en exécutant :

sudo mysql_secure_installation

Ce script vous guidera à travers une série d'invites où vous pourrez apporter des modifications à votre configuration MariaDB. La première invite vous demandera d'entrer le mot de passe actuel de la racine de la base de données '. Cela ne doit pas être confondu avec la racine système'. L'utilisateur base de données racine est un utilisateur administratif disposant de tous les privilèges sur le système de base de données. Étant donné que vous venez d'installer MariaDB et que vous n'avez pas encore apporté de modifications à la configuration, ce mot de passe sera vide, alors appuyez sur ENTER à l'invite.

L'invite suivante vous demande si vous souhaitez configurer un mot de passe racine de la base de données '. Étant donné que 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 la définir maintenant. Presse N et alors ENTER.

De là, vous pouvez appuyer sur Y et alors ENTER 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 à distance root et chargera ces nouvelles règles afin que MariaDB respecte immédiatement les modifications que vous avez apportées.

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

sudo mariadb

Cela se connectera au serveur MariaDB en tant qu'utilisateur de la base de données administrative root, ce qui est déduit par l'utilisation de sudo lors de l'exécution de cette commande. Vous devriez recevoir une sortie comme celle-ci :

OutputWelcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 41
Server version: 10.5.15-MariaDB-0+deb11u1 Debian 11

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. C'est parce que la méthode d'authentification par défaut pour l'utilisateur administratif MariaDB est unix_socket à la place 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écurisé car les seuls utilisateurs autorisés à se connecter en tant qu'utilisateur root MariaDB sont les utilisateurs système avec sudo privilèges se connectant à partir de la console ou via une application exécutée avec les mêmes privilèges. Concrètement, cela signifie que vous ne pourrez pas utiliser l'utilisateur de la base de données administrative root pour vous connecter depuis votre application PHP.

Pour une sécurité accrue, il est préférable d'avoir des comptes d'utilisateurs dédiés avec des privilèges moins étendus configurés pour chaque base de données, surtout si vous prévoyez d'avoir plusieurs bases de données hébergées sur votre serveur.

Vous pouvez quitter la console MariaDB avec ce qui suit :

exit

Votre serveur MariaDB est maintenant installé et sécurisé. Ensuite, vous installerez 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 votre configuration qui traitera le code pour afficher le contenu dynamique à l'utilisateur final. Il peut exécuter des scripts, se connecter à vos bases de données MariaDB pour obtenir des informations et transmettre le contenu traité à votre serveur Web pour l'afficher.

En plus de php paquet, vous aurez besoin php-mysql, un module PHP qui permet à PHP de communiquer avec une base de données basée sur MySQL, telle que MariaDB. Vous aurez également besoin libapache2-mod-php pour permettre à Apache de gérer les fichiers PHP. Les packages PHP principaux seront automatiquement installés en tant que dépendances.

Pour installer ces packages, exécutez la commande suivante :

sudo apt install php libapache2-mod-php php-mysql

Une fois l'installation terminée, vous pouvez vérifier votre version de PHP avec la commande suivante :

php -v
OutputPHP 7.4.30 (cli) (built: Jul  7 2022 15:51:43) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies

À ce stade, votre pile LAMP est pleinement opérationnelle, mais avant de tester votre configuration avec un script PHP, il est préférable de configurer un Apache hôte virtuel approprié pour contenir les fichiers et dossiers de votre site Web.

Étape 4 - Création d'un hôte virtuel pour votre site Web

Lorsque vous utilisez le serveur Web Apache, vous pouvez créer des hôtes virtuels (similaire aux blocs de serveur dans Nginx) pour encapsuler les détails de configuration et héberger plusieurs domaines à partir d'un seul serveur. Dans ce guide, nous allons configurer un domaine appelé votre_domaine, mais vous devez le remplacer par votre propre nom de domaine.

Remarque : Si vous utilisez DigitalOcean comme fournisseur d'hébergement DNS, consultez notre documentation du produit pour obtenir des instructions détaillées sur la configuration d'un nouveau nom de domaine et le faire pointer vers votre serveur.


Par défaut, Apache sert son contenu à partir d'un répertoire situé à /var/www/html, en utilisant la configuration contenue dans /etc/apache2/sites-available/000-default.conf. Au lieu de modifier le fichier de configuration du site Web par défaut /var/www/html, vous allez créer un nouvel hôte virtuel pour tester votre environnement PHP. Les hôtes virtuels vous permettent de conserver plusieurs sites Web hébergés sur un seul serveur Apache. Vous allez également créer une structure de répertoires dans /var/www pour le site votre_domaine, en laissant /var/www/html en place comme répertoire par défaut à servir si une demande client ne correspond à aucun autre site.

Commencez par créer le répertoire Web racine pour votre_domaine comme suit :

sudo mkdir /var/www/your_domain

Ensuite, attribuez la propriété du répertoire avec le $USER variable d'environnement, qui fera référence à votre utilisateur système actuel :

sudo chown -R $USER:$USER /var/www/your_domain

Ensuite, ouvrez un nouveau fichier de configuration dans Apache sites-available répertoire à l'aide de votre éditeur de ligne de commande préféré. Ici, nous utiliserons nano:

sudo nano /etc/apache2/sites-available/your_domain.conf

Cela créera un nouveau fichier vierge. Ajoutez la configuration simple suivante avec votre propre nom de domaine :

/etc/apache2/sites-available/votre_domaine

<VirtualHost *:80>
    ServerName your_domain
    ServerAlias www.your_domain 
    ServerAdmin [email protected]
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Enregistrez et fermez le fichier lorsque vous avez terminé. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL + X, alors Y et ENTER.

Avec ça VirtualHost configuration, vous dites à Apache de servir your_domain utilisant /var/www/your_domain comme répertoire racine Web. Si vous souhaitez tester Apache sans nom de domaine, vous pouvez supprimer ou commenter les options ServerName et ServerAlias en ajoutant un signe dièse (#) au début des lignes de chaque option.

Maintenant, utilisez a2ensite pour activer cet hôte virtuel :

sudo a2ensite your_domain

Vous voudrez peut-être désactiver le site Web par défaut qui est installé avec Apache. Ceci est nécessaire si vous n'utilisez pas de nom de domaine personnalisé, car dans ce cas, la configuration par défaut de Apache remplacera votre hôte virtuel. Pour désactiver le site Web par défaut de Apache, exécutez :

sudo a2dissite 000-default

Pour vous assurer que votre fichier de configuration ne contient pas d'erreurs de syntaxe, exécutez la commande suivante :

sudo apache2ctl configtest

Enfin, rechargez Apache pour que ces modifications prennent effet :

sudo systemctl reload apache2

Ensuite, vous allez créer un script PHP pour tester que PHP est correctement installé et configuré sur votre serveur.

Étape 5 - Test du traitement PHP sur votre serveur Web

Maintenant que vous disposez d'un emplacement personnalisé pour héberger les fichiers et dossiers de votre site Web, créez un script de test PHP pour confirmer que Apache est capable de gérer et de traiter les demandes de fichiers PHP.

Commencez par créer un nouveau fichier nommé info.php dans votre dossier racine Web personnalisé :

nano /var/www/your_domain/info.php

Cela ouvrira un fichier vierge. Ajoutez le texte suivant, qui est un code PHP valide, dans le fichier :

/var/www/votre_domaine/info.php

<?php
phpinfo();

Lorsque vous avez terminé, enregistrez et fermez le fichier.

Pour tester le script, accédez à votre navigateur Web et accédez au nom de domaine ou à l'adresse IP de votre serveur, suivi du nom du script, qui dans ce cas est info.php:

http://your_domain/info.php

Voici un exemple de page Web PHP par défaut :

Cette page fournit des informations sur votre serveur du point de vue de PHP. Il est utile pour déboguer et s'assurer que vos paramètres sont appliqués correctement.

Si vous pouvez voir cette page dans votre navigateur, votre installation PHP fonctionne comme prévu.

Après avoir vérifié les informations pertinentes sur votre serveur PHP via 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 Debian. Utilisation rm faire cela:

sudo rm /var/www/your_domain/info.php

Vous pouvez toujours recréer cette page si vous avez besoin d'accéder à nouveau aux informations ultérieurement.

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

Si vous souhaitez 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 une table de test avec des données de test et interroger son contenu à partir d'un script PHP. Avant de faire cela, vous devez créer une base de données de test et un nouvel utilisateur MariaDB correctement configuré pour y accéder.

Créez une base de données nommée example_database et un utilisateur nommé example_user. Vous pouvez remplacer ces noms par des valeurs différentes.

Tout d'abord, connectez-vous à la console MariaDB en utilisant le compte root :

sudo mariadb

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

CREATE DATABASE example_database;

Créez maintenant un nouvel utilisateur et accordez-lui tous les privilèges sur la base de données personnalisée que vous avez créée.

La commande suivante crée un nouvel utilisateur nommé example_user qui s'authentifie avec un mot de passe. Nous définissons 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 :

CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

Ensuite, donnez à cet utilisateur l'autorisation sur le example_database base de données:

GRANT ALL ON example_database.* TO 'example_user'@'%';

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.

Ensuite, videz 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 dispose des autorisations appropriées en vous connectant à nouveau à la console MariaDB, cette fois en utilisant les informations d'identification personnalisées :

mariadb -u example_user -p

Noter la -p flag dans cette commande, qui vous demandera le mot de passe utilisé 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 vous donnera la sortie suivante :

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

Ensuite, créez une table de test nommée 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)
);

Insérez quelques lignes de contenu dans le tableau de test. Répétez la commande suivante plusieurs fois, en utilisant des valeurs différentes, pour remplir votre table de test :

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 table, exécutez :

SELECT * FROM example_database.todo_list;

Vous recevrez 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 disposez de données valides dans votre table de test, vous pouvez quitter la console MariaDB :

exit

Vous pouvez maintenant créer le script PHP qui se connectera à MariaDB et demandera votre contenu. Créez un nouveau fichier PHP dans votre répertoire racine Web personnalisé à l'aide de votre éditeur préféré :

nano /var/www/your_domain/todo_list.php

Le script PHP suivant se connecte à la base de données MariaDB et interroge le contenu de la table todo_list, affichant les résultats dans une liste. S'il y a un problème avec la connexion à la base de données, il lèvera une exception.

Ajoutez ce contenu dans votre todo_list.php script, sans oublier de remplacer le example_user et password valeurs avec les vôtres :

/var/www/votre_domaine/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 terminé l'édition.

Vous pouvez maintenant accéder à cette page dans votre navigateur Web en visitant le nom de domaine ou l'adresse IP publique de votre site Web, suivi de /todo_list.php:

http://your_domain/todo_list.php

Cette page Web révélera à votre visiteur le contenu que vous avez inséré dans votre tableau de test :

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 et MariaDB comme système de base de données.

Comme prochaine étape immédiate, vous devez vous assurer que les connexions à votre serveur Web sont sécurisées, en les servant via HTTPS. Pour ce faire, vous pouvez utiliser Let's Encrypt. Vous pouvez également lire notre guide sur Comment installer et utiliser Composer pour la gestion des dépendances et des packages en PHP.