GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Tutoriel du serveur Ubuntu 16.04 (LTS) LAMP avec Apache, PHP 7 et MySQL

LAMP est l'abréviation de L inux, A paché, M ySQL, P HP. Ce tutoriel montre comment vous pouvez installer un serveur Web Apache sur un serveur Ubuntu 16.04 LTS (Xenial Xerus) avec le support de PHP 7 (mod_php) et MySQL / MariaDB et comment configurer un certificat SSL avec Let's encrypt. De plus, j'installerai PHPMyAdmin pour faciliter l'administration de MySQL. Une configuration 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 différer pour vous, vous devez donc les remplacer le cas échéant.

Je recommande d'utiliser une configuration minimale de serveur Ubuntu comme base pour le didacticiel, qui peut être une image de serveur virtuel ou racine avec une installation minimale d'Ubuntu 16.04 d'une société d'hébergement Web ou vous utilisez notre didacticiel de serveur minimal pour installer un serveur à partir de zéro.

J'exécute toutes les étapes de ce didacticiel avec les privilèges root, alors assurez-vous d'être connecté en tant que root :

sudo su

1. Installation de 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 "MySQL" classique qui est développé par Oracle et est maintenant disponible en version 5.7 et le fork MySQL nommé MariaDB qui est développé par le développeur MySQL original Monty Widenius.

Je vais vous montrer comment installer les deux alternatives ci-dessous. Suivez 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 depuis Howtoforge.

1.1 Installer MySQL 5.7

Pour installer MySQL 5.7, exécutez cette commande :

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

Les packages mysql-server et mysql-client sont appelés "méta-packages", 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 lors de l'installation, mais je souhaite supprimer l'utilisateur anonyme et la base de données de test pour des raisons de sécurité. Exécutez la commande mysql_secure_installation ci-dessous pour y parvenir.

mysql_secure_installation

Ces questions vous seront posées :

Sécuriser le déploiement du serveur MySQL.
Entrez le mot de passe pour l'utilisateur root :<-- Entrez le mot de passe root MySQL
VALIDATE PASSWORD PLUGIN peut être utilisé pour tester les mots de passe
et améliorer la sécurité. Il vérifie la force du mot de passe
et permet aux utilisateurs de définir uniquement les mots de passe suffisamment sécurisés. Souhaitez-vous configurer le plug-in VALIDATE PASSWORD ?
Appuyez sur y|Y pour Oui, sur n'importe quelle autre touche pour Non :
Utilisation du mot de passe existant pour root.
Changer le mot de passe pour root ? ((Appuyez sur y|Y pour Oui, n'importe quelle autre touche pour Non) : <-- Choisissez 'y' ici si vous souhaitez activer la validation du mot de passe, je n'ai pas besoin de cette fonction, donc je choisis 'n' ici.
... ignoré.
Par défaut, une installation MySQL a un utilisateur anonyme,
permettant à quiconque de se connecter à MySQL sans avoir
à créer un compte utilisateur. Ceci est uniquement destiné à des
tests et à rendre l'installation un peu plus fluide.
Vous devez les supprimer avant de passer à un environnement de
production.
Supprimer les utilisateurs anonymes ? (Appuyez sur y|Y pour Oui, n'importe quelle autre touche pour Non) :<-- y
Succès.

Normalement, root ne devrait être autorisé à se connecter qu'à partir de
'localhost'. Cela garantit que personne ne peut deviner
le mot de passe root à partir du réseau.
Interdire la connexion root à distance ? (Appuyez sur y|Y pour Oui, n'importe quelle autre touche pour Non) :<-- y
Succès.
Par défaut, MySQL est fourni avec une base de données nommée "test" à laquelle
n'importe qui peut accéder. Ceci est également destiné uniquement aux tests,
et doit être supprimé avant de passer à un environnement de production
.

Supprimer la base de données de test et y accéder ? (Appuyez sur y|Y pour Oui, n'importe quelle autre touche pour Non) :<-- y
- Suppression de la base de données de test...
Succès.
- Suppression des privilèges sur la base de données de test...
Réussite.
Le rechargement des tables de privilèges garantira que toutes les modifications
apportées jusqu'à présent prendront effet immédiatement.
Recharger les tables de privilèges maintenant ? (Appuyez sur y|Y pour Oui, n'importe quelle autre touche pour Non) :<-- y
Succès.
Tout est fait !

La configuration de MySQL est maintenant sécurisée.

1.2 Installer MariaDB 10

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

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

Maintenant, nous définissons un mot de passe root pour MariaDB.

mysql_secure_installation

Ces questions vous seront posées :

Entrez le mot de passe actuel pour root (entrez pour aucun) :<-- appuyez sur entrée
Définir le mot de passe root ? [O/n] <-- y
Nouveau mot de passe :<-- Saisissez ici le nouveau mot de passe root MariaDB
Saisissez à nouveau le nouveau mot de passe :<-- Répétez le mot de passe
Supprimer les utilisateurs anonymes ? [O/n] <-- o
Interdire la connexion root à distance ? [O/n] <-- o
Recharger les tables de privilèges maintenant ? [O/n] <-- o

Testez la connexion à MariaDB avec la "commande mysql"

mysql -u root -p

et entrez le mot de passe root MariaDB que vous avez défini ci-dessus. Le résultat devrait ressembler à la capture d'écran ci-dessous :

Pour quitter le shell MariaDB, entrez la commande "quit" et appuyez sur entrée.

2. Installer le serveur Web Apache

Apache 2 est disponible sous forme de package Ubuntu, nous pouvons donc l'installer comme ceci :

apt-get -y install apache2

Dirigez maintenant votre navigateur vers http://192.168.1.100, et vous devriez voir la page par défaut d'Apache2 (Ça marche !) :

La racine du document du vhost par défaut apache est /var/www/html sur Ubuntu et le fichier de configuration principal est /etc/apache2/apache2.conf. Le système de configuration est entièrement documenté dans /usr/share/doc/apache2/README.Debian.gz .

3. Installer PHP 7

Nous pouvons installer PHP 7 et le module Apache PHP comme suit :

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

Redémarrez ensuite Apache :

systemctl redémarre apache2

4. Testez PHP et obtenez des détails sur votre 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, tels que la version PHP installée.

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

Changez ensuite le propriétaire du fichier info.php en utilisateur et 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) :

Comme vous le voyez, PHP 7.0 fonctionne, et il fonctionne via le gestionnaire Apache 2.0, comme indiqué dans la ligne API du serveur. Si vous faites défiler plus bas, vous verrez tous les modules déjà activés dans PHP5. MySQL n'y figure pas, ce qui signifie que nous n'avons pas encore de support MySQL/MariaDB en PHP.

5. Bénéficiez de la prise en charge de MySQL / MariaDB en PHP

Pour obtenir la prise en charge de MySQL en PHP, nous pouvons installer le package php7.0-mysql. C'est une bonne idée d'installer d'autres modules PHP, car vous pourriez en avoir besoin pour vos applications. Vous pouvez rechercher les modules PHP disponibles comme ceci :

apt-cache recherche php7.0

Choisissez ceux dont vous avez besoin et installez-les comme ceci :

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

Redémarrez maintenant Apache2 :

systemctl redémarre apache2

PHP 7 prend désormais en charge MySQL / MariaDB, comme indiqué dans phpinfo() ci-dessus.

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

PHP 7 est livré avec un cache d'opcode intégré pour la mise en cache et l'optimisation du code intermédiaire PHP, il porte le nom "opcache" et est disponible dans le package php7.0-opcache. Il est fortement recommandé d'avoir un Opcache installé pour accélérer votre page PHP. Outre opcache, j'installerai APCu qui est un wrapper de compatibilité pour opcache pour fournir les fonctions du cache APC, un système de mise en 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.0-opcache php-apcu

Ne vous inquiétez pas s'il indique qu'Opcache est déjà installé.

Maintenant, redémarrez Apache :

systemctl redémarre apache2

Rechargez maintenant http://192.168.1.100/info.php dans votre navigateur et faites défiler à nouveau jusqu'à la section des modules. Vous devriez maintenant y trouver plein de nouveaux modules :

N'oubliez pas de supprimer le fichier info.php lorsque vous n'en avez plus besoin car il fournit des détails sensibles sur votre serveur. Exécutez la commande suivante pour supprimer le fichier.

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

7. Activer le site Web SSL dans apache

SSL/TLS est une couche de sécurité pour crypter la connexion entre le navigateur Web et votre serveur. La plupart des navigateurs Web commencent à afficher des sites comme non sécurisés aujourd'hui lorsque la connexion entre le serveur et le navigateur Web n'est pas cryptée avec SSL. Dans ce chapitre, je vais vous montrer comment sécuriser votre site Web avec SSL.

Exécutez les commandes suivantes sur votre serveur pour activer la prise en charge SSL (https://). Exécuter :

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 apache active. Redémarrez ensuite apache pour activer la nouvelle configuration :

systemctl redémarre apache2

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

Vous recevrez un avertissement SSL car le certificat SSL du serveur est un certificat SSL "auto-signé", cela signifie que le navigateur ne fait pas confiance à ce certificat par défaut et vous devez d'abord accepter l'avertissement de sécurité. Après avoir accepté l'avertissement, vous verrez la page apache par défaut.

Le "cadenas vert" fermé devant l'URL dans le navigateur indique que la connexion est cryptée.

Il existe deux façons de se débarrasser de l'avertissement SSL :soit remplacer le certificat SSL auto-signé /etc/ssl/certs/ssl-cert-snakeoil.pem par un certificat SSL officiellement signé que vous achetez auprès d'une autorité SSL, soit vous obtenez un certificat SSL gratuit de Let's encrypt, que je décrirai au chapitre 8.

8. Obtenez un certificat SSL gratuit de Let's Encrypt

La première étape pour sécuriser le site Web avec un certificat SSL Let's Encrypt consiste à installer le package python-letsencrypt-apache. Exécutez la commande suivante :

apt-get -y install python-letsencrypt-apache

Dans l'étape suivante, nous demanderons un certificat SSL à Let's Encrypt, au cours de ce processus, le serveur Let's Encrypt essaie de se connecter à votre serveur via le nom de domaine que vous fournissez à la commande letsencrypt. Il est important que ce nom de domaine pointe déjà vers votre serveur dans 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 accessible depuis Internet, la création du certificat SSL Let's Encrypt échouera.

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

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

et ajoutez la ligne :

NomServeur example.com

Juste en dessous de la ligne 'DocumentRoot'. Remplacez example.com par le nom de domaine de votre propre site Web.

Créez ensuite le certificat SSL avec cette commande :

letsencrypt --apache -d example.com

Remplacez example.com par votre nom de domaine ici encore. La commande lancera un assistant qui vous posera plusieurs questions.

Entrez l'adresse e-mail à laquelle l'administrateur responsable de ce site Web peut être contacté.

Acceptez les termes et conditions de l'autorité Let's Encrypt SSL.

Choisissez si vous souhaitez rediriger automatiquement les requêtes non SSL vers https://. Je sélectionnerai oui ici pour éviter les problèmes de contenu en double lorsque le site Web est disponible en version http:// et https://.

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

Lorsque vous accédez maintenant au site Web avec un navigateur, vous serez automatiquement redirigé vers SSL et le cadenas vert devant la barre d'URL du navigateur indique que nous utilisons maintenant un certificat SSL de confiance.

8.1 Chiffrez le renouvellement automatique

Les certificats SSL Let's Encrypt sont valides pour une courte période de 80 jours seulement. Par conséquent, nous allons configurer un cronjob maintenant pour renouveler automatiquement le certificat SSL si nécessaire. La commande est 'letsencrypt renouveler'.

Configurez une tâche cron pour le renouvellement automatique LE. Exécuter :

crontab -e

pour ouvrir la crontab racine dans un éditeur. Insérez la ligne suivante à la fin du fichier :

0 1 * * * /usr/bin/letsencrypt renouveler &> /dev/null

enregistrez le fichier, cela activera le cronjob. Ce cronjob appellera la commande de renouvellement Let's Encrypt tous les soirs à 1h du matin. La commande renouvellera le certificat SSL uniquement si nécessaire (30 jours avant son expiration), il n'y a aucun problème à l'exécuter tous les soirs.

9. Installez phpMyAdmin

phpMyAdmin est une interface Web à travers laquelle vous pouvez gérer vos bases de données MySQL. C'est une bonne idée de l'installer :

apt-get -y install phpmyadmin

IMPORTANT :Le programme d'installation d'apt vous posera maintenant plusieurs questions, l'une d'entre elles consiste à sélectionner le type de serveur Web. Une erreur courante est que le type de serveur Web est simplement mis en surbrillance mais pas sélectionné. Pour sélectionner un élément dans un menu apt, vous devez appuyer sur la barre d'espace du clavier après avoir navigué jusqu'à l'élément avec les touches de tabulation ou de curseur. Le souligner ne suffit pas !

Vous verrez les questions suivantes :

Serveur Web à configurer automatiquement : <-- Sélectionnez l'option :apache2
Configurer la base de données pour phpmyadmin avec dbconfig-common ? <-- Oui
Mot de passe de l'application MySQL pour phpmyadmin :<-- Appuyez sur Entrée, apt créera automatiquement un mot de passe aléatoire.

9.1 Accès root à PHPMyAdmin avec MariaDB

L'étape suivante est requise pour les installations de MariaDB uniquement, si vous utilisez MySQL 5.7, ignorez cette étape.

MariaDB active un plugin appelé "unix_socket" pour l'utilisateur root par défaut, 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 avec 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.

Connectez-vous à la base de données MySQL en tant qu'utilisateur root sur le shell :

mysql -u racine

Créez un nouvel utilisateur avec le nom "admin" et le mot de passe "howtoforge". Remplacez le mot de passe "howtoforge" par un mot de passe sécurisé dans les commandes ci-dessous !

CRÉER L'UTILISATEUR 'admin'@'localhost' IDENTIFIÉ PAR 'howtoforge' ;
ACCORDER TOUS LES PRIVILÈGES SUR *.* À 'admin'@'localhost' AVEC L'OPTION GRANT ;
FLUSH PRIVILÈGES ;
sortir

Ensuite, vous pouvez accéder à phpMyAdmin sous http://192.168.1.100/phpmyadmin/ :

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

Ce didacticiel est disponible sous forme d'image de machine virtuelle prête à l'emploi au format ovf/ova compatible avec VMWare et Virtualbox. L'image de la machine virtuelle utilise les informations de connexion suivantes :

Connexion SSH/shell

Nom d'utilisateur :administrateur
Mot de passe :howtoforge

Cet utilisateur a les 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 changée dans le fichier /etc/network/interfaces. Veuillez modifier tous les mots de passe ci-dessus pour sécuriser la machine virtuelle.

  • Apache :http://httpd.apache.org/
  • PHP :http://www.php.net/
  • MySQL :http://www.mysql.com/
  • MariaDB :https://mariadb.com/
  • Ubuntu :http://www.ubuntu.com/
  • phpMyAdmin :http://www.phpmyadmin.net/

Ubuntu
  1. Installation de WordPress sur Ubuntu Linux avec Apache et MySQL

  2. Tutoriel du serveur Ubuntu 14.10 LAMP avec Apache 2, PHP 5 et MySQL (MariaDB)

  3. Tutoriel du serveur Ubuntu 15.04 LAMP avec Apache 2, PHP 5 et MariaDB (au lieu de MySQL)

  4. Comment installer Apache, MySQL, PHP (LAMP) sur Ubuntu 16.04 LTS

  5. Comment configurer Opencart avec LAMP (PHP, Apache, Mariadb) sur Ubuntu 20.04

Installer la pile Apache, MySQL, PHP (LAMP) sur Ubuntu 18.04 LTS

Installez Apache, MySQL, PHP (pile LAMP) sur Ubuntu 20.04 LTS

Comment installer Apache, MySQL, PHP sur Ubuntu 18.04 LTS

Comment installer Linux, Apache, MySQL et PHP (LAMP) sur un serveur cloud Ubuntu 20.04

Comment installer Linux, Apache, MySQL et PHP (LAMP) sur un serveur cloud Ubuntu 12.04

Comment installer LAMP sur Ubuntu 15.10 (Linux, Apache, MySQL et PHP)