Didacticiel : Installation d'un serveur web LAMP sur Amazon Linux 2
Les procédures suivantes vous aident à installer un serveur web Apache avec PHP et le support MariaDB
Si vous essayez de configurer un serveur Web LAMP sur une autre distribution, comme Ubuntu ou Red Hat Enterprise Linux, ce tutoriel ne fonctionnera pas. Pour Amazon Linux AMI, veuillez consulter Didacticiel : Installer un serveur Web LAMP sur l'Amazon Linux AMI. Pour Ubuntu, consultez la documentation de la communauté Ubuntu suivante : ApachemySQLPHP
Option : Effectuer ce tutoriel en utilisant Automation
Pour effectuer ce tutoriel en utilisant AWS Systems Manager Automation au lieu des tâches suivantes, exécutez le document Automation AWSDocs-InstallALAMPServer-AL2
Tâches
Étape 1 : Préparer le serveur LAMP
Prérequis
-
Ce tutoriel suppose que vous avez déjà lancé une nouvelle instance à l'aide d'Amazon Linux 2 avec un nom DNS public que l'on peut atteindre à partir d'Internet. Pour de plus amples informations, veuillez consulter Étape 1 : Lancer une instance. Vous devez aussi avoir configuré votre groupe de sécurité pour permettre les connexions SSH (port 22), HTTP (port 80) et HTTPS (port 443). Pour obtenir plus d'informations sur ces conditions préalables, consultez le tutoriel Autoriser le trafic entrant pour vos instances Linux.
-
La procédure suivante installe la dernière version PHP disponible sur Amazon Linux 2, actuellement PHP 7.2. Si vous prévoyez d'utiliser d'autres applications PHP que celles décrites dans ce tutoriel, vous pouvez vérifier qu'elles sont compatibles avec PHP 7.2.
Remarque : ce package d'installation est fourni avec Mariadb (lamp-mariadb10.2-php7.2). Un certain nombre de vulnérabilités antérieures dans php7.2 ont depuis été corrigées via rétroportages
Pour préparer le serveur LAMP
-
Pour vous assurer que tous vos packages logiciels sont mis à jour, effectuez une mise à jour logicielle rapide sur votre instance. Ce processus peut prendre quelques minutes, mais il est important pour vous assurer que vous disposez des dernières mises à jour de sécurité et des nouveaux correctifs de bogues.
L'option
-y
installe les mises à jour sans demander de confirmation. Si vous souhaitez examiner les mises à jour avant l'installation, vous pouvez omettre cette option.[ec2-user ~]$
sudo yum update -y
-
Installez les référentiels supplémentaires Amazon Linux
lamp-mariadb10.2-php7.2
etphp7.2
pour obtenir les dernières versions des packages LAMP MariaDB et PHP pour Amazon Linux 2.[ec2-user ~]$
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
Si vous recevez l'erreur
sudo: amazon-linux-extras: command not found
, votre instance n'a pas été lancée avec une AMI Amazon Linux 2 (vous utilisez peut-être l'AMI Amazon Linux). Vous pouvez afficher votre version d'Amazon Linux avec la commande suivantecat /etc/system-release
Pour configurer un serveur web LAMP sur Amazon Linux AMI, consultez Didacticiel : Installer un serveur Web LAMP sur l'Amazon Linux AMI.
-
Maintenant que votre instance est à jour, vous pouvez installer le serveur web MariaDB et les packages logiciels PHP.
Utilisez la commande yum install pour installer plusieurs packages logiciels et toutes les dépendances associées au même moment.
[ec2-user ~]$
sudo yum install -y httpd mariadb-server
Vous pouvez afficher les versions actuelles de ces packages avec la commande suivante :
yum info
package_name
-
Démarrez le serveur web Apache.
[ec2-user ~]$
sudo systemctl start httpd
-
Utilisez la commande systemctl pour configurer le serveur Web Apache afin qu'il soit lancé à chaque démarrage système.
[ec2-user ~]$
sudo systemctl enable httpd
Vous pouvez vérifier que httpd est activé en exécutant la commande suivante :
[ec2-user ~]$
sudo systemctl is-enabled httpd
-
Ajoutez une règle de sécurité pour autoriser les connexions HTTP entrantes (port 80) à votre instance si vous ne l'avez pas déjà fait. Par défaut, un groupe de sécurité launch-wizard-
N
a été configuré pour votre instance lors de l'initialisation. Ce groupe contient une règle unique pour autoriser les connexions SSH.Ouvrez la console Amazon EC2 à l'adresse https://console.aws.amazon.com/ec2/
. Choisissez instances et sélectionnez votre instance.
-
Sous l'onglet Sécurité, affichez les règles entrantes. Vous devriez voir la règle suivante :
Port range Protocol Source 22 tcp 0.0.0.0/0
Avertissement L'utilisation de
0.0.0.0/0
permet à toutes les adresses IPv4 d'accéder à votre instance à l'aide du protocole SSH. Cette solution est acceptable pour une brève durée dans un environnement de test, mais n'est pas sécurisée pour les environnements de production. Dans un environnement de production, vous autorisez uniquement l'accès à votre instance pour une adresse IP ou une plage d'adresses spécifiques. -
Choisissez le lien pour le groupe de sécurité. En utilisant les procédures de Ajouter des règles à un groupe de sécurité, ajoutez une nouvelle règle de sécurité entrante avec les valeurs suivantes :
-
Type : HTTP
-
Protocole : TCP
-
Plage de ports : 80
-
Source : Personnalisé
-
-
Testez votre serveur web. Dans un navigateur web, saisissez l'adresse DNS publique (ou l'adresse IP publique) de votre instance. S'il n'existe aucun contenu dans
/var/www/html
, vous devriez voir la page test Apache. Vous pouvez obtenir le DNS public de votre instance en utilisant la console Amazon EC2 (vérifiez la colonne DNS public ; si cette colonne est masquée, choisissez l'icône Afficher/Masquer les colonnes (icône en forme d'engrenage) et sélectionnez DNS public).Vérifiez que le groupe de sécurité de l'instance contient une règle autorisant le trafic HTTP sur le port 80. Pour de plus amples informations, veuillez consulter Ajouter des règles à un groupe de sécurité.
Important Si vous n'utilisez pas Amazon Linux, il se peut que vous deviez aussi configurer le pare-feu sur votre instance pour autoriser ces connexions. Pour obtenir plus d'informations sur la configuration du pare-feu, consultez la documentation de votre distribution spécifique.
La commande httpd traite les fichiers qui sont conservés dans un répertoire appelé racine du document Apache. La racine du document Apache d'Amazon Linux est /var/www/html
qui est détenu par défaut par la racine.
Pour autoriser le compte ec2-user
à manipuler les fichiers de ce répertoire, vous devez modifier la propriété et les autorisations du répertoire. Il existe plusieurs façons d'accomplir cette tâche. Dans ce didacticiel, vous ajoutez l'utilisateur ec2-user
au groupe apache
pour donner au groupe apache
la propriété du répertoire /var/www
et attribuer les autorisations d'écriture au groupe.
Pour définir les autorisations sur les fichiers
-
Ajoutez votre utilisateur (dans ce cas,
ec2-user
) au groupeapache
.[ec2-user ~]$
sudo usermod -a -G apache
ec2-user
-
Déconnectez-vous, puis reconnectez-vous pour sélectionner le nouveau groupe, puis vérifiez votre adhésion.
-
Déconnectez-vous (utilisez la commande exit ou fermez la fenêtre de terminal) :
[ec2-user ~]$
exit
-
Pour vérifier votre adhésion au groupe
apache
, reconnectez-vous à votre instance, puis exécutez la commande suivante :[ec2-user ~]$
groups
ec2-user adm wheel apache systemd-journal
-
-
Remplacez la propriété de groupe de
/var/www
et son contenu par le groupeapache
.[ec2-user ~]$
sudo chown -R ec2-user:apache /var/www
-
Pour ajouter des autorisations d'écriture de groupe et définir l'ID de groupe pour les futurs sous-répertoires, modifiez les autorisations sur les répertoires de
/var/www
et ses sous-répertoires.[ec2-user ~]$
sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
-
Pour ajouter des autorisations d'écriture de groupe, modifiez de façon récursive les autorisations sur les fichiers de
/var/www
et ses sous-répertoires :[ec2-user ~]$
find /var/www -type f -exec sudo chmod 0664 {} \;
Maintenant, ec2-user
(et tous les futurs membres du groupe apache
) peut ajouter, supprimer et modifier les fichiers à la racine du document Apache. Vous pouvez ainsi ajouter du contenu, tel qu'un site Web statique ou une application PHP.
Pour sécuriser votre serveur web (facultatif)
Un serveur web exécutant le protocole HTTP ne fournit aucune sécurité de transport pour les données qu'il envoie ou reçoit. Lorsque vous vous connectez à un serveur HTTP via un navigateur Web, les URL que vous visitez, le contenu des pages web que vous recevez et le contenu (y compris les mots de passe) de tous les formulaires HTML que vous envoyez peuvent être vus par des personnes malveillantes sur le chemin d'accès réseau. Les bonnes pratiques en matière de sécurisation de votre serveur web consistent à installer la prise en charge HTTPS (HTTP Secure), qui protège vos données grâce au chiffrement SSL/TLS.
Pour plus d'informations sur l'activation de HTTPS sur votre serveur, consultez Didacticiel : Configurer SSL/TLS sur Amazon Linux 2.
Étape 2 : Tester votre serveur LAMP
Si votre serveur est installé et en cours d'exécution, et que vos autorisations sur les fichiers sont correctement définies, votre compte ec2-user
doit pouvoir créer un fichier PHP simple dans le répertoire /var/www/html
qui est disponible à partir d'Internet.
Pour tester votre serveur LAMP
-
Créez un fichier PHP à la racine du document Apache.
[ec2-user ~]$
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
Si l'erreur « Permission denied » s'affiche lorsque vous essayez d'exécuter cette commande, essayez de vous déconnecter et de vous reconnecter pour récupérer les autorisations d'un groupe que vous avez configurées dans Pour définir les autorisations sur les fichiers.
-
Dans un navigateur web, saisissez l'URL du fichier que vous venez de créer. Cette URL est l'adresse DNS publique de votre instance suivie par une barre oblique et le nom du fichier. Exemples :
http://
my.public.dns.amazonaws.com
/phpinfo.phpVous devriez voir la page d'informations PHP:
Si vous ne voyez pas cette page, vérifiez que le fichier
/var/www/html/phpinfo.php
a été créé correctement à l'étape précédente. Vous pouvez également vérifier que les packages requis ont été installés avec la commande suivante.[ec2-user ~]$
sudo yum list installed httpd mariadb-server php-mysqlnd
Si l'un des packages requis n'est pas présent dans votre sortie, installez-les avec la commande sudo yum install
package
. Vérifiez également que les référentiels supplémentairesphp7.2
etlamp-mariadb10.2-php7.2
sont activés dans la sortie de la commande amazon-linux-extras. -
Supprimez le fichier
phpinfo.php
. Même si ces informations peuvent vous être utiles, elles ne doivent pas être diffusées sur Internet pour des raisons de sécurité.[ec2-user ~]$
rm /var/www/html/phpinfo.php
Vous devriez maintenant avoir un serveur web LAMP entièrement fonctionnel. Si vous ajoutez un contenu à la racine du document Apache à l'emplacement /var/www/html
, vous devez pouvoir voir ce contenu à l'adresse du DNS public de votre instance.
Étape 3 : Sécuriser le serveur de base de données
L'installation par défaut du serveur MariaDB possède plusieurs fonctions qui sont parfaites pour les tests et le développement, mais elles devraient être désactivées ou supprimées des serveurs de production. La commande mysql_secure_installation vous guide à travers le processus de paramétrage d'un mot de passe racine et de suppression des fonctions non sécurisées de votre installation. Même si vous ne comptez pas utiliser le serveur MariaDB, nous vous recommandons de suivre cette procédure.
Pour sécuriser le serveur MariaDB
-
Démarrez le serveur MariaDB.
[ec2-user ~]$
sudo systemctl start mariadb
-
Exécutez mysql_secure_installation.
[ec2-user ~]$
sudo mysql_secure_installation
-
A l'invite, saisissez un mot de passe pour le compte racine.
-
Saisissez le mot de passe racine actuel. Par défaut, le compte racine n'a pas de mot de passe défini. Appuyez sur Entrée.
-
Tapez
Y
pour définir un mot de passe et saisissez deux fois un mot de passe sécurisé. Pour plus d'informations sur la création d'un mot de passe fiable, consultez https://identitysafe.norton.com/password-generator/. Assurez-vous de stocker ce mot de passe en lieu sûr. La mesure la plus simple pour sécuriser votre base de données consiste à définir un mot de passe racine pour MariaDB. Lorsque vous concevez ou installez une application reposant sur une base de données, vous devez généralement créer un utilisateur de services de base de données pour cette application et éviter d'utiliser le compte racine, sauf pour administrer la base de données.
-
-
Tapez
Y
pour supprimer les comptes d'utilisateur anonymes. -
Tapez
Y
pour désactiver la connexion racine à distance. -
Tapez
Y
pour supprimer la base de données de test. -
Tapez
Y
pour recharger les tableaux de privilèges et enregistrer vos changements.
-
-
(Facultatif) Si vous ne comptez pas utiliser le serveur MariaDB tout de suite, arrêtez-le. Vous pouvez le redémarrer lorsque vous en avez de nouveau besoin.
[ec2-user ~]$
sudo systemctl stop mariadb
-
(Facultatif) Si vous voulez que le serveur MariaDB soit lancé à chaque démarrage, saisissez la commande suivante.
[ec2-user ~]$
sudo systemctl enable mariadb
Étape 4 : (Facultatif) Installer phpMyAdmin
phpMyAdminphpMyAdmin
sur votre instance Amazon Linux.
Nous ne vous recommandons pas d'utiliser phpMyAdmin
pour accéder à un serveur LAMP, sauf si vous avez activé SSL/TLS dans Apache. Sinon, votre mot de passe administrateur de base de données et d'autres données sont transmises de façon non sécurisée sur Internet. Pour accéder à des recommandations de sécurité des développeurs, consultez Securing your phpMyAdmin installation
Pour installer phpMyAdmin
-
Installez les dépendances obligatoires.
[ec2-user ~]$
sudo yum install php-mbstring php-xml -y
-
Redémarrez Apache.
[ec2-user ~]$
sudo systemctl restart httpd
-
Redémarrez
php-fpm
.[ec2-user ~]$
sudo systemctl restart php-fpm
-
Accédez à la racine du document Apache sur
/var/www/html
.[ec2-user ~]$
cd /var/www/html
-
Sélectionnez un package source pour la dernière version de phpMyAdmin sur https://www.phpmyadmin.net/downloads
. Pour télécharger le fichier directement sur votre instance, copiez le lien et collez-le dans une commande wget, comme dans cet exemple : [ec2-user html]$
wget
https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
-
Créez un dossier
phpMyAdmin
et extrayez le package dans celui-ci avec la commande suivante.[ec2-user html]$
mkdir phpMyAdmin && tar -xvzf
phpMyAdmin-latest-all-languages.tar.gz
-C phpMyAdmin --strip-components 1 -
Supprimez le tarball
phpMyAdmin-latest-all-languages.tar.gz
.[ec2-user html]$
rm
phpMyAdmin-latest-all-languages.tar.gz
-
(Facultatif) Si le serveur MySQL n'est pas en cours d'exécution, démarrez-le maintenant.
[ec2-user ~]$
sudo systemctl start mariadb
-
Dans un navigateur web, saisissez l'URL de votre installation phpMyAdmin. Cette URL est l'adresse DNS publique (ou l'adresse IP publique) de votre instance suivie par une barre oblique et le nom du fichier de votre répertoire d'installation. Exemples :
http://
my.public.dns.amazonaws.com
/phpMyAdminLa page de connexion phpMyAdmin devrait s'afficher :
-
Connectez-vous à votre installation phpMyAdmin avec le nom d'utilisateur
root
et le mot de passe racine MySQL que vous avez créés précédemment.Votre installation doit être configurée avant que vous la mettiez en service. Nous vous suggérons de commencer par créer manuellement le fichier de configuration, comme suit :
-
Pour commencer avec un fichier de configuration minimal, utilisez votre éditeur de texte favori pour créer un nouveau fichier, puis copiez le contenu de
config.sample.inc.php
dans celui-ci. -
Enregistrez le fichier comme
config.inc.php
dans le répertoire phpMyAdmin qui contientindex.php
. -
Reportez-vous aux instructions de création post-fichier dans la section Utilisation du script d'installation
des instructions d'installation de phpMyAdmin pour toute configuration supplémentaire.
Pour plus d'informations sur l'utilisation de phpMyAdmin, consultez le Guide de l'utilisateur phpMyAdmin
. -
Dépannage
Cette section propose des suggestions pour résoudre les problèmes courants que vous pouvez rencontrer lors de la configuration d'un nouveau serveur LAMP.
Je ne parviens pas à me connecter à mon serveur à l'aide d'un navigateur Web.
Effectuez les vérifications suivantes pour voir si votre serveur web Apache est en cours d'exécution et accessible.
-
Le serveur web est-il en cours d'exécution ?
Vous pouvez vérifier que httpd est activé en exécutant la commande suivante :
[ec2-user ~]$
sudo systemctl is-enabled httpd
Si le processus httpd n'est pas en cours d'exécution, répétez les étapes décrites dans Pour préparer le serveur LAMP.
-
Le pare-feu est-il configuré correctement ?
Vérifiez que le groupe de sécurité de l'instance contient une règle autorisant le trafic HTTP sur le port 80. Pour de plus amples informations, veuillez consulter Ajouter des règles à un groupe de sécurité.
Je ne parviens pas à me connecter à mon serveur en utilisant HTTPS
Effectuez les vérifications suivantes pour voir si votre serveur Web Apache est configuré pour prendre en charge HTTPS.
-
Le serveur Web est-il correctement configuré ?
Après avoir installé Apache, le serveur est configuré pour le trafic HTTP. Pour prendre en charge HTTPS, activez TLS sur le serveur et installez un certificat SSL. Pour plus d'informations, consultez Didacticiel : Configurer SSL/TLS sur Amazon Linux 2.
-
Le pare-feu est-il configuré correctement ?
Vérifiez que le groupe de sécurité de l'instance contient une règle autorisant le trafic HTTPS sur le port 443. Pour de plus amples informations, veuillez consulter Ajouter des règles à un groupe de sécurité.
Voir aussi
Pour plus d'informations sur le transfert des fichiers vers votre instance ou l'installation d'un blog WordPress sur votre serveur web, consultez la documentation suivante :
Pour plus d'informations sur les commandes et le logiciel utilisés dans ce tutoriel, consultez les pages web suivantes :
-
Serveur Web Apache : http://httpd.apache.org/
-
Serveur de base de données MariaDB : https://mariadb.org/
-
Langage de programmation PHP : http://php.net/
-
La commande
chmod
: https://en.wikipedia.org/wiki/Chmod -
La commande
chown
: https://en.wikipedia.org/wiki/Chown
Pour plus d'informations sur l'enregistrement d'un nom de domaine pour votre serveur web ou le transfert d'un nom de domaine existant vers cet hôte, consultez Création et migration de domaines et de sous-domaines vers Amazon Route 53 dans le Amazon Route 53 Manuel du développeur.