Comment installer des piles Linux, Apache, MySQL et PHP (LAMP) sur Ubuntu 18.04

Une version précédente de ce didacticiel a été écrite parBrennan Bearnes.

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'exploitationLinux, avec le serveur web spacheA. Les données du site sont stockées dans une base de données sySQLMet le contenu dynamique est traité parPHP.

Dans ce guide, nous allons installer une pile LAMP sur un serveur Ubuntu 18.04.

Conditions préalables

Pour terminer ce didacticiel, vous aurez besoin d'un serveur Ubuntu 18.04 avec un compte utilisateur non root activé poursudo et un pare-feu de base. Ceci peut être configuré en utilisant nosinitial server setup guide for Ubuntu 18.04.

[[step-1 -—- installation-apache-et-mise à jour-du-pare-feu]] == É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é 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 à l'aide du gestionnaire de packages d'Ubuntu,apt:

sudo apt update
sudo apt install apache2

Puisqu'il s'agit d'une commandesudo, 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 indiquera les packages qu'il prévoit d'installer et l'espace disque supplémentaire qu'ils occuperont. Appuyez surY et appuyez surENTER pour continuer, et l'installation se poursuivra.

Ajuster le pare-feu pour autoriser le trafic Web

Ensuite, 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 UFW a un profil d'application pour Apache comme suit:

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

Si vous regardez le profilApache Full, il devrait montrer qu'il active le trafic vers les ports80 et443:

sudo ufw app info "Apache Full"
OutputProfile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp

Autorisez le trafic HTTP et HTTPS entrant pour ce profil:

sudo ufw allow in "Apache Full"

Vous pouvez immédiatement effectuer une vérification ponctuelle pour vérifier que tout s'est passé 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 ne disposez pas de ces informations.) déjà):

http://your_server_ip

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

Ubuntu 18.04 Apache default

Si vous voyez 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 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. Tout d'abord, vous pouvez utiliser les outilsiproute2 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'utilitairecurl pour contacter un tiers pour vous dire commentit 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.

[[step-2 -—- Installing-mysql]] == É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 sur lesquelles votre site peut stocker des informations.

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

sudo apt install mysql-server

[.note] #Note: Dans ce cas, vous n'avez pas besoin d'exécutersudo apt update avant la commande. C'est parce que vous l'avez récemment exécuté dans les commandes ci-dessus pour installer Apache. L'index du package sur votre ordinateur doit déjà être à jour.
#

Cette commande affiche également une liste des packages qui seront installés, ainsi que la quantité d’espace disque qu’ils vont occuper. EntrezY pour continuer.

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

sudo mysql_secure_installation

Cela vous demandera si vous souhaitez configurer lesVALIDATE PASSWORD PLUGIN.

[.note] #Note: L'activation de cette fonction est une sorte de jugement. Si activé, les mots de passe qui ne correspondent pas aux critères spécifiés seront rejetés par MySQL avec une erreur. Cela causera des problèmes si vous utilisez un mot de passe faible en conjonction avec un logiciel qui configure automatiquement les informations d'identification des utilisateurs MySQL, tels que les packages Ubuntu pour phpMyAdmin. Il est prudent de laisser la validation désactivée, mais vous devez toujours utiliser des mots de passe forts et uniques pour les informations d'identification de la base de données.
#

Répondez àY pour oui, ou toute 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 entrez2 pour le niveau le plus fort, 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, ou qui est basé sur des mots courants du dictionnaire .

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 ayez choisi ou non de configurer lesVALIDATE PASSWORD PLUGIN, votre serveur vous demandera ensuite de sélectionner et de confirmer un mot de passe pour l'utilisateur MySQLroot. C'est un compte administratif dans MySQL qui a augmenté ses privilèges. Pensez-y comme étant similaire au compteroot pour le 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 vierge.

Si vous avez activé la validation du mot de passe, la force du mot de passe du mot de passe root que vous venez d'entrer sera affichée. Votre serveur vous demandera si vous souhaitez modifier ce mot de passe. Si vous êtes satisfait de votre mot de passe actuel, entrezN pour «non» à l'invite:

Using existing password for root.

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

Pour le reste des questions, appuyez surY et appuyez sur la toucheENTER à 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 versions ultérieures), l'utilisateur MySQLroot est configuré pour s'authentifier en utilisant le pluginauth_socket par défaut plutôt qu'avec un mot de passe. Cela permet une sécurité et une convivialité accrues dans de nombreux cas, mais 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 queroot, vous devrez changer sa méthode d'authentification deauth_socket àmysql_native_password. Pour ce faire, ouvrez l’invite MySQL depuis votre terminal:

sudo mysql

Ensuite, vérifiez la méthode d’authentification utilisée par chacun de vos comptes d’utilisateur MySQL avec 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'utilisateurroot s'authentifie en fait en utilisant le pluginauth_socket. Pour configurer le compteroot afin qu'il s'authentifie avec un mot de passe, exécutez la commandeALTER USER suivante. Assurez-vous de remplacerpassword par un mot de passe fort de votre choix:

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

Ensuite, exécutezFLUSH PRIVILEGES qui dit au serveur de recharger les tables d'octroi et de mettre vos nouvelles modifications en vigueur:

FLUSH PRIVILEGES;

Vérifiez à nouveau les méthodes d'authentification employées par chacun de vos utilisateurs pour confirmer queroot ne s'authentifie plus à l'aide du pluginauth_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 deroot s'authentifie désormais à l'aide d'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.

[[step-3 -—- Installing-php]] == Étape 3 - Installation de PHP

PHP est le composant de votre configuration qui traitera le code pour afficher le contenu dynamique. Il peut exécuter des scripts, se connecter à vos bases de données MySQL pour obtenir des informations et transmettre le contenu traité à votre serveur Web pour l'afficher.

Encore une fois, tirez parti du systèmeapt pour installer PHP. De plus, incluez quelques paquets d’aide cette fois pour que le code PHP puisse s’exécuter sous le serveur Apache et dialoguer avec votre base de données MySQL:

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 lorsqu'un répertoire est demandé. Actuellement, si un utilisateur demande un répertoire au serveur, Apache recherchera d'abord un fichier appeléindex.html. Nous voulons dire au serveur Web de préférer les fichiers PHP aux autres, alors demandez à Apache de rechercher d'abord un fichierindex.php.

Pour ce faire, tapez cette commande pour ouvrir le fichierdir.conf dans un éditeur de texte avec les privilèges root:

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

Il ressemblera à ceci:

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


    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

Déplacez le fichier d'index PHP (mis en évidence ci-dessus) à la première position après la spécificationDirectoryIndex, comme ceci:

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


    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

Lorsque vous avez terminé, enregistrez et fermez le fichier en appuyant surCTRL+X. Confirmez la sauvegarde en tapantY, puis appuyez surENTER pour vérifier l'emplacement de sauvegarde du fichier.

Après cela, redémarrez le serveur Web Apache pour que vos modifications soient reconnues. Faites ceci en tapant ceci:

sudo systemctl restart apache2

Vous pouvez également vérifier l'état du serviceapache2 à l'aide desystemctl:

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 surQ pour quitter cette sortie d'état.

Pour améliorer les fonctionnalités de PHP, vous avez la possibilité d'installer des modules supplémentaires. Pour voir les options disponibles pour les modules et bibliothèques PHP, dirigez les résultats deapt search dansless, 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 surQ pour quitter.

Les résultats sont tous des composants facultatifs que vous pouvez installer. Il vous donnera une brève 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 sur Internet plus d’informations à leur sujet. Vous pouvez également consulter la description longue du paquet en tapant:

apt show package_name

Il y aura beaucoup de sortie, avec un champ appeléDescription qui expliquera plus en détail les fonctionnalités fournies par le module.

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

apt show php-cli

Outre de nombreuses 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 la recherche, vous décidez que vous souhaitez installer un package, vous pouvez le faire en utilisant la commandeapt install comme vous l'avez fait pour les autres logiciels.

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

sudo apt install php-cli

Si vous souhaitez installer plusieurs modules, vous pouvez le faire en listant chacun d'eux, séparés par un espace, en suivant la commandeapt install, comme ceci:

sudo apt install package1 package2 ...

À ce stade, votre pile LAMP est installée et configurée. Avant toute chose, nous vous recommandons de configurer un hôte virtuel Apache sur lequel vous pouvez stocker les détails de la configuration de votre serveur.

[[step-4 -—- setting-up-virtual-hosts-recommended]] == Étape 4 - Configuration des hôtes virtuels (recommandé)

Lorsque vous utilisez le serveur Web Apache, vous pouvez utiliservirtual hosts (similaire aux blocs serveur dans Nginx) pour encapsuler les détails de configuration et héberger plusieurs domaines à partir d'un seul serveur. Nous allons configurer un domaine appeléyour_domain, mais vous devriezreplace this with your own domain name. Pour en savoir plus sur la configuration d'un nom de domaine avec DigitalOcean, consultez nosIntroduction to DigitalOcean DNS.

Apache sur Ubuntu 18.04 a un bloc de 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 siteyour_domain, en laissant/var/www/html en place comme répertoire par défaut à servir si une demande client ne le fait pas ' ne correspond à aucun autre site.

Créez le répertoire pouryour_domain comme suit:

sudo mkdir /var/www/your_domain

Ensuite, attribuez la propriété du répertoire avec la variable d'environnement$USER:

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

Les autorisations de vos racines Web devraient être correctes si vous n'avez pas modifié la valeur de votreunmask, mais vous pouvez vous en assurer en tapant:

sudo chmod -R 755 /var/www/your_domain

Ensuite, créez un exemple de pageindex.html en utilisantnano ou votre éditeur préféré:

nano /var/www/your_domain/index.html

À l'intérieur, ajoutez l'exemple HTML suivant:

/var/www/your_domain/index.html


    
        Welcome to Your_domain!
    
    
        

Success! The your_domain server block is working!

Enregistrez et fermez le fichier lorsque vous avez terminé.

Pour qu'Apache puisse diffuser ce contenu, il est nécessaire de créer un fichier hôte virtuel avec les directives appropriées. 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

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

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


    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

Notez que nous avons mis à jour lesDocumentRoot vers notre nouveau répertoire etServerAdmin vers un e-mail auquel l'administrateur du siteyour_domain peut accéder. Nous avons également ajouté deux directives:ServerName, qui établit le domaine de base qui doit correspondre à cette définition d'hôte virtuel, etServerAlias, qui définit d'autres noms qui doivent correspondre comme s'il s'agissait du nom de base.

Enregistrez et fermez le fichier lorsque vous avez terminé.

Activons le fichier avec l’outila2ensite:

sudo a2ensite your_domain.conf

Désactivez le site par défaut défini dans000-default.conf:

sudo a2dissite 000-default.conf

Ensuite, testons les erreurs de configuration:

sudo apache2ctl configtest

Vous devriez voir la sortie suivante:

OutputSyntax OK

Redémarrez Apache pour implémenter vos modifications:

sudo systemctl restart apache2

Apache devrait maintenant servir votre nom de domaine. Vous pouvez tester cela en accédant à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é. Avant d’apporter des 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.

[[step-5 -—- testing-php-processing-on-your-web-server]] == Étape 5 - Test du traitement PHP sur votre serveur Web

Afin de tester que votre système est correctement configuré 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 votre répertoire racine 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 vierge. Ajoutez le texte suivant, qui est un code PHP valide, dans le fichier:

info.php

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

La page à laquelle vous venez 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. 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, alors votre PHP fonctionne comme prévu.

Vous voudrez probablement supprimer ce fichier après ce test, car il pourrait en fait fournir 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 devez accéder aux informations ultérieurement.

Conclusion

Maintenant que vous avez une pile LAMP installée, vous avez beaucoup de choix pour ce qu'il faut faire ensuite. En gros, 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.

Lors de la prochaine étape, vous devez vous assurer que les connexions à votre serveur Web sont sécurisées en les desservant via HTTPS. L'option la plus simple ici est deuse Let’s Encrypt pour sécuriser votre site avec un certificat TLS / SSL gratuit.

Quelques autres options populaires sont: