Tutoriel sur le serveur LAMP d’Ubuntu 18.04 (LTS) avec Apache, PHP 7.2 et MySQL

LAMP est l’abréviation de Linux, Apache, MySQL, PHP. Ce tutoriel montre comment installer un serveur Web Apache sur un serveur Ubuntu 18.04 LTS (Bionic Beaver) avec PHP 7.2 (mod_php) et la prise en charge de MySQL / MariaDB et comment configurer un certificat SSL avec Let’s encrypt. En outre, j’installerai PHPMyAdmin pour faciliter l’administration de MySQL. Une installation LAMP est une base parfaite pour les systèmes CMS populaires comme Joomla, WordPress ou Drupal.

Remarque préliminaire

Dans ce tutoriel, j’utiliserai le nom d’hôte server1.example.com avec l’adresse IP 192.168.1.100. Ces paramètres peuvent être différents pour toi, tu dois donc les remplacer le cas échéant.

Je te recommande d’utiliser une configuration minimale de serveur Ubuntu comme base pour le tutoriel. Il peut s’agir d’une image de serveur virtuel ou racine avec une installation minimale d’Ubuntu 18.04 provenant d’un hébergeur ou tu peux utiliser notre tutoriel de serveur minimal pour installer un serveur à partir de zéro.

J’exécute toutes les étapes de ce tutoriel avec les privilèges de root, alors assure-toi d’être connecté en tant que root :

sudo -s

1. Installer la base de données MySQL ou MariaDB

Il existe actuellement deux systèmes de base de données MySQL largement utilisés, le serveur classique « MySQL » qui est développé par Oracle et est disponible en version 5.7 maintenant et le fork MySQL appelé MariaDB qui est développé par le développeur original de MySQL, Monty Widenius.

Je vais te montrer comment installer les deux alternatives ci-dessous. Suis simplement le chapitre 1.1 ou 1.2, mais pas les deux. J’utiliserai MySQL 5.7 pour l’image de la machine virtuelle qui peut être téléchargée sur Howtoforge.

1.1 Installer MySQL 5.7

Pour installer MySQL 5.7, exécute cette commande :

apt-get -y install mysql-server mysql-client

Les paquets mysql-server et mysql-client sont des « méta-paquets », ils installent toujours la dernière version de MySQL disponible sur Ubuntu. La dernière version est actuellement MySQL 5.7.

Nous avons déjà défini le mot de passe root pour MySQL pendant l’installation, mais j’aimerais supprimer l’utilisateur anonyme et la base de données de test pour des raisons de sécurité. Exécute la commande mysql_secure_installation ci-dessous pour y parvenir.

mysql_secure_installation

Les questions suivantes te seront posées :

Securing the MySQL server deployment.
Enter password for user root: <-- Enter the MySQL root password
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:
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : <-- y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : <-- y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : <-- y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : <-- y
Success.
All done!

L’installation de MySQL est maintenant sécurisée.

1.2 Installer MariaDB 10

Exécute la commande suivante pour installer MariaDB-server et client :

apt-get -y install mariadb-server mariadb-client

Nous allons maintenant définir un mot de passe root pour MariaDB.

mysql_secure_installation

Les questions suivantes te seront posées :

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

1.3 Teste la connexion root de MySQL/MariaDB

Teste la connexion à MariaDB avec la commande « mysql ».

mysql -u root -p

et saisis le mot de passe root MariaDB que tu as défini ci-dessus. Le résultat devrait être similaire à la capture d’écran ci-dessous :

Test de la connexion à la racine de MySQL sur Ubuntu 18.04 LTS

Pour quitter le shell MySQL/MariaDB, entre la commande « quit » et appuie sur Entrée.

2. Installe le serveur Web Apache

Apache 2 est disponible sous forme de paquet Ubuntu, nous pouvons donc l’installer comme suit :

apt-get -y install apache2

Dirige maintenant ton navigateur vers http://192.168.1.100, et tu devrais voir la page par défaut d’Apache2(ça marche !) :

La page par défaut d'Apache

La racine du document de l’hôte virtuel par défaut d’Apache est /var/www/html sur Ubuntu et le principal fichier de configuration est /etc/apache2/apache2.conf. Le système de configuration estentièrement documenté dans /usr/share/doc/apache2/README.Debian.gz.

3. Installe PHP 7.2

Nous pouvons installer PHP 7.2 et le module PHP d’Apache comme suit :

apt-get -y install php7.2 libapache2-mod-php7.2

Puis redémarre Apache :

systemctl restart apache2

4. Teste PHP et obtiens des détails sur ton installation PHP

La racine du document du site Web par défaut est /var/www/html. Nous allons maintenant créer un petit fichier PHP(info.php) dans ce répertoire et l’appeler dans un navigateur. Le fichier affichera de nombreux détails utiles sur notre installation PHP, comme la version PHP installée.

nano /var/www/html/info.php
<?php
phpinfo();

Change ensuite le propriétaire du fichier info.php pour l’utilisateur et le groupe www-data.

chown www-data:www-data /var/www/html/info.php

Maintenant, nous appelons ce fichier dans un navigateur (par exemple http://192.168.1.100/info.php):

Ubuntu 18.04 PHP 7.2 info

Comme tu le vois, PHP 7.2 fonctionne, et il fonctionne via le gestionnaire Apache 2.0, comme le montre la ligne API du serveur. Si tu fais défiler la page plus bas, tu verras tous les modules qui sont déjà activés dans PHP. MySQL n’y figure pas, ce qui signifie que nous n’avons pas encore la prise en charge de MySQL / MariaDB dans PHP.

5. Obtenir la prise en charge de MySQL / MariaDB en PHP

Pour obtenir la prise en charge de MySQL dans PHP, nous pouvons installer le paquet php7.2-mysql. C’est une bonne idée d’installer aussi d’autres modules PHP, car tu pourrais en avoir besoin pour tes applications. Tu peux rechercher les modules PHP disponibles comme ceci :

apt-cache search php7.2

et

apt-cache search php-

car tous les paquets PHP n’ont pas le numéro de version 7.2 dans leur nom.

Choisis ceux dont tu as besoin et installe-les comme ceci :

apt-get -y install php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php-pear php-imagick php7.2-imap php-memcache  php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-mbstring php-gettext

Redémarre maintenant Apache2 :

systemctl restart apache2

PHP 7.2 avec l'extension MySQL chargée

PHP 7.2 prend désormais en charge MySQL / MariaDB comme le montre phpinfo() ci-dessus.

6. Installe le cache Opcache + APCu PHP pour accélérer PHP

PHP 7 est livré avec un cacheur d’opcode intégré pour mettre en cache et optimiser le code intermédiaire de PHP. Il s’appelle ‘opcache’ et est disponible dans le paquet php7.0-opcache. Il est fortement recommandé d’avoir un Opcache installé pour accélérer ta page PHP. En plus d’opcache, j’installerai APCu qui est un wrapper de compatibilité pour opcache afin de fournir les fonctions du cache APC, un système de cache souvent utilisé dans les versions PHP 5.x et de nombreux systèmes CMS l’utilisent encore.

Opcache et APCu peuvent être installés comme suit :

apt-get -y install php7.2-opcache php-apcu

Ne t’inquiète pas si le programme indique qu’Opcache est déjà installé.

Redémarre maintenant Apache :

systemctl restart apache2

Recharge maintenant http://192.168.1.100/info.php dans ton navigateur et fais de nouveau défiler la page jusqu’à la section des modules. Tu devrais maintenant y trouver de nombreux nouveaux modules :

APC et APCu activés en PHP 7.2

N’oublie pas de supprimer le fichier info.php lorsque tu n’en as plus besoin car il fournit des détails sensibles sur ton serveur. Exécute la commande suivante pour supprimer le fichier.

rm -f /var/www/html/info.php

7. Active le site SSL dans apache

SSL/ TLS est une couche de sécurité permettant de crypter la connexion entre le navigateur Web et ton serveur. Aujourd’hui, la plupart des navigateurs Web commencent à afficher les sites comme non sécurisés lorsque la connexion entre le serveur et le navigateur Web n’est pas cryptée avec SSL. Dans ce chapitre, je vais te montrer comment sécuriser ton site Web avec SSL.

Exécute les commandes suivantes sur ton serveur pour activer la prise en charge de SSL (https://). Exécute :

a2enmod ssl
a2ensite default-ssl

qui active le module SSL et ajoute un lien symbolique dans le dossier /etc/apache2/sites-enabled au fichier /etc/apache2/sites-available/default-ssl.conf pour l’inclure dans la configuration active d’apache. Puis redémarre apache pour activer la nouvelle configuration :

systemctl restart apache2

Teste maintenant la connexion SSL en ouvrant https://192.168.1.100 dans un navigateur Web.

Avertissement sur le certificat SSL auto-signé

Tu recevras un avertissement SSL car le certificat SSL du serveur est un certificat SSL « auto-signé », ce qui signifie que le navigateur ne fait pas confiance à ce certificat par défaut et que tu dois d’abord accepter l’avertissement de sécurité. Après avoir accepté l’avertissement, tu verras la page par défaut d’Apache.

Apache avec SSL activé

Le « cadenas vert » fermé devant l’URL dans le navigateur montre que la connexion est cryptée.

Il y a deux façons de se débarrasser de l’avertissement SSL : soit tu remplaces le certificat SSL auto-signé /etc/ssl/certs/ssl-cert-snakeoil.pem par un certificat SSL officiellement signé que tu achètes auprès d’une autorité SSL, soit tu obtiens un certificat SSL gratuit de Let’s encrypt, que je décrirai au chapitre 8.

8. Obtenir un certificat SSL gratuit de Let’s Encrypt

La première étape pour sécuriser le site Web avec un certificat SSL de Let’s Encrypt est d’installer le paquet python3-certbot-apache. Exécute la commande suivante :

apt-get -y install python3-certbot-apache

Dans l’étape suivante, nous allons demander un certificat SSL à Let’s Encrypt en utilisant le programme client certbot. Pendant ce processus, le serveur Let’s Encrypt essaie de se connecter à ton serveur via le nom de domaine que tu as fourni à la commande certbot. Il est important que ce nom de domaine pointe déjà vers ton serveur dans le DNS afin que le site Web soit déjà accessible par son nom de domaine sur le port 80 (http). Si le site Web n’est pas joignable depuis Internet, la création du certificat SSL Let’s Encrypt échouera.

Avant de commencer à créer le certificat SSL, définis le nom de domaine dans le fichier de configuration vhost. Ouvre le fichier vhost par défaut avec un éditeur :

nano /etc/apache2/sites-available/000-default.conf

et ajoute la ligne :

ServerName example.com

Juste en dessous de la ligne ‘DocumentRoot’. Remplace exemple.com par le nom de domaine de ton propre site Web.

Crée ensuite le certificat SSL avec cette commande :

certbot --apache -d example.com

Remplace exemple.com par ton nom de domaine ici aussi. La commande lancera un assistant qui te posera plusieurs questions.

Saisis l’adresse e-mail à laquelle l’administrateur responsable de ce site Web peut être joint.

Définir l'adresse e-mail

Accepte les termes et conditions de l’autorité SSL de Let’s Encrypt.

Accepte les termes et conditions

Certbot te demandera maintenant si tu souhaites partager ton adresse e-mail avec l’Electronic Frontier Foundation. Choisis ici ce que tu préfères.

Adresse e-mail FSF

Choisis ensuite si tu veux rediriger automatiquement les demandes non-SSL vers https://. Je vais choisir oui ici pour éviter les problèmes de contenu dupliqué lorsque le site Web est disponible en version http:// et https://.

Redirige les demandes HTTP

Le certificat SSL a été émis avec succès.

Le certificat SSL a été émis avec succès

Lorsque tu accèdes maintenant au site Web avec un navigateur, tu seras automatiquement redirigé vers SSL et le cadenas vert devant la barre d’URL dans le navigateur montre que nous utilisons maintenant un certificat SSL de confiance.

Site Web protégé par SSL

8.1 Cryptons le renouvellement automatique

Les certificats SSL de Let’s Encrypt ne sont valables que pour une courte période de 80 jours. C’est pourquoi il faut un cronjob pour renouveler automatiquement les certificats SSL qui exécute la commande certbot –renew commande.

Ce cronjob se configure automatiquement lorsque tu installes certbot, le fichier cron est le suivant/etc/cron.d/certbot. Il n’y a donc rien de plus à faire ici. Si tu veux savoir à quoi ressemble le cronjob, exécute la commande :

/etc/cron.d/certbot

Le résultat est le suivant :

[email protected]:~# cat /etc/cron.d/certbot
# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc. Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

9. Installer phpMyAdmin

phpMyAdmin est une interface Web grâce à laquelle tu peux gérer tes bases de données MySQL. C’est une bonne idée de l’installer :

apt-get -y install phpmyadmin

IMPORTANT : L’installateur apt va maintenant te poser plusieurs questions, l’une d’entre elles étant de sélectionner le type de serveur Web. Une erreur fréquente est que le type de serveur Web est juste surligné mais pas sélectionné. Pour sélectionner un élément dans un menu apt, tu dois appuyer sur la barre d’espacement du clavier après avoir navigué jusqu’à l’élément avec les touches de tabulation ou de curseur. Il ne suffit pas de le mettre en surbrillance !

Tu verras les questions suivantes :

Web server to configure automatically: <-- Select the option: apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

9.1 Accès racine à PHPMyAdmin

MariaDB et MySQL activent par défaut un plugin appelé « unix_socket » pour l’utilisateur root. Ce plugin empêche que l’utilisateur root puisse se connecter à PHPMyAdmin et que les connexions TCP à MySQL fonctionnent pour l’utilisateur root. Pour obtenir un utilisateur ayant des privilèges pour créer d’autres utilisateurs et bases de données dans PHPMyAdmin, je vais créer un nouvel utilisateur MySQL avec le nom « admin » avec les mêmes privilèges que l’utilisateur root.

Connecte-toi à la base de données MySQL en tant qu’utilisateur root sur le shell :

mysql -u root

Crée un nouvel utilisateur avec le nom « admin » et le mot de passe « howtoforge ». Remplace le mot de passe « howtoforge » par un mot de passe sécurisé dans les commandes ci-dessous !

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

Ensuite, tu peux accéder à phpMyAdmin sous http://192.168.1.100/phpmyadmin/ :

Connexion à phpMyAdmin

Connecte-toi en tant qu'utilisateur administratif à phpMyAdmin

10 Téléchargement de l’image de la machine virtuelle de ce tutoriel

Ce tutoriel est disponible sous forme d’image de machine virtuelle prête à l’emploi au format ovf/ova qui est compatible avec VMWare et Virtualbox. L’image de la machine virtuelle utilise les identifiants de connexion suivants :

Connexion SSH / Shell

Nom d’utilisateur : administrator
Mot de passe : howtoforge

Cet utilisateur a des droits sudo.

Connexion MySQL

Nom d’utilisateur : root
Mot de passe : howtoforge

L’IP de la VM est 192.168.1.100, elle peut être modifiée dans le fichier /etc/network/interfaces. Change tous les mots de passe ci-dessus pour sécuriser la machine virtuelle.

11 Liens

Vous aimerez aussi...