Tutoriel LAMP pour AWS Cloud9 - AWS Cloud9

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Tutoriel LAMP pour AWS Cloud9

Ce didacticiel vous permet de configurer et d'exécuter LAMP (Linux, Apache HTTP ServerMySQL, etPHP) dans un environnement de AWS Cloud9 développement.

La suite de ce didacticiel et la création de cet exemple peuvent entraîner des frais pour vousCompte AWS. Il peut s'agir de frais pour des Services AWS tels qu'Amazon Elastic Compute Cloud (Amazon EC2). Pour plus d'informations, consultez Amazon EC2 Pricing (Tarification Amazon EC2).

Prérequis

Avant d'utiliser cet exemple, vérifiez que votre configuration respecte les conditions requises suivantes :

  • Vous devez disposer d'un environnement de développement AWS Cloud9 EC2 existant. Cet exemple suppose que vous disposez déjà d'un environnement EC2 connecté à une instance Amazon EC2 s'exécutant sur Amazon Linux ou Ubuntu Server. Si vous utilisez un autre type d'environnement ou de système d'exploitation, vous devrez peut-être adapter les instructions de cet exemple pour configurer les outils associés. Pour plus d'informations, veuillez consulter Création d'un environnement dans AWS Cloud9.

  • L'IDE AWS Cloud9 correspondant à l'environnement existant est déjà ouvert. Lorsque vous ouvrez un environnement, AWS Cloud9 ouvre l'IDE associé à cet environnement dans votre navigateur web. Pour plus d'informations, veuillez consulter Ouverture d'un environnement dans AWS Cloud9.

Étape 1 : Installation des outils

Dans cette étape, vous installez les outils suivants :

  • Apache HTTP Server, un hôte de serveur Web.

  • PHP, un langage de scripting particulièrement adapté pour le développement Web, qui peut être intégré à HTML.

  • MySQL, un système de gestion de base de données.

Vous terminez ensuite cette étape en démarrant Apache HTTP Server, puis MySQL.

  1. Assurez-vous que les mises à jour de sécurité et correctifs de bogues les plus récents sont installés sur l'instance. Pour ce faire, dans une séance de terminal de l'IDE AWS Cloud9, exécutez la commande yum update (pour Amazon Linux) ou apt update (pour Ubuntu Server). (Pour démarrer une nouvelle séance de terminal, dans la barre de menus, choisissez Window, Nouveau Terminal.)

    Pour Amazon Linux :

    sudo yum -y update

    Pour Ubuntu Server :

    sudo apt -y update
  2. Vérifiez si Apache HTTP Server est déjà installé. Pour ce faire, exécutez la commande httpd -v (pour Amazon Linux) ou apache2 -v (pour Ubuntu Server).

    Si elle réussit, la sortie contient le numéro de version d'Apache HTTP Server.

    Si un message d'erreur s'affiche, installez Apache HTTP Server en exécutant la commande install.

    Pour Amazon Linux :

    sudo yum install -y httpd24

    Pour Ubuntu Server :

    sudo apt install -y apache2
  3. Vérifiez si PHP est déjà installé en exécutant la commande php -v.

    Si PHP est installé, la sortie contient le numéro de version de PHP.

    Si un message d'erreur s'affiche, installez PHP en exécutant la commande install.

    Pour Amazon Linux :

    sudo yum install -y php56

    Pour Ubuntu Server :

    sudo apt install -y php libapache2-mod-php php-xml
  4. Vérifiez si MySQL est déjà installé en exécutant la commande mysql --version.

    Si c'est le cas, la sortie contient le numéro de version MySQL.

    Si un message d'erreur s'affiche, installez MySQL en exécutant la commande install.

    Pour Amazon Linux :

    sudo yum install -y mysql-server

    Pour Ubuntu Server :

    sudo apt install -y mysql-server
  5. Après avoir installé Apache HTTP Server, PHP et MySQL, démarrez Apache HTTP Server, puis vérifiez que ce programme a bien démarré en exécutant la commande suivante.

    Pour Amazon Linux (vous devrez peut-être exécuter cette commande deux fois) :

    sudo service httpd start && sudo service httpd status

    Pour Ubuntu Server (pour revenir à l'invite de commande, appuyez sur q) :

    sudo service apache2 start && sudo service apache2 status
  6. Démarrez MySQL, puis vérifiez que ce programme a bien démarré en exécutant la commande suivante.

    Pour Amazon Linux :

    sudo service mysqld start && sudo service mysqld status

    Pour Ubuntu Server (pour revenir à l'invite de commande, appuyez sur q) :

    sudo service mysql start && sudo service mysql status

Étape 2 : Configurer MySQL

Dans cette étape, vous configurez MySQL selon les bonnes pratiques de sécurité MySQL. Ces bonnes pratiques de sécurité incluent la définition d'un mot de passe pour les comptes root et la suppression des comptes root accessibles depuis l'extérieur de l'hôte local. Parmi les autres bonnes pratiques à prendre en compte, citons la suppression des utilisateurs anonymes, la suppression de la base de données de test et la suppression des privilèges permettant à quiconque d'accéder à des bases de données dont le nom commence par test_.

Vous terminez ensuite cette étape en vous entraînant à démarrer et à quitter le client de ligne de commande MySQL.

  1. Mettez en œuvre les bonnes pratiques de sécurité MySQL pour l'installation de MySQL en exécutant la commande suivante dans une session de terminal de l'IDE AWS Cloud9.

    sudo mysql_secure_installation
  2. Lorsque vous y êtes invité, répondez aux questions suivantes comme spécifié.

    Pour Amazon Linux :

    1. Saisir le mot de passe racine actuel (Entrée s'il n'y en a pas) – Appuyez sur Enter (s'il n'y en a pas).

    2. Définir un mot de passe racineSaisissez Y et appuyez sur Enter.

    3. Nouveau mot de passe – Entrez un mot de passe et appuyez sur Enter.

    4. Entrer à nouveau le nouveau mot de passe – Entrez à nouveau le mot de passe et appuyez sur Enter. (Veillez à stocker le mot de passe dans un emplacement sûr en vue d'une utilisation ultérieure.)

    5. Supprimer les utilisateurs anonymes – Saisissez Y et appuyez sur Enter.

    6. Interdire la connexion racine à distance – Entrez Y et appuyez sur Enter.

    7. Supprimer la base de données de test et l'accès à celle-ci – Entrez Y et appuyez sur Enter.

    8. Recharger les tables de privilèges maintenant – Saisissez Y et appuyez sur Enter.

    Pour Ubuntu Server :

    1. Would you like to set up VALIDATE PASSWORD plugin (Souhaitez-vous configurer le plug-in VALIDATE PASSWORD) : saisissez y et appuyez sur Enter.

    2. There are three levels of password validation policy (Il existe trois niveaux de politique de validation de mot de passe : saisissez 0, 1 ou 2, puis appuyez sur Enter.

    3. New password (Nouveau mot de passe) : saisissez un mot de passe et appuyez sur Enter.

    4. Re-enter new password (Saisir à nouveau le nouveau mot de passe) : saisissez à nouveau le mot de passe et appuyez sur Enter. Assurez-vous que le mot de passe est stocké dans un emplacement sûr en vue d'une utilisation ultérieure.

    5. Do you wish to continue with the password provided (Voulez-vous continuer avec le mot de passe fourni) : saisissez y et appuyez sur Enter.

    6. Remove anonymous users (Supprimer les utilisateurs anonymes) : saisissez y et appuyez sur Enter.

    7. Disallow root login remotely (Interdire la connexion racine à distance) : saisissez y et appuyez sur Enter.

    8. Remove test database and access to it (Supprimer la base de données de test et l'accès à celle-ci) : saisissez y et appuyez sur Enter.

    9. Reload privilege tables now (Recharger les tables de privilèges maintenant) : saisissez y et appuyez sur Enter.

  3. Pour interagir directement avec MySQL, démarrez le client de ligne de commande MySQL en tant qu'utilisateur root en exécutant la commande suivante. Lorsque vous y êtes invité, saisissez le mot de passe de l'utilisateur racine que vous avez défini précédemment, puis appuyez sur Enter. L'invite devient mysql> lorsque vous êtes dans le client de ligne de commande MySQL.

    sudo mysql -uroot -p
  4. Pour quitter le client de ligne de commande MySQL, exécutez la commande suivante. L'invite redevient $.

    exit;

Étape 3 : Configuration d'un site Web

Au cours de cette étape, vous allez configurer la racine du site Web par défaut pour Apache HTTP Server avec les propriétaires et les autorisations d'accès recommandés. Vous créerez ensuite une page Web basée sur PHP à la racine de ce site Web par défaut.

Ensuite, vous pourrez activer le trafic web entrant pour afficher cette page web en configurant le groupe de sécurité dans Amazon EC2 et la liste de contrôle d'accès réseau (ACL réseau) dans les Amazon Virtual Private Cloud (Amazon VPC) qui sont associés à cet environnement EC2. Chaque environnement EC2 doit être associé à un groupe de sécurité dans Amazon EC2 et à une liste ACL réseau dans Amazon VPC. Toutefois, même si la liste ACL réseau par défaut dans un Compte AWS autorise tout le trafic entrant et sortant pour l'environnement, le groupe de sécurité par défaut autorise uniquement le trafic entrant à l'aide de SSH sur le port 22. Pour plus d'informations, veuillez consulter Paramètres VPC pour les environnements de développement AWS Cloud9.

Vous pouvez ensuite terminer cette étape en consultant la page Web depuis l'extérieur de l'IDE AWS Cloud9.

  1. Configurez la racine du site Web par défaut pour Apache HTTP Server (/var/www/html) avec les propriétaires et les autorisations d'accès recommandés. Pour ce faire, exécutez les six commandes suivantes, l'une après l'autre et dans l'ordre indiqué, dans une session de terminal de l'IDE AWS Cloud9. Pour comprendre l'objectif de chaque commande, lisez les informations qui suivent le caractère # après chaque commande.

    Pour Amazon Linux :

    sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ec2-user # Add the user ec2-user (your default user for this environment) to the group web-content. sudo usermod -G web-content -a apache # Add the user apache (Apache HTTP Server) to the group web-content. sudo chown -R ec2-user:web-content /var/www/html # Change the owner of /var/www/html and its files to user ec2-user and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.

    Pour Ubuntu Server :

    sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ubuntu # Add the user ubuntu (your default user for this environment) to the group web-content. sudo usermod -G web-content -a www-data # Add the user www-data (Apache HTTP Server) to the group web-content. sudo chown -R ubuntu:web-content /var/www/html # Change the owner of /var/www/html and its files to user ubuntu and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.
  2. Créez une page Web basée sur PHP nommée index.php dans le dossier racine du site Web par défaut pour Apache HTTP Server (/var/www/html) en exécutant la commande suivante.

    Pour Amazon Linux :

    sudo touch /var/www/html/index.php && sudo chown -R ec2-user:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php

    Pour Amazon Linux, la commande précédente apporte également les modifications suivantes : le propriétaire du fichier devient ec2-user, le groupe du fichier devient web-content et les autorisations sur le fichier passent en lecture-écriture pour l'utilisateur et en lecture-exécution pour le groupe et tous les autres.

    Pour Ubuntu Server :

    sudo touch /var/www/html/index.php && sudo chown -R ubuntu:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php

    Pour Ubuntu Server, la commande précédente apporte également les modifications suivantes : le propriétaire du fichier devient ubuntu, le groupe du fichier devient web-content et les autorisations sur le fichier passent en lecture-écriture pour l'utilisateur et en lecture-exécution pour le groupe et tous les autres.

    Si elles aboutissent, les commandes précédentes créent le fichier index.php avec le contenu suivant.

    <?php phpinfo(); ?>
  3. Activer le trafic web entrant sur le port 80 pour afficher la nouvelle page web en configurant la liste ACL réseau dans Amazon VPC et le groupe de sécurité Amazon EC2 associé à cet environnement EC2. Pour ce faire, exécutez les 8 commandes suivantes, l'une après l'autre, dans l'ordre suivant. Pour comprendre l'objectif de chaque commande, lisez les informations qui suivent le caractère # pour chaque commande.

    Important

    L'exécution des commandes suivantes active le trafic web entrant sur le port 80 pour tous les environnements EC2 et toutes les instances Amazon EC2 associés au groupe de sécurité et à la liste ACL réseau pour cet environnement. Cela peut entraîner l'activation inattendue du trafic web entrant sur le port 80 pour des environnements EC2 et des instances Amazon EC2 autres que celui prévu.

    Note

    Les commandes 2 à 4 suivantes permettent au groupe de sécurité d'autoriser le trafic Web entrant sur le port 80. Si vous avez un groupe de sécurité par défaut qui autorise uniquement le trafic SSH entrant sur le port 22, vous devez exécuter la première commande suivie par ces commandes 2 à 4. Cependant, si vous avez un groupe de sécurité personnalisé qui autorise déjà le trafic Web entrant sur le port 80, vous pouvez ne pas exécuter ces commandes.

    Les commandes cinq à huit suivantes permettent à la liste ACL réseau d'autoriser le trafic Web entrant sur le port 80. Si vous avez une liste ACL réseau par défaut qui autorise déjà tout le trafic entrant sur tous les ports, vous pouvez ne pas exécuter ces commandes. Supposons toutefois que vous disposiez d'une liste ACL réseau personnalisée qui n'autorise pas le trafic Web entrant sur le port 80. Ensuite, exécutez la première commande, suivie des commandes cinq à huit.

    MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Add an inbound rule to the security group to allow all incoming IPv4-based traffic over port 80. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Add an inbound rule to the security group to allow all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10000 --cidr-block 0.0.0.0/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv4-based traffic over port 80. Advanced users: change this suggested rule number as desired. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10100 --ipv6-cidr-block ::/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv6-based traffic over port 80. Advanced users: change this suggested rule number as desired.
  4. Obtenez l'URL d'accès au fichier index.php dans la racine du serveur web. Pour ce faire, exécutez la commande suivante et utilisez un nouvel onglet du navigateur Web ou un navigateur Web distinct de l'IDE AWS Cloud9 pour accéder à l'URL qui s'affiche. Si l'opération aboutit, la page Web affiche des informations sur Apache HTTP Server, MySQL, PHP et d'autres paramètres associés.

    MY_PUBLIC_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) && echo http://$MY_PUBLIC_IP/index.php # Get the URL to the index.php file within the web server root.

Étape 4 : Nettoyer

Supposons que vous souhaitiez continuer à utiliser cet environnement mais que vous souhaitiez désactiver le trafic Web entrant via le port 80. Exécutez ensuite les huit commandes suivantes, l'une après l'autre et dans l'ordre indiqué, pour supprimer les règles de trafic entrant correspondantes que vous avez définies précédemment dans le groupe de sécurité et la liste ACL réseau associés à l'environnement. Pour comprendre l'objectif de chaque commande, lisez les informations qui suivent le caractère # pour chaque commande.

Important

L'exécution des commandes suivantes désactive le trafic web entrant sur le port 80 pour tous les environnements EC2 et toutes les instances Amazon EC2 associés au groupe de sécurité et à la liste ACL réseau pour cet environnement. Cela peut entraîner la désactivation inattendue du trafic web entrant sur le port 80 pour des environnements EC2 et des instances Amazon EC2 autres que celui prévu.

Note

Les commandes cinq à huit suivantes suppriment les règles existantes pour empêcher la liste ACL réseau d'autoriser le trafic Web entrant sur le port 80. Si vous avez une liste ACL réseau par défaut qui autorise déjà tout le trafic entrant sur tous les ports, vous pouvez ne pas exécuter ces commandes. Supposons toutefois que vous disposiez d'une liste ACL réseau personnalisée avec des règles existantes qui autorisent le trafic Web entrant via le port 80 et que vous souhaitiez supprimer ces règles. Ensuite, vous devez exécuter la première commande, suivie des cinquième à huitième commandes.

MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Delete the existing inbound rule from the security group to block all incoming IPv4-based traffic over port 80. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Delete the existing inbound rule from the security group to block all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10000 # Delete the existing inbound rule from the network ACL to block all IPv4-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10100 # Delete the existing inbound rule from the network ACL to block all IPv6-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match.

Si vous n'utilisez plus cet environnement, supprimez-le afin d'éviter des frais continus pour votre Compte AWS. Pour obtenir des instructions, consultez Suppression d'un environnement dans AWS Cloud9.