Recherche de site Web

Comment installer la pile Linux, Apache, MySQL, PHP (LAMP) sur Ubuntu


Introduction

Une pile « LAMP » est un groupe de logiciels open source qui est généralement installé ensemble afin de permettre à un serveur d’héberger des sites web dynamiques et des applications web écrits en PHP. 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 MySQL, et le contenu dynamique est traité par PHP.

Dans ce guide, vous allez configurer une pile LAMP sur un serveur Ubuntu 22.04. Ces étapes restent les mêmes pour Ubuntu v18.04 et les versions ultérieures.

Prérequis

Si vous utilisez Ubuntu version 16.04 ou une version inférieure, nous vous recommandons de mettre à niveau vers une version plus récente car Ubuntu ne fournit plus de support pour ces versions. Cette collection de guides vous aidera à mettre à niveau votre version d'Ubuntu.

Pour compléter ce tutoriel, vous aurez besoin d'un serveur exécutant Ubuntu, ainsi que d'un utilisateur non-root disposant des privilèges sudo et d'un pare-feu actif. Pour obtenir des conseils sur la manière de les configurer, veuillez choisir votre distribution dans cette liste et suivre notre Guide de configuration initiale du serveur.

Déployez une base de données en un clic en utilisant les bases de données gérées de Linux-Console.net. Laissez Linux-Console.net se concentrer sur la mise à l'échelle, la maintenance et les mises à jour de votre base de données.

Configurer une pile LAMP sur Ubuntu

  1. Installer Apache et mettre à jour le pare-feu
  2. Installer la base de données MySQL
  3. Installer PHP
  4. Configurer un hébergement Web virtuel
  5. Test de traitement PHP
  6. Tester la connexion à la base de données

Étape 1 — Installation d'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 est largement utilisé depuis une grande partie de l’histoire du web, ce qui en fait un excellent choix pour héberger un site web.

Commencez par mettre à jour le cache du gestionnaire de paquets. Si c’est la première fois que vous utilisez sudo au cours de cette session, il vous sera demandé de fournir le mot de passe de votre utilisateur pour confirmer que vous disposez des privilèges nécessaires pour gérer les paquets système avec apt :

sudo apt update

Ensuite, installez Apache avec :

sudo apt install apache2

Vous serez invité à confirmer l'installation d'Apache. Confirmez en appuyant sur Y, puis sur ENTRÉE.

Une fois l'installation terminée, vous devrez ajuster les paramètres de votre pare-feu pour autoriser le trafic HTTP. L'outil de configuration de pare-feu par défaut d'Ubuntu s'appelle Uncomplicated Firewall (UFW). Il dispose de différents profils d'application que vous pouvez utiliser. Pour lister tous les profils d'application UFW actuellement disponibles, exécutez cette commande :

sudo ufw app list
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Voici ce que chacun de ces profils signifie :

  • Apache : Ce profil n'ouvre que le port 80 (trafic web normal, non chiffré).
  • Apache Complet : Ce profil ouvre à la fois le port 80 (trafic web normal non chiffré) et le port 443 (trafic chiffré TLS/SSL).
  • Apache Secure : Ce profil n'ouvre que le port 443 (trafic chiffré TLS/SSL).

Pour l'instant, il est préférable de n'autoriser que les connexions sur le port 80, car il s'agit d'une installation Apache récente et vous n'avez pas encore configuré de certificat TLS/SSL pour autoriser le trafic HTTPS sur votre serveur.

Pour autoriser uniquement le trafic sur le port 80, utilisez le profil Apache :

sudo ufw allow in "Apache"

Vérifiez le changement avec :

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache                     ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache (v6)                ALLOW       Anywhere (v6)

Le trafic sur le port 80 est maintenant autorisé à travers le pare-feu.

Vous pouvez effectuer une vérification ponctuelle immédiatement pour vérifier que tout s'est passé comme prévu en visitant l'adresse IP publique de votre serveur dans votre navigateur web (consultez la note sous le titre suivant pour savoir quelle est votre adresse IP publique si vous ne disposez pas déjà de cette information) :

http://your_server_ip

La page web par défaut d'Apache sur Ubuntu est présente à des fins d'information et de test. Ci-dessous un exemple de la page web par défaut d'Apache pour Ubuntu 22.04 :

Si vous pouvez voir cette page, votre serveur web est correctement installé et accessible à travers votre pare-feu.

Comment trouver l'adresse IP publique de votre serveur

Si vous ne savez pas quelle est l'adresse IP publique de votre serveur, il existe plusieurs façons de la trouver. Habituellement, c'est l'adresse que vous utilisez pour vous connecter à votre serveur via SSH.

Il existe plusieurs façons de le faire depuis la ligne de commande. Tout d'abord, vous pouvez utiliser les outils iproute2 pour obtenir votre adresse IP en tapant ceci :

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

Cela vous donnera deux ou trois lignes en retour. Ce sont toutes des adresses correctes, mais votre ordinateur ne pourra peut-être en utiliser qu'une seule, alors n'hésitez pas à essayer chacune d'elles.

Une méthode alternative consiste à utiliser l'utilitaire curl pour contacter une partie extérieure afin de vous dire comment elle voit votre serveur. Cela se fait en demandant à un serveur spécifique quelle est votre adresse IP :

curl http://icanhazip.com

Quelle que soit la méthode que vous choisissez, tapez votre adresse IP dans votre navigateur Web pour vérifier que votre serveur fonctionne.

Étape 2 — Installer MySQL

Maintenant que vous avez un serveur web en fonctionnement, vous devez installer le système de base de données pour pouvoir stocker et gérer les données de votre site. MySQL est un système de gestion de base de données populaire utilisé dans les environnements PHP.

Encore une fois, utilisez apt pour acquérir et installer ce logiciel :

sudo apt install mysql-server

Lorsque vous y êtes invité, confirmez l'installation en tapant Y, puis ENTRÉE.

Lorsque l'installation est terminée, il est recommandé d'exécuter un script de sécurité qui est préinstallé avec MySQL. 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.

Avertissement : À partir de juillet 2022, une erreur se produira lorsque vous exécuterez le script mysql_secure_installation sans configuration supplémentaire. La raison est que ce script tentera de définir un mot de passe pour le compte MySQL root de l’installation mais, par défaut sur les installations Ubuntu, ce compte n’est pas configuré pour se connecter avec un mot de passe.

Avant juillet 2022, ce script échouait silencieusement après avoir tenté de définir le mot de passe du compte root et poursuivait le reste des invites. Cependant, au moment de la rédaction, le script renverra l'erreur suivante après que vous aurez saisi et confirmé un mot de passe :

 ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.

New password:

Cela conduira le script dans une boucle récursive dont vous ne pourrez sortir qu'en fermant votre fenêtre de terminal.

Parce que le script mysql_secure_installation effectue un certain nombre d'autres actions utiles pour maintenir votre installation MySQL sécurisée, il est toujours recommandé de l'exécuter avant de commencer à utiliser MySQL pour gérer vos données. Cependant, pour éviter d'entrer dans cette boucle récursive, vous devrez d'abord ajuster la façon dont votre utilisateur MySQL root s'authentifie.

Tout d'abord, ouvrez l'invite MySQL :

sudo mysql

Ensuite, exécutez la commande ALTER USER suivante pour modifier la méthode d'authentification de l'utilisateur root en une méthode utilisant un mot de passe. L'exemple suivant change la méthode d'authentification en mysql_native_password :

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Après avoir effectué ce changement, quittez l'invite MySQL :

exit

Ensuite, vous pouvez exécuter le script mysql_secure_installation sans problème.

Démarrez le script interactif en exécutant :

sudo mysql_secure_installation

Ceci demandera si vous souhaitez configurer le PLUGIN DE VALIDATION DE MOT DE PASSE.

Remarque : Activer cette fonctionnalité est en quelque sorte une question de jugement. Si elle est activée, les mots de passe qui ne respectent pas les critères spécifiés seront rejetés par MySQL avec une erreur. Il est sûr de laisser la validation désactivée, mais vous devriez toujours utiliser des mots de passe forts et uniques pour les identifiants de base de données.

Répondez Y pour oui, ou autre chose pour continuer sans activer.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Si vous répondez « oui », il vous sera demandé de sélectionner un niveau de validation du mot de passe. Gardez à l'esprit que si vous entrez 2 pour le niveau le plus élevé, vous recevrez des erreurs lorsque vous tenterez de définir un mot de passe qui ne contient pas de chiffres, de lettres majuscules et minuscules, et de caractères spéciaux :

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Que vous choisissiez ou non de configurer le VALIDATE PASSWORD PLUGIN, votre serveur vous demandera ensuite de sélectionner et de confirmer un mot de passe pour l'utilisateur MySQL root. Il ne faut pas confondre cela avec le root système. L'utilisateur root de la base de données est un utilisateur administratif avec tous les privilèges sur le système de base de données. Même si la méthode d'authentification par défaut pour l'utilisateur root de MySQL n'implique pas l'utilisation d'un mot de passe, même lorsqu'un mot de passe est défini, vous devriez définir un mot de passe fort ici comme mesure de sécurité supplémentaire.

Si vous avez activé la validation du mot de passe, la solidité du mot de passe pour le mot de passe root que vous venez de saisir vous sera affichée et votre serveur vous demandera si vous souhaitez continuer avec ce mot de passe. Si vous êtes satisfait de votre mot de passe actuel, saisissez Y pour « oui » à l’invite :

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Pour le reste des questions, appuyez sur Y et appuyez sur la touche ENTER à chaque invite. Cela supprimera certains utilisateurs anonymes et la base de données de test, désactivera les connexions root à distance et chargera ces nouvelles règles afin que MySQL respecte immédiatement les modifications que vous avez effectuées.

Lorsque vous avez terminé, testez si vous êtes capable de vous connecter à la console MySQL en tapant :

sudo mysql

Cela se connectera au serveur MySQL en tant qu'utilisateur administrateur de la base de données root, ce qui est déduit de l'utilisation de sudo lors de l'exécution de cette commande. Voici un exemple de sortie :

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Pour quitter la console MySQL, tapez :

exit

Remarquez que vous n'aviez pas besoin de fournir de mot de passe pour vous connecter en tant qu'utilisateur root, même si vous en avez défini un lors de l'exécution du script mysql_secure_installation. Cela s'explique par le fait que la méthode d'authentification par défaut pour l'utilisateur administratif MySQL est unix_socket au lieu de password. Bien que cela puisse sembler un problème de sécurité, cela rend le serveur de base de données plus sûr, car les seuls utilisateurs autorisés à se connecter en tant qu'utilisateur MySQL root sont les utilisateurs système disposant des privilèges sudo se connectant depuis la console ou via une application exécutée avec les mêmes privilèges. En termes pratiques, cela signifie que vous ne pourrez pas utiliser l'utilisateur administratif root de la base de données pour vous connecter depuis votre application PHP. Définir un mot de passe pour le compte MySQL root agit comme une précaution, au cas où la méthode d'authentification par défaut serait modifiée de unix_socket à password.

Pour une sécurité accrue, il est préférable de disposer de 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'héberger plusieurs bases de données sur votre serveur.

Remarque : Certaines anciennes versions de PHP ne prennent pas en charge caching_sha2_password, la méthode d'authentification par défaut pour MySQL 8. Pour cette raison, lors de la création d'utilisateurs de base de données pour les applications PHP sur MySQL 8, vous devrez peut-être configurer votre application pour utiliser plutôt le module mysql_native_password. Ce tutoriel montrera comment faire cela à l'Étape 6.

Votre serveur MySQL est maintenant installé et sécurisé. Ensuite, vous allez installer PHP, le dernier composant de la pile LAMP.

Étape 3 — Installer PHP

Vous avez installé Apache pour servir votre contenu et MySQL pour stocker et gérer vos données. PHP est le composant de notre configuration qui traitera le code pour afficher du contenu dynamique à l'utilisateur final. En plus du paquet php, vous aurez besoin de php-mysql, un module PHP qui permet à PHP de communiquer avec des bases de données basées sur MySQL. Vous aurez également besoin de libapache2-mod-php pour permettre à Apache de gérer les fichiers PHP. Les paquets PHP de base 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, exécutez la commande suivante pour confirmer votre version de PHP :

php -v
PHP 8.1.2 (cli) (built: Mar  4 2022 18:13:46) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

Modifier l’index de répertoire d’Apache (Optionnel)

Dans certains cas, vous voudrez modifier la façon dont Apache sert les fichiers lorsqu'un répertoire est demandé. Actuellement, si un utilisateur demande un répertoire au serveur, Apache cherchera d'abord un fichier appelé index.html. Nous voulons dire au serveur web de préférer les fichiers PHP aux autres, afin qu'Apache cherche d'abord un fichier index.php. Si vous ne faites pas cela, un fichier index.html placé dans la racine du document de l'application prendra toujours le pas sur un fichier index.php.

Pour effectuer ce changement, ouvrez le fichier de configuration dir.conf dans un éditeur de texte de votre choix. Ici, nous utiliserons nano :

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

Ça ressemblera à ceci :

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

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

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

Lorsque vous avez terminé, enregistrez et fermez le fichier en appuyant sur CTRL+X. Confirmez l'enregistrement en tapant Y puis appuyez sur ENTER pour vérifier l'emplacement d'enregistrement du fichier.

Après cela, redémarrez le serveur web Apache afin que vos modifications soient reconnues. Vous pouvez le faire avec la commande suivante :

sudo systemctl restart apache2

Vous pouvez également vérifier l'état du service apache2 en utilisant systemctl :

sudo systemctl status apache2
Sample Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Thu 2021-07-15 09:22:59 UTC; 1h 3min ago Main PID: 3719 (apache2) Tasks: 55 (limit: 2361) CGroup: /system.slice/apache2.service ├─3719 /usr/sbin/apache2 -k start ├─3721 /usr/sbin/apache2 -k start └─3722 /usr/sbin/apache2 -k start Jul 15 09:22:59 ubuntu1804 systemd[1]: Starting The Apache HTTP Server... Jul 15 09:22:59 ubuntu1804 apachectl[3694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' di Jul 15 09:22:59 ubuntu1804 systemd[1]: Started The Apache HTTP Server.

Appuyez sur Q pour quitter cette sortie de statut.

Installation des extensions PHP (optionnel)

Pour étendre la fonctionnalité de PHP, vous avez la possibilité d'installer certains modules supplémentaires. Pour voir les options disponibles pour les modules et bibliothèques PHP, redirigez les résultats de apt search vers less, un pager qui vous permet de faire défiler la sortie d'autres commandes :

apt search php- | less

Utilisez les touches fléchées pour faire défiler vers le haut et vers le bas, et appuyez sur Q pour quitter.

Les résultats sont tous des composants optionnels que vous pouvez installer. Cela vous donnera une courte description pour chacun :

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
  Tracks usage of TCP/IP and builds html files with graphs

bluefish/bionic 2.2.10-1 amd64
  advanced Gtk+ text editor for web and software development

cacti/bionic 1.1.38+ds1-1 all
  web interface for graphing of monitoring systems

ganglia-webfrontend/bionic 3.6.1-3 all
  cluster monitoring toolkit - web front-end

golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
  PHP-like Compression and Archive Extensions in Go

haserl/bionic 0.9.35-2 amd64
  CGI scripting program for embedded environments

kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php

kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php-l10n
…
:

Pour en savoir plus sur ce que fait chaque module, vous pouvez rechercher des informations à leur sujet sur Internet. Sinon, consultez la description détaillée du package en tapant :

apt show package_name

Il y aura beaucoup de sorties, avec un champ appelé Description qui contiendra une explication plus longue des fonctionnalités que le module fournit.

Par exemple, pour savoir ce que fait le module php-cli, vous pouvez taper ceci :

apt show php-cli

Avec une grande quantité d'autres informations, vous trouverez quelque chose qui ressemble à ceci :

…
Description: command-line interpreter for the PHP scripting language (default)
 This package provides the /usr/bin/php command interpreter, useful for
 testing PHP scripts from a shell or performing general shell scripting tasks.
 .
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Ubuntu's default
 PHP version (currently 7.2).
…

Si, après avoir fait des recherches, vous décidez que vous souhaitez installer un paquet, vous pouvez le faire en utilisant la commande apt install comme vous l'avez fait pour les autres logiciels.

Si vous décidez que php-cli est quelque chose dont vous avez besoin, vous pouvez taper :

sudo apt install php-cli

Si vous voulez installer plus d'un module, vous pouvez le faire en listant chacun d'eux, séparés par un espace, après la commande apt install, comme ceci :

sudo apt install package1 package2 ...

À ce stade, votre pile LAMP est installée et configurée. Avant de faire quoi que ce soit d'autre, nous vous recommandons de configurer un hôte virtuel Apache où vous pourrez stocker les détails de configuration de votre serveur.

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

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

Lors de l'utilisation du serveur web Apache, vous pouvez créer des hôtes virtuels (similaires aux blocs de serveur dans Nginx) pour encapsuler les détails de configuration et héberger plus d'un domaine à partir d'un seul serveur. Dans ce guide, nous allons configurer un domaine appelé votre_domaine, mais vous devriez le remplacer par votre propre nom de domaine.

Remarque : Si vous utilisez Linux-Console.net comme fournisseur d'hébergement DNS, consultez notre documentation produit pour des instructions détaillées sur la façon de configurer un nouveau nom de domaine et de le pointer vers votre serveur.

Apache sur Ubuntu a un hôte virtuel activé par défaut, configuré pour servir des documents depuis le répertoire /var/www/html. Bien que cela fonctionne bien pour un seul site, cela peut devenir difficile à gérer si vous hébergez plusieurs sites. Au lieu de modifier /var/www/html, nous allons 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 requête client ne correspond à aucun autre site.

Créez le répertoire pour votre_domaine comme suit :

sudo mkdir /var/www/your_domain

Ensuite, attribuez la propriété du répertoire en utilisant la variable d'environnement $USER, 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 le répertoire sites-available d'Apache en utilisant 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 vide. Ajoutez la configuration minimale suivante avec votre propre nom de domaine :

<VirtualHost *:80>
    ServerName your_domain
    ServerAlias www.your_domain
    ServerAdmin webmaster@localhost
    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, faites-le en appuyant sur CTRL+X, puis sur Y et ENTRÉE.

Avec cette configuration VirtualHost, nous indiquons à Apache de servir your_domain en utilisant /var/www/your_domain comme répertoire racine du site web. Si vous souhaitez tester Apache sans nom de domaine, vous pouvez supprimer ou commenter les options ServerName et ServerAlias en ajoutant un dièse (#) au début de chaque ligne de ces options.

Maintenant, utilisez a2ensite pour activer le nouvel hôte virtuel :

sudo a2ensite your_domain

Vous pourriez vouloir désactiver le site web par défaut qui est livré avec Apache. Cela est nécessaire si vous n'utilisez pas un nom de domaine personnalisé, car dans ce cas, la configuration par défaut d'Apache remplacerait 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, exécutez la commande suivante :

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/votre_domaine est encore vide. Créez un fichier index.html à cet emplacement pour tester que l'hôte virtuel fonctionne comme prévu :

nano /var/www/your_domain/index.html

Incluez le contenu suivant dans ce fichier :

<html>
  <head>
    <title>your_domain website</title>
  </head>
  <body>
    <h1>Hello World!</h1>

    <p>This is the landing page of <strong>your_domain</strong>.</p>
  </body>
</html>

Enregistrez et fermez le fichier, puis allez dans votre navigateur et accédez au nom de domaine ou à l'adresse IP de votre serveur :

http://server_domain_or_IP

Votre page web devrait refléter le contenu du fichier que vous venez de modifier :

Vous pouvez laisser ce fichier en place comme page d'accueil temporaire pour votre application jusqu'à ce que vous configuriez un fichier index.php pour le remplacer. Une fois cela fait, n'oubliez pas de supprimer ou de renommer le fichier index.html de votre répertoire racine, car il passerait par défaut avant un fichier index.php.

Une note sur DirectoryIndex sur Apache

Avec les paramètres par défaut de DirectoryIndex sur Apache, un fichier nommé index.html aura toujours la priorité sur un fichier index.php. Cela est utile pour mettre en place des pages de maintenance dans les applications PHP, en créant un fichier index.html temporaire contenant un message informatif pour les visiteurs. Comme cette page aura la priorité sur la page index.php, elle deviendra alors la page d'accueil de l'application. Une fois la maintenance terminée, le fichier index.html est renommé ou supprimé du répertoire racine, ramenant la page normale de l'application.

Au cas où vous voudriez changer ce comportement, vous devrez éditer le fichier /etc/apache2/mods-enabled/dir.conf et modifier l'ordre dans lequel le fichier index.php est listé dans la directive DirectoryIndex :

sudo nano /etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
        DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Après avoir enregistré et fermé le fichier, vous devrez recharger Apache pour que les modifications prennent effet :

sudo systemctl reload apache2

Dans l'étape suivante, nous allons créer un script PHP pour tester 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 dossiers de votre site Web, créez un script de test PHP 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/your_domain/info.php

Cela ouvrira un fichier vierge. Ajoutez le texte suivant, qui est un code PHP valide, à l'intérieur du fichier :

<?php
phpinfo();

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

Pour tester ce script, allez dans 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://server_domain_or_IP/info.php

Voici un exemple de la page web PHP par défaut :

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

Si vous voyez cette page dans votre navigateur, alors 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 Ubuntu. Utilisez rm pour le faire :

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

Vous pouvez toujours recréer cette page si vous avez besoin d'accéder à nouveau à l'information plus tard.

Étape 6 — Test de la connexion à la base de données depuis PHP (Optionnel)

Si vous voulez tester si PHP est capable de se connecter à MySQL 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 depuis un script PHP. Avant de faire cela, vous devez créer une base de données de test et un nouvel utilisateur MySQL 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 d'autres valeurs.

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

sudo mysql

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

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 venez de créer.

La commande suivante crée un nouvel utilisateur nommé example_user qui s'authentifie avec la méthode caching_sha2_password. Nous définissons le mot de passe de cet utilisateur comme password, mais vous devriez remplacer cette valeur par un mot de passe sécurisé de votre choix.

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

Remarque : L’instruction précédente ALTER USER configure l’utilisateur MySQL root pour s’authentifier avec le plugin caching_sha2_password. Selon la documentation officielle de MySQL, caching_sha2_password est le plugin d’authentification préféré de MySQL, car il fournit un chiffrement de mot de passe plus sécurisé que l’ancien mysql_native_password, qui reste néanmoins largement utilisé.

Cependant, certaines versions de PHP ne fonctionnent pas de manière fiable avec caching_sha2_password. PHP a signalé que ce problème a été corrigé à partir de PHP 7.4, mais si vous rencontrez une erreur lors de la tentative de connexion à phpMyAdmin plus tard, vous voudrez peut-être configurer root pour qu'il s'authentifie avec mysql_native_password à la place :

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Maintenant, donnez à cet utilisateur la permission sur la base de données example_database :

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.

Quittez maintenant le shell MySQL avec :

exit

Testez si le nouvel utilisateur dispose des autorisations appropriées en vous connectant à nouveau à la console MySQL, cette fois en utilisant les identifiants de l'utilisateur personnalisé :

mysql -u example_user -p

Remarquez le drapeau -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 MySQL, confirmez que vous avez accès à la base de données example_database :

SHOW DATABASES;

Cela vous donnera la sortie suivante :

+--------------------+
| 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 MySQL, exécutez la commande 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 la table 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 été enregistrées avec succès dans votre table, exécutez :

SELECT * FROM example_database.todo_list;

Voici la sortie :

+---------+--------------------------+
| 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 table de test, quittez la console MySQL :

exit

Vous pouvez maintenant créer le script PHP qui se connectera à MySQL et interrogera votre contenu. Créez un nouveau fichier PHP dans votre répertoire racine web personnalisé en utilisant votre éditeur préféré :

nano /var/www/your_domain/todo_list.php

Le script PHP suivant se connecte à la base de données MySQL 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 générera une exception.

Ajoutez ce contenu dans votre script todo_list.php, en n'oubliant pas de remplacer le example_user et le password par les vôtres :

<?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é de le modifier.

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

http://your_domain_or_IP/todo_list.php

Cette page web devrait révéler le contenu que vous avez inséré dans votre tableau de test à votre visiteur :

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

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

Comme prochaine étape immédiate, vous devriez vous assurer que les connexions à votre serveur web sont sécurisées, en les servant via HTTPS. Pour y parvenir, vous pouvez utiliser Let’s Encrypt sur Ubuntu 22.04/20.04/18.04 pour sécuriser votre site avec un certificat TLS/SSL gratuit.