Amazon Elastic Compute Cloud
Guide de l'utilisateur pour les instances Linux

Didacticiel : Installation d'un serveur web LAMP avec l'Amazon Linux AMI

Les procédures suivantes vous aident à installer un serveur Web Apache avec PHP et le support MySQL sur votre instance Amazon Linux (parfois appelé serveur Web LAMP ou pile LAMP). Vous pouvez utiliser ce serveur pour héberger un site web statique ou déployer une application PHP dynamique qui lit et écrit des informations sur une base de données.

Important

Pour configurer un serveur web LAMP sur Amazon Linux 2, consultez Didacticiel : Installation d'un serveur web LAMP sur Amazon Linux 2.

Si vous essayez de configurer un serveur web LAMP sur une instance Ubuntu ou Red Hat Enterprise Linux, ce didacticiel ne fonctionnera pas pour vous. Pour obtenir plus d'informations sur d'autres distributions, consultez leur documentation spécifique. Pour plus d'informations sur les serveurs web LAMP sur Ubuntu, consultez la rubrique ApacheMySQLPHP de la documentation proposée par la communauté Ubuntu.

Étape 1 : Préparer le serveur LAMP

Prérequis

Ce didacticiel suppose que vous avez déjà lancé une nouvelle instance à l'aide de l'Amazon Linux AMI avec un nom DNS public que l'on peut atteindre à partir d'Internet. Pour plus d'informations, consultez Étape 1 : Lancement d'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 didacticiel Autorisation du trafic entrant pour vos instances Linux.

Pour installer et démarrer le serveur web LAMP avec l'Amazon Linux AMI

  1. Connectez-vous à votre instance.

  2. 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
  3. Maintenant que votre instance est à jour, vous pouvez installer le serveur web Apache, MySQL et les packages logiciels PHP.

    Note

    Il est possible que certaines applications ne soient pas compatibles avec l'environnement logiciel recommandé suivant. Avant d'installer ces packages, vérifiez si vos applications LAMP sont compatibles avec eux. En cas de problème, vous devrez peut-être installer un autre environnement. Pour de plus amples informations, veuillez consulter Le logiciel d'application que je veux exécuter sur mon serveur est incompatible avec la version PHP installée ou d'autres logiciels

    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 httpd24 php70 mysql56-server php70-mysqlnd

    Note

    Si vous recevez l'erreur No package package-name available, cela signifie que votre instance n'a pas été lancée avec l'Amazon Linux AMI (vous utilisez peut-être Amazon Linux 2). Vous pouvez afficher votre version d'Amazon Linux avec la commande suivante

    cat /etc/system-release
  4. Démarrez le serveur web Apache.

    [ec2-user ~]$ sudo service httpd start Starting httpd: [ OK ]
  5. Utilisez la commande chkconfig pour configurer le serveur Web Apache afin qu'il soit lancé à chaque démarrage système.

    [ec2-user ~]$ sudo chkconfig httpd on

    La commande chkconfig n'indique aucun message de confirmation lorsque vous parvenez à activer un service avec elle.

    Vous pouvez vérifier que httpd est activé en exécutant la commande suivante:

    [ec2-user ~]$ chkconfig --list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    Ici, httpd est on sur les niveaux d'exécution 2, 3, 4, et 5 (ce qui correspond à ce que vous voulez voir).

  6. 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.

    1. Ouvrez la console Amazon EC2 à l'adresse https://console.aws.amazon.com/ec2/.

    2. Choisissez Instances et sélectionnez votre instance.

    3. Sous Groupes de sécurité, choisissez afficher les règles entrantes.

    4. Vous devez voir la liste de règles suivante dans votre groupe de sécurité par défaut :

      Security Groups associated with i-1234567890abcdef0 Ports Protocol Source launch-wizard-N 22 tcp 0.0.0.0/0 ✔

      En utilisant les procédures de Ajout de 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é

  7. 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).

    Si vous ne pouvez pas voir la page test Apache, vérifiez que le groupe de sécurité que vous utilisez contient une règle pour autoriser le trafic HTTP (port 80). Pour plus d'informations sur l'ajout d'une règle HTTP à votre groupe de sécurité, consultez Ajout de 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.

    
                        Page de test Apache

    Note

    Cette page test s'affiche uniquement lorsque /var/www/html ne présente aucun contenu. Lorsque vous ajoutez du contenu à la racine du document, votre contenu apparaît à l'adresse DNS publique de votre instance au lieu de cette page test.

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.

[ec2-user ~]$ ls -l /var/www total 16 drwxr-xr-x 2 root root 4096 Jul 12 01:00 cgi-bin drwxr-xr-x 3 root root 4096 Aug 7 00:02 error drwxr-xr-x 2 root root 4096 Jan 6 2012 html drwxr-xr-x 3 root root 4096 Aug 7 00:02 icons drwxr-xr-x 2 root root 4096 Aug 7 21:17 noindex

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

  1. Ajoutez votre utilisateur (dans ce cas, ec2-user) au groupe apache.

    [ec2-user ~]$ sudo usermod -a -G apache ec2-user
  2. Déconnectez-vous, puis reconnectez-vous pour sélectionner le nouveau groupe, puis vérifiez votre adhésion.

    1. Déconnectez-vous (utilisez la commande exit ou fermez la fenêtre de terminal) :

      [ec2-user ~]$ exit
    2. Pour vérifier votre adhésion au groupe apache, reconnectez-vous à votre instance, puis exécutez la commande suivante :

      [ec2-user ~]$ groups ec2-user wheel apache
  3. Remplacez la propriété de groupe de /var/www et son contenu par le groupe apache.

    [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
  4. 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 [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
  5. 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.

(Facultatif) Sécuriser votre serveur web

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.

É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 web LAMP

  1. 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 Étape 1 : Préparer le serveur LAMP.

  2. 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. Par exemple :

    http://my.public.dns.amazonaws.com/phpinfo.php

    Vous 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. Les versions de package dans la deuxième colonne n'ont pas besoin de correspondre à cet exemple de sortie.

    [ec2-user ~]$ sudo yum list installed httpd24 php70 mysql56-server php70-mysqlnd Loaded plugins: priorities, update-motd, upgrade-helper Installed Packages httpd24.x86_64 2.4.25-1.68.amzn1 @amzn-updates mysql56-server.x86_64 5.6.35-1.23.amzn1 @amzn-updates php70.x86_64 7.0.14-1.20.amzn1 @amzn-updates php70-mysqlnd.x86_64 7.0.14-1.20.amzn1 @amzn-updates

    Si l'un des packages requis n'est pas présent dans votre sortie, installez-le avec la commande sudo yum install package.

  3. 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

Étape 3 : Sécuriser le serveur de base de données

L'installation par défaut du serveur MySQL possède plusieurs fonctions qui sont excellentes pour les tests et les développements, 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 MySQL, nous vous recommandons de suivre cette procédure.

Pour sécuriser le serveur de base de données

  1. Démarrez le serveur MySQL.

    [ec2-user ~]$ sudo service mysqld start Initializing MySQL database: ... PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! ... Starting mysqld: [ OK ]
  2. Exécutez mysql_secure_installation.

    [ec2-user ~]$ sudo mysql_secure_installation
    1. A l'invite, saisissez un mot de passe pour le compte racine.

      1. 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.

      2. 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.

        Note

        La mesure la plus simple pour sécuriser votre base de données consiste à définir un mot de passe racine pour MySQL. 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.

    2. Tapez Y pour supprimer les comptes d'utilisateur anonymes.

    3. Tapez Y pour désactiver la connexion racine à distance.

    4. Tapez Y pour supprimer la base de données de test.

    5. Tapez Y pour recharger les tableaux de privilèges et enregistrer vos changements.

  3. (Facultatif) Si vous ne comptez pas utiliser le serveur MySQL tout de suite, arrêtez-le. Vous pouvez le redémarrer lorsque vous en avez de nouveau besoin.

    [ec2-user ~]$ sudo service mysqld stop Stopping mysqld: [ OK ]
  4. (Facultatif) Si vous voulez que le serveur MySQL soit lancé à chaque démarrage, saisissez la commande suivante.

    [ec2-user ~]$ sudo chkconfig mysqld on

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 4 : (Facultatif) Installer phpMyAdmin

Pour installer phpMyAdmin

phpMyAdmin est un outil de gestion de bases de données basé sur le Web que vous pouvez utiliser pour visualiser et modifier les bases de données MySQL sur votre instance EC2. Suivez les étapes ci-dessous pour installer et configurer phpMyAdmin sur votre instance Amazon Linux.

Important

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.

Note

Le système de gestion des packages Amazon Linux ne prend pas en charge actuellement l'installation automatique de phpMyAdmin dans un environnement PHP 7. Ce didacticiel explique comment installer phpMyAdmin manuellement.

  1. Connectez-vous à votre instance EC2 à l'aide de SSH.

  2. Installez les dépendances obligatoires.

    [ec2-user ~]$ sudo yum install php70-mbstring.x86_64 php70-zip.x86_64 -y
  3. Redémarrez Apache.

    [ec2-user ~]$ sudo service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
  4. Accédez à la racine du document Apache sur /var/www/html.

    [ec2-user ~]$ cd /var/www/html [ec2-user html]$
  5. 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
  6. Créez un dossier phpMyAdmin et extrayez le package dans celui-ci à l'aide de la commande suivante.

    [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
  7. Supprimez le tarball phpMyAdmin-latest-all-languages.tar.gz.

    [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
  8. (Facultatif) Si le serveur MySQL n'est pas en cours d'exécution, démarrez-le maintenant.

    [ec2-user ~]$ sudo service mysqld start Starting mysqld: [ OK ]
  9. 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. Par exemple :

    http://my.public.dns.amazonaws.com/phpMyAdmin

    La page de connexion phpMyAdmin devrait s'afficher :

  10. 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. Pour configurer phpMyAdmin, vous pouvez créer manuellement un fichier de configuration, utiliser la console de configuration ou combiner ces deux approches.

    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 peux pas me connecter à mon serveur à l'aide d'un navigateur Internet.

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 ~]$ chkconfig --list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    Ici, httpd est on sur les niveaux d'exécution 2, 3, 4, et 5 (ce qui correspond à ce que vous voulez voir).

    Si le processus httpd n'est pas en cours d'exécution, répétez les étapes décrites dans Étape 1 : Préparer le serveur LAMP.

  • Le pare-feu est-il configuré correctement ?

    Si vous ne pouvez pas voir la page test Apache, vérifiez que le groupe de sécurité que vous utilisez contient une règle pour autoriser le trafic HTTP (port 80). Pour plus d'informations sur l'ajout d'une règle HTTP à votre groupe de sécurité, consultez Ajout de règles à un groupe de sécurité.

Le logiciel d'application que je veux exécuter sur mon serveur est incompatible avec la version PHP installée ou d'autres logiciels

Ce didacticiel recommande d'installer les versions les plus récentes d'Apache HTTP Server, de PHP et de MySQL. Avant d'installer une application LAMP supplémentaire, vérifiez sa configuration requise pour confirmer qu'elle est compatible avec votre environnement installé. Si la dernière version de PHP n'est pas prise en charge, il est possible (en toute sécurité) de revenir à une configuration antérieure prise en charge. Vous pouvez également installer plusieurs versions de PHP en parallèle, ce qui résout certains problèmes de compatibilité avec un minimum d'effort. Pour plus d'informations sur la configuration d'une préférence parmi plusieurs versions PHP installées, consultez Notes de mise à jour d'Amazon Linux AMI 2016.09.

Comment revenir à une version plus ancienne

La version précédente bien testée de ce didacticiel appelait les packages LAMP de base suivants :

  • httpd24

  • php56

  • mysql55-server

  • php56-mysqlnd

Si vous avez déjà installé les derniers packages comme cela est recommandé au début de ce didacticiel, vous devez commencer par les désinstaller, ainsi que toutes les autres dépendances, comme suit :

[ec2-user ~]$ sudo yum remove -y httpd24 php70 mysql56-server php70-mysqlnd perl-DBD-MySQL56

Installez ensuite l'environnement de remplacement :

[ec2-user ~]$ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd

Si vous décidez ensuite d'effectuer une mise à niveau vers l'environnement recommandé, vous devez d'abord supprimer les packages et dépendances personnalisés :

[ec2-user ~]$ sudo yum remove -y httpd24 php56 mysql55-server php56-mysqlnd perl-DBD-MySQL55

Vous pouvez maintenant installer les derniers packages comme indiqué précédemment.

Rubriques connexes

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 didacticiel, consultez les pages web suivantes :

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.