Une version précédente de ce tutoriel a été écrite par Brennan Bearnes.

Introduction

Une pile « LAMP » est un groupe de logiciels open-source qui est généralement installé 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 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, nous allons installer une pile LAMP sur un serveur Ubuntu 18.04.

Prérequis

Pour réaliser ce tutoriel, vous devrez disposer d’un serveur Ubuntu 18.04 avec un compte utilisateur non root sudo et un pare-feu de base. Cela peut être configuré en utilisant notre guide de configuration initiale du serveur pour Ubuntu 18.04.

Étape 1 – Installation d’Apache et mise à jour du pare-feu

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

Installer Apache en utilisant le gestionnaire de paquets d’Ubuntu, apt:

  • sudo apt update
  • sudo apt install apache2

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

Une fois que vous aurez entré votre mot de passe, apt vous dira quels paquets il prévoit d’installer et combien d’espace disque supplémentaire ils prendront. Appuyez sur Y et sur ENTER pour continuer, et l’installation se poursuivra.

Régler le pare-feu pour autoriser le trafic Web

Puis, en supposant que vous ayez suivi les instructions de configuration initiale du serveur et activé le pare-feu UFW, assurez-vous que votre pare-feu autorise le trafic HTTP et HTTPS. Vous pouvez vérifier que l’UFW a un profil d’application pour Apache comme suit:

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

Si vous regardez le profil Apache Full, il devrait montrer qu’il autorise le trafic vers les ports 80 et 443:

  • sudo ufw app info "Apache Full"
Output
Profile: Apache FullTitle: Web Server (HTTP,HTTPS)Description: Apache v2 is the next generation of the omnipresent Apache webserver.Ports: 80,443/tcp

Autoriser le trafic HTTP et HTTPS entrant pour ce profil :

  • sudo ufw allow in "Apache Full"

Vous pouvez faire un contrôle ponctuel tout de suite 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 (voir la note sous le titre suivant pour savoir quelle est votre adresse IP publique si vous n’avez pas déjà cette information):

http://your_server_ip

Vous verrez la page web Ubuntu 18.04 Apache, qui est là à des fins d’information et de test. Elle devrait ressembler à quelque chose comme ceci:

Ubuntu 18.04 Apache par défaut

Si vous voyez cette page, alors votre serveur web est maintenant 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 y a plusieurs façons de la trouver. Habituellement, il s’agit de l’adresse que vous utilisez pour vous connecter à votre serveur via SSH.

Il existe plusieurs façons différentes de le faire à 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 ; }' | sed 's/\/.*$//'

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

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

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

Quoi qu’il en soit de la méthode utilisée pour obtenir votre adresse IP, tapez-la dans la barre d’adresse de votre navigateur web pour afficher la page Apache par défaut.

Étape 2 – Installation de MySQL

Maintenant que votre serveur web est opérationnel, il est temps d’installer MySQL. MySQL est un système de gestion de base de données. Fondamentalement, il organisera et fournira un accès aux bases de données où votre site peut stocker des informations.

De nouveau, utilisez apt pour acquérir et installer ce logiciel :

  • sudo apt install mysql-server

Note : Dans ce cas, vous n’avez pas besoin d’exécuter sudo apt update avant la commande. Cela est dû au fait que vous l’avez récemment exécuté dans les commandes ci-dessus pour installer Apache. L’index des paquets sur votre ordinateur devrait déjà être à jour.

Cette commande, également, vous montrera une liste des paquets qui seront installés, ainsi que la quantité d’espace disque qu’ils occuperont. Saisissez Y pour continuer.

Une fois l’installation terminée, exécutez un script de sécurité simple, préinstallé avec MySQL, qui supprimera certains paramètres par défaut dangereux et verrouillera l’accès à votre système de base de données. Lancez le script interactif en exécutant :

  • sudo mysql_secure_installation

Ceci vous demandera si vous voulez configurer le VALIDATE PASSWORD PLUGIN.

Note : L’activation de cette fonctionnalité est en quelque sorte une question de jugement. Si elle est activée, les mots de passe qui ne correspondent pas aux critères spécifiés seront rejetés par MySQL avec une erreur. Cela posera des problèmes si vous utilisez un mot de passe faible en conjonction avec un logiciel qui configure automatiquement les informations d’identification de l’utilisateur MySQL, comme les paquets Ubuntu pour phpMyAdmin. 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 la base de données.

Réponse Y pour oui, ou n’importe quoi d’autre pour continuer sans activer.

VALIDATE PASSWORD PLUGIN can be used to test passwordsand improve security. It checks the strength of passwordand allows the users to set only those passwords which aresecure 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 fort, vous recevrez des erreurs lorsque vous tenterez de définir tout mot de passe qui ne contient pas de chiffres, de lettres majuscules et minuscules et de caractères spéciaux, ou qui est basé sur des mots courants du dictionnaire.

There are three levels of password validation policy:LOW Length >= 8MEDIUM Length >= 8, numeric, mixed case, and special charactersSTRONG Length >= 8, numeric, mixed case, special characters and dictionary filePlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Que vous ayez choisi 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 root de MySQL. Il s’agit d’un compte administratif dans MySQL qui dispose de privilèges accrus. Il s’agit d’un compte administratif dans MySQL qui dispose de privilèges accrus, comme le compte root du serveur lui-même (bien que celui que vous configurez maintenant soit un compte spécifique à MySQL). Assurez-vous qu’il s’agit d’un mot de passe fort et unique, et ne le laissez pas vide.

Si vous avez activé la validation du mot de passe, la force du mot de passe racine que vous venez de saisir vous sera indiquée et votre serveur vous demandera si vous voulez changer ce mot de passe. Si vous êtes satisfait de votre mot de passe actuel, entrez N pour « non » à l’invite:

Using existing password for root.Estimated strength of the password: 100Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Pour le reste des questions, appuyez sur Y et frappez 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 apportées.

Notez que dans les systèmes Ubuntu exécutant MySQL 5.7 (et les versions ultérieures), l’utilisateur MySQL root est configuré pour s’authentifier à l’aide du plugin auth_socket par défaut plutôt qu’avec un mot de passe. Cela permet un peu plus de sécurité et de convivialité dans de nombreux cas, mais cela peut également compliquer les choses lorsque vous devez autoriser un programme externe (par exemple, phpMyAdmin) à accéder à l’utilisateur.

Si vous préférez utiliser un mot de passe lors de la connexion à MySQL en tant que root, vous devrez basculer sa méthode d’authentification de auth_socket à mysql_native_password. Pour ce faire, ouvrez l’invite MySQL à partir de votre terminal :

  • sudo mysql

Puis, vérifiez quelle méthode d’authentification utilise chacun de vos comptes utilisateurs MySQL à l’aide de la commande suivante :

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | | auth_socket | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

Dans cet exemple, vous pouvez voir que l’utilisateur root s’authentifie en fait à l’aide du plugin auth_socket. Pour configurer le compte root afin qu’il s’authentifie avec un mot de passe, exécutez la commande ALTER USER suivante. Assurez-vous de changer password par un mot de passe fort de votre choix:

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

Puis, exécutez FLUSH PRIVILEGES qui indique au serveur de recharger les tables d’octroi et de mettre vos nouveaux changements en vigueur :

  • FLUSH PRIVILEGES;

Vérifiez à nouveau les méthodes d’authentification employées par chacun de vos utilisateurs pour confirmer que root ne s’authentifie plus en utilisant le plugin auth_socket:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

Vous pouvez voir dans cet exemple de sortie que l’utilisateur MySQL root s’authentifie maintenant en utilisant un mot de passe. Une fois que vous confirmez cela sur votre propre serveur, vous pouvez quitter le shell MySQL:

  • exit

À ce stade, votre système de base de données est maintenant 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 du contenu dynamique. Il peut exécuter des scripts, se connecter à vos bases de données MySQL pour obtenir des informations, et remettre le contenu traité à votre serveur web pour qu’il l’affiche.

Encore une fois, tirez parti du système apt pour installer PHP. En outre, incluez cette fois quelques paquets d’aide pour que le code PHP puisse s’exécuter sous le serveur Apache et parler à votre base de données MySQL:

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

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

Dans la plupart des 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 indiquer au serveur web de préférer les fichiers PHP aux autres, donc faire en sorte qu’Apache cherche d’abord un fichier index.php.

Pour ce faire, tapez cette commande pour ouvrir le fichier dir.conf dans un éditeur de texte avec les privilèges de 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.php index.xhtml index.htm</IfModule>

Déplacez le fichier d’index PHP (mis en évidence 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.php index.html index.cgi index.pl index.xhtml index.htm</IfModule>

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

Après cela, redémarrez le serveur web Apache afin que vos changements soient reconnus. Faites-le en tapant ceci:

  • 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 - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start

Appuyez sur Q pour quitter cette sortie d’état.

Pour améliorer les fonctionnalités de PHP, vous avez la possibilité d’installer certains modules supplémentaires. Pour voir les options disponibles pour les modules et bibliothèques PHP, pipez les résultats de apt search dans 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 les composants optionnels que vous pouvez installer. Il vous donnera une courte description pour chacun d’entre eux :

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64 Tracks usage of TCP/IP and builds html files with graphsbluefish/bionic 2.2.10-1 amd64 advanced Gtk+ text editor for web and software developmentcacti/bionic 1.1.38+ds1-1 all web interface for graphing of monitoring systemsganglia-webfrontend/bionic 3.6.1-3 all cluster monitoring toolkit - web front-endgolang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all PHP-like Compression and Archive Extensions in Gohaserl/bionic 0.9.35-2 amd64 CGI scripting program for embedded environmentskdevelop-php-docs/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-phpkdevelop-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 pourriez faire des recherches sur Internet pour obtenir plus d’informations à leur sujet. Alternativement, regardez la description longue du paquet en tapant:

  • apt show package_name

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

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

  • apt show php-cli

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

Output
…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 voulez installer un paquet, vous pouvez le faire en utilisant la commande apt install comme vous l’avez fait pour les autres logiciels.

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

  • sudo apt install php-cli

Si vous voulez installer plus d’un module, vous pouvez le faire en énumérant 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 mettre en place un hôte virtuel Apache où vous pourrez stocker les détails de configuration de votre serveur.

Étape 4 – Configuration des hôtes virtuels (recommandé)

Lorsque vous utilisez le serveur web Apache, vous pouvez utiliser 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. Nous allons configurer un domaine appelé votre_domaine, mais vous devriez le remplacer par votre propre nom de domaine. Pour en savoir plus sur la configuration d’un nom de domaine avec DigitalOcean, consultez notre Introduction au DNS de DigitalOcean.

Apache sur Ubuntu 18.04 a un bloc serveur activé par défaut qui est configuré pour servir les documents du répertoire /var/www/html. Bien que cela fonctionne bien pour un seul site, cela peut devenir lourd si vous hébergez plusieurs sites. Au lieu de modifier /var/www/html, créons une structure de répertoire dans /var/www pour notre site your_domain, 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éer le répertoire pour votre_domaine comme suit :

sudo mkdir /var/www/your_domain

Puis, attribuer la propriété du répertoire avec la variable d’environnement $USER :

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

Les permissions de vos racines web devraient être correctes si vous n’avez pas modifié votre valeur unmask, mais vous pouvez vous en assurer en tapant :

  • sudo chmod -R 755 /var/www/your_domain

Puis, créez un exemple de page index.html en utilisant nano ou votre éditeur préféré:

  • nano /var/www/your_domain/index.html

A l’intérieur, ajoutez l’exemple HTML suivant:

/var/www/votre_domaine/index.html
<html> <head> <title>Welcome to Your_domain!</title> </head> <body> <h1>Success! The your_domain server block is working!</h1> </body></html>

Enregistrez et fermez le fichier lorsque vous avez terminé.

Pour qu’Apache puisse servir ce contenu, il est nécessaire de créer un fichier d’hôte virtuel avec les directives correctes. Au lieu de modifier directement le fichier de configuration par défaut situé à /etc/apache2/sites-available/000-default.conf, créons-en un nouveau à /etc/apache2/sites-available/your_domain.conf :

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

Coller le bloc de configuration suivant, qui est similaire à celui par défaut, mais mis à jour pour notre nouveau répertoire et nom de domaine:

/etc/apache2/sites-available/votre_domaine.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>

Notez que nous avons mis à jour le DocumentRoot pour notre nouveau répertoire et le ServerAdmin pour un courriel auquel l’administrateur du site votre_domaine peut accéder. Nous avons également ajouté deux directives : ServerName, qui établit le domaine de base qui doit correspondre pour cette définition d’hôte virtuel, et ServerAlias, qui définit d’autres noms qui doivent correspondre comme s’ils étaient le nom de base.

Enregistrez et fermez le fichier lorsque vous avez terminé.

Activons le fichier avec l’outil a2ensite :

  • sudo a2ensite your_domain.conf

Désactiver le site par défaut défini dans 000-default.conf:

  • sudo a2dissite 000-default.conf

Puis, testons les erreurs de configuration :

  • sudo apache2ctl configtest

Vous devriez voir la sortie suivante :

Output
Syntax OK

Redémarrez Apache pour mettre en œuvre vos changements :

  • sudo systemctl restart apache2

Apache devrait maintenant servir votre nom de domaine. Vous pouvez le tester en naviguant vers http://your_domain, où vous devriez voir quelque chose comme ceci:

Apache virtual host example

Avec cela, votre hôte virtuel est entièrement configuré. Cependant, avant d’effectuer d’autres modifications ou de déployer une application, il serait utile de tester de manière proactive votre configuration PHP au cas où il y aurait des problèmes à résoudre.

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

Afin de tester que votre système est configuré correctement pour PHP, créez un script PHP très basique appelé info.php. Pour qu’Apache trouve ce fichier et le serve correctement, il doit être enregistré dans le répertoire racine de votre site web.

Créez le fichier à la racine web que vous avez créée à l’étape précédente en exécutant :

  • sudo nano /var/www/your_domain/info.php

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

info.php
<?phpphpinfo();?>

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

Maintenant, vous pouvez tester si votre serveur web est capable d’afficher correctement le contenu généré par ce script PHP. Pour l’essayer, 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://your_domain/info.php

La page sur laquelle vous arrivez devrait ressembler à ceci:

Ubuntu 18.04 default PHP info

Cette page fournit des informations de base 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 pouvez voir cette page dans votre navigateur, alors votre PHP fonctionne comme prévu.

Vous voulez probablement supprimer ce fichier après ce test car il pourrait effectivement donner des informations sur votre serveur à des utilisateurs non autorisés. Pour ce faire, exécutez la commande suivante :

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

Vous pouvez toujours recréer cette page si vous avez besoin d’accéder à nouveau à ces informations plus tard.

Conclusion

Maintenant que vous avez une pile LAMP installée, vous avez plusieurs choix pour ce qui est de la suite. Fondamentalement, vous avez installé une plate-forme qui vous permettra d’installer la plupart des types de sites Web et de logiciels Web sur votre serveur.

Pour l’étape suivante immédiate, vous devez vous assurer que les connexions à votre serveur Web sont sécurisées, en les servant via HTTPS. L’option la plus simple ici est d’utiliser Let’s Encrypt pour sécuriser votre site avec un certificat TLS/SSL gratuit.

D’autres options populaires sont:

  • Installer WordPress le système de gestion de contenu le plus populaire sur internet.
  • Configurer PHPMyAdmin pour aider à gérer vos bases de données MySQL à partir du navigateur web.
  • Apprendre à utiliser SFTP pour transférer des fichiers vers et depuis votre serveur.