Comment installer une pile Linux, Apache, MariaDB, PHP (LAMP) sur Debian 10

introduction

Une pile «LAMP» est un groupe de logiciels Open Source généralement installés ensemble pour permettre à un serveur d’héberger des sites Web dynamiques et des applications Web. Ce terme est en fait un acronyme qui représente le système d’exploitation L inux, avec le serveur Web A pache. Les données du site sont stockées dans une base de données M ariaDB et le contenu dynamique est traité par P HP.

Bien que cette pile logicielle inclue généralement * MySQL * en tant que système de gestion de base de données, certaines distributions Linux, y compris Debian, utilisent https://mariadb.org [MariaDB] en remplacement immédiat de MySQL.

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

Conditions préalables

Pour compléter ce didacticiel, vous devez disposer d’un serveur Debian 10 doté d’un compte utilisateur non root + sudo + et d’un pare-feu de base. Ceci peut être configuré en utilisant notre initial initial du guide de configuration du serveur pour Debian 10.

Étape 1 - Installer Apache et mettre à jour le pare-feu

Le serveur Web Apache est l’un des serveurs Web les plus populaires au monde. Il est bien documenté et a été largement utilisé dans la majeure partie de l’histoire du Web, ce qui en fait un excellent choix par défaut pour l’hébergement d’un site Web.

Installez Apache en utilisant le gestionnaire de paquets de Debian, APT:

sudo apt update
sudo apt install apache2

S’agissant d’une commande + sudo +, ces opérations sont exécutées avec les privilèges root. Il vous demandera le mot de passe de votre utilisateur régulier pour vérifier vos intentions.

Une fois que vous avez entré votre mot de passe, + apt + vous dira quels paquets il compte installer et combien d’espace disque ils vont occuper. Appuyez sur + Y + et appuyez sur + ENTER pour continuer et l’installation se poursuivra.

Ensuite, en supposant que vous ayez suivi les instructions de configuration initiale du serveur en https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10#step-4-%E2%80%94- Pour configurer un pare-feu de base [installer et activer le pare-feu UFW], assurez-vous que votre pare-feu autorise le trafic HTTP et HTTPS.

Une fois installé sur Debian 10, UFW est fourni avec des profils d’application que vous pouvez utiliser pour modifier les paramètres de votre pare-feu. Affichez la liste complète des profils d’application en exécutant:

sudo ufw app list

Les profils + WWW + permettent de gérer les ports utilisés par les serveurs Web:

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

Si vous inspectez le profil + WWW Full +, il indique qu’il 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:
 ,

Autorisez le trafic HTTP et HTTPS entrant pour ce profil:

sudo ufw allow in "WWW Full"

Vous pouvez immédiatement effectuer une vérification ponctuelle pour vérifier que tout s’est déroulé comme prévu en visitant l’adresse IP publique de votre serveur dans votre navigateur Web:

http://

Vous verrez la page Web par défaut de Debian 10 Apache, qui est là à des fins d’information et de test. Ça devrait ressembler a quelque chose comme ca:

image: http: //assets.digitalocean.com/how-to-install-lamp-debian-9/small_apache_default_debian9.png [Debian 10 Apache par défaut]

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

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

Il existe différentes manières de procéder à partir de la ligne de commande. Premièrement, vous pouvez utiliser les outils + iproute2 + pour obtenir votre adresse IP en tapant ceci:

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

Cela vous donnera 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 à les essayer.

Une autre méthode consiste à utiliser l’utilitaire + curl + pour contacter un tiers afin de vous expliquer comment it voit votre serveur. Ceci est fait en demandant à un serveur spécifique quelle est votre adresse IP:

sudo apt install curl
curl http://icanhazip.com

Quelle que soit la méthode utilisée pour obtenir votre adresse IP, saisissez-la dans la barre d’adresse de votre navigateur Web pour afficher 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 10, le métapaquet + mysql-server +, qui était traditionnellement utilisé pour installer le serveur MySQL, a été remplacé par + default-mysql-server +. Ce méta-paquet fait référence à MariaDB, un fork de la communauté du serveur MySQL d’origine par Oracle, et est actuellement le serveur de base de données compatible MySQL par défaut disponible sur les référentiels de gestionnaires de paquets basés sur Debian.

Cependant, pour une compatibilité à long terme, il est recommandé d’installer MariaDB au lieu du méta-paquet en utilisant le package actuel du programme, + mariadb-server +.

Pour installer ce logiciel, lancez:

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 supprime certains paramètres par défaut non sécurisés et verrouille 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 dans lesquelles vous pourrez apporter des modifications à votre configuration de MariaDB. La première invite vous demandera de saisir le mot de passe actuel * racine de la base de données *. Cela ne doit pas être confondu avec la * racine système *. L’utilisateur * racine de la base de données * est un utilisateur administrateur 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 encore apporté aucune modification à la configuration, ce mot de passe sera vide. Il vous suffit donc d’appuyer sur les touches + ENTER + à l’invite.

L’invite suivante vous demande si vous souhaitez configurer un mot de passe * racine de 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 la définir maintenant. Tapez + A + puis appuyez sur + ENTER.

À partir de là, vous pouvez appuyer sur + Y + puis sur + + ENTER + `pour 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 MariaDB respecte immédiatement les modifications que vous avez apportées. + Lorsque vous avez terminé, connectez-vous à la console MariaDB en tapant:

sudo mariadb

Cela connectera le serveur MariaDB en tant qu’utilisateur * root * de la base de données administrative, ce qui est déduit de l’utilisation de + sudo + lors de l’exécution de cette commande. Vous devriez voir la sortie comme ceci:

OutputWelcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 10.3.15-MariaDB-1 Debian 10

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 qu’il n’est pas nécessaire 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 de l’utilisateur administratif de MariaDB est + unix_socket + au lieu de + mot de passe +. Même si cela peut sembler être un problème de sécurité au départ, le serveur de base de données est davantage sécurisé, car les seuls utilisateurs autorisés à se connecter en tant qu’utilisateur * root * MariaDB sont les utilisateurs système disposant des privilèges sudo se connectant à partir de la console ou via une application en cours d’exécution. avec les mêmes privilèges. Concrètement, cela signifie que vous ne pourrez pas utiliser la base de données administrative * root * user pour vous connecter à partir de votre application PHP.

Pour une sécurité accrue, il est préférable d’avoir des comptes d’utilisateur dédiés avec des privilèges moins étendus, configurés pour chaque base de données, en particulier si vous envisagez 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 à partir de votre console MariaDB:

CREATE DATABASE ;

Vous pouvez maintenant créer un nouvel utilisateur et lui attribuer 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 «++», mais vous devez remplacer cette valeur par un mot de passe sécurisé de votre choix.

GRANT ALL ON .* TO ''@'localhost' IDENTIFIED BY '' 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 dispose des autorisations appropriées en vous reconnectant à la console MariaDB, cette fois à l’aide des informations d’identification de l’utilisateur personnalisé:

mariadb -u  -p

Notez l’indicateur + -p + 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, vérifiez que vous avez accès à la base de données * example_database *:

SHOW DATABASES;

Cela vous donnera la sortie suivante:

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

Pour quitter le shell MariaDB, tapez:

exit

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

Étape 3 - Installation de PHP

PHP est le composant de votre installation qui traitera le code pour afficher le contenu dynamique. 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.

Encore une fois, utilisez le système + apt + pour installer PHP. En outre, incluez des packages d’assistance qui garantiront que le code PHP peut être exécuté sur le serveur Apache et communiquez avec votre base de données MariaDB:

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

Cela devrait installer PHP sans aucun problème. Nous allons tester cela dans un instant.

Dans la plupart des cas, vous voudrez modifier la façon dont Apache sert les fichiers. Actuellement, si un utilisateur demande un répertoire au serveur, Apache recherchera d’abord un fichier nommé + index.html +. Nous voulons dire au serveur Web de préférer les fichiers PHP aux autres, alors demandez à Apache de commencer par rechercher un fichier + index.php +.

Pour ce faire, tapez la commande suivante pour ouvrir le fichier + dir.conf + dans un éditeur de texte doté des privilèges root:

sudo nano /etc/apache2/mods-enabled/dir.conf

Il ressemblera à ceci:

/etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
   DirectoryIndex index.html index.cgi index.pl  index.xhtml index.htm
</IfModule>

Déplacez le fichier d’index PHP (surligné ci-dessus) à la première position après la spécification + DirectoryIndex +, comme ceci:

/etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
   DirectoryIndex  index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

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.

Rechargez maintenant la configuration d’Apache avec:

sudo systemctl reload apache2

Vous pouvez vérifier le statut du service + apache 2 avec` + systemctl status`:

sudo systemctl status apache2
Sample Output● apache2.service - The Apache HTTP Server
  Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Active: active (running) since Mon 2019-07-08 12:58:31 UTC; 8s ago
    Docs: https://httpd.apache.org/docs/2.4/
 Process: 11948 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 11954 (apache2)
   Tasks: 6 (limit: 4719)
  Memory: 11.5M
  CGroup: /system.slice/apache2.service
          ├─11954 /usr/sbin/apache2 -k start
          ├─11955 /usr/sbin/apache2 -k start
          ├─11956 /usr/sbin/apache2 -k start
          ├─11957 /usr/sbin/apache2 -k start
          ├─11958 /usr/sbin/apache2 -k start
          └─11959 /usr/sbin/apache2 -k start

À ce stade, votre pile LAMP est complètement opérationnelle, mais avant de pouvoir tester votre configuration avec un script PHP, il est préférable de configurer un hôte virtuel approprié [ contenir les fichiers et les dossiers de votre site Web. Nous ferons cela à la prochaine étape.

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

Par défaut, Apache sert son contenu depuis un répertoire situé dans + / var / www / html +, en utilisant la configuration contenue dans + / etc / apache2 / sites-available / 000-default.conf +. Au lieu de modifier le fichier de configuration par défaut du site Web, nous allons créer un nouvel hôte virtuel pour tester votre environnement PHP. Les hôtes virtuels nous permettent de garder plusieurs sites Web hébergés sur un seul serveur Apache.

Ensuite, vous créerez une structure de répertoire dans + / var / www + pour un exemple de site Web nommé * votre_domaine *.

Créez le répertoire Web racine pour * votre_domaine * comme suit:

sudo mkdir /var/www/

Ensuite, attribuez la propriété du répertoire avec la variable d’environnement $ USER, qui devrait référencer votre utilisateur système actuel:

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

Ensuite, ouvrez un nouveau fichier de configuration dans le répertoire Apache + sites-available en utilisant votre éditeur de ligne de commande préféré. Ici, nous allons utiliser + nano +:

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

Cela créera un nouveau fichier vierge. Collez-le dans la configuration sans système d’exploitation suivante:

/ etc / apache2 / sites-available / votre_domaine

<VirtualHost *:80>
   ServerName
   ServerAlias www.
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Avec cette configuration + VirtualHost +, nous demandons à Apache de servir ++ en utilisant + / var / www / + comme répertoire racine Web. Si vous souhaitez tester Apache sans nom de domaine, vous pouvez supprimer ou commenter les options + NomServeur + et + ServerAlias ​​+ en ajoutant un caractère + # + au début des lignes de chaque option.

Vous pouvez maintenant utiliser + a2ensite + pour activer cet hôte virtuel:

sudo a2ensite

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

sudo a2dissite 000-default

Pour vous assurer que votre fichier de configuration ne contient pas d’erreurs de syntaxe, vous pouvez exécuter:

sudo apache2ctl configtest

Enfin, rechargez Apache pour que ces modifications prennent effet:

sudo systemctl reload apache2

Votre nouveau site Web est maintenant actif, mais la racine Web + / var / www / + est toujours vide. Dans la prochaine étape, nous allons créer un script PHP pour tester la nouvelle configuration et confirmer que PHP est correctement installé et configuré sur votre serveur.

Étape 5 - Tester le traitement PHP sur votre serveur Web

Maintenant que vous avez un emplacement personnalisé pour héberger les fichiers et les dossiers de votre site Web, nous allons créer un script de test PHP simple pour confirmer qu’Apache est capable de gérer et de traiter les demandes de fichiers PHP.

Créez un nouveau fichier nommé + info.php + dans votre dossier racine Web personnalisé:

nano /var/www//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.

Vous pouvez maintenant vérifier si votre serveur Web est capable d’afficher correctement le contenu généré par ce script PHP. Pour essayer ceci, visitez cette page dans votre navigateur Web. Vous aurez à nouveau besoin de l’adresse IP publique de votre serveur.

L’adresse que vous voudrez visiter est:

http:///info.php

Vous devriez voir une page semblable à ceci:

image: https: //assets.digitalocean.com/articles/lamp_debian10/phpinfo_debian10_lamp.png [informations PHP par défaut de Debian 10]

Cette page fournit des informations de base sur votre serveur du point de vue de PHP. C’est utile pour le débogage et pour vous assurer que vos paramètres sont appliqués correctement.

Si vous pouvez voir cette page dans votre navigateur, votre installation de 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. Vous pouvez utiliser + rm + pour le faire:

sudo rm /var/www//info.php

Vous pouvez toujours recréer cette page si vous devez accéder aux informations ultérieurement.

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

Si vous souhaitez vérifier 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 factices et interroger son contenu à l’aide 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éé dans le lien: # step-2-% E2% 80% 94-installer-mariadb [Étape 2] de ce guide:

mariadb -u  -p

Créez une table nommée * todo_list *. A partir de la console MariaDB, exécutez l’instruction suivante:

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

Maintenant, insérez quelques lignes de contenu dans la table de test. Vous voudrez peut-être répéter la commande suivante plusieurs fois, en utilisant différentes valeurs:

INSERT INTO . (content) VALUES ("");

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

SELECT * FROM .;

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 vérifié que vous avez des 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é. Nous allons utiliser + nano + pour cela:

nano /var/www//

Le script PHP suivant se connecte à la base de données MariaDB et interroge le contenu de la table * todo_list *, en affichant les résultats dans une liste. S’il y a un problème avec la connexion à la base de données, une exception sera levée. + Copiez ce contenu dans votre script + todo_list.php +:

/var/www/your_domain/todo_list.php

<?php
$user = "";
$password = "";
$database = "";
$table = "";

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 une fois l’édition terminée.

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:///todo_list.php

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

image: https: //assets.digitalocean.com/articles/lemp_debian10/todo_list.png [Exemple de liste de tâches PHP]

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

Conclusion

Dans ce guide, nous avons créé une base souple pour servir les sites Web et les applications PHP à vos visiteurs, en utilisant Apache comme serveur Web et MariaDB en tant que système de base de données.

Pour améliorer encore votre configuration actuelle, vous pouvez install Composer pour la gestion des dépendances et des paquets dans PHP, et vous pouvez également installer un certificat OpenSSL pour votre site Web en utilisant Let’s Encrypt.