LAMPtutoriel pour AWS Cloud9 - AWS Cloud9

AWS Cloud9 n'est plus disponible pour les nouveaux clients. Les clients existants de AWS Cloud9 peuvent continuer à utiliser le service normalement. En savoir plus

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.

LAMPtutoriel pour AWS Cloud9

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

Le fait de suivre ce didacticiel et de créer cet exemple peut entraîner des frais pour votre Compte AWS. Cela inclut les frais éventuels Services AWS tels qu'Amazon Elastic Compute Cloud (AmazonEC2). Pour plus d'informations, consultez Amazon EC2 Pricing.

Prérequis

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

  • Vous devez disposer d'un environnement AWS Cloud9 EC2 de développement existant. Cet exemple suppose que vous disposez déjà d'un EC2 environnement connecté à une EC2 instance Amazon qui exécute Amazon Linux ou Ubuntu Serveur. 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 de plus amples informations, veuillez consulter Création d'un environnement dans AWS Cloud9.

  • Vous avez déjà ouvert AWS Cloud9 IDE le fichier correspondant à l'environnement existant. Lorsque vous ouvrez un environnement, AWS Cloud9 ouvre le champ IDE correspondant à cet environnement dans votre navigateur Web. Pour de plus amples informations, veuillez consulter Ouverture d'un environnement dans AWS Cloud9.

Étape 1 : Installation des outils

Dans cette étape, vous installez les outils suivants :

  • Apache HTTPServer, un hôte de serveur Web.

  • PHP, un langage de script particulièrement adapté au développement Web et dans lequel il est possible de l'intégrerHTML.

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

Vous terminez ensuite cette étape en commençant Apache HTTPServeur, 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 session de terminal dans le AWS Cloud9 IDE, exécutez yum updatefor (Amazon Linux) ou apt updatefor (Ubuntu commande 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

    Dans Ubuntu Serveur :

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

    En cas de succès, la sortie contient le Apache HTTPNuméro de version du serveur.

    Si un message d'erreur s'affiche, installez Apache HTTPServeur en exécutant la installcommande.

    Pour Amazon Linux :

    sudo yum install -y httpd24

    Dans Ubuntu Serveur :

    sudo apt install -y apache2
  3. Confirmez si PHP est déjà installé en exécutant la php -vcommande.

    En cas de succès, la sortie contient le numéro de PHP version.

    Si un message d'erreur s'affiche, procédez à l'installation en PHP exécutant la installcommande.

    Pour Amazon Linux :

    sudo yum install -y php56

    Dans Ubuntu Serveur :

    sudo apt install -y php libapache2-mod-php php-xml
  4. Confirmez si MySQL est déjà installé en exécutant la mysql --versioncommande.

    En cas de succès, la sortie contient le MySQL numéro de version.

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

    Pour Amazon Linux :

    sudo yum install -y mysql-server

    Dans Ubuntu Serveur :

    sudo apt install -y mysql-server
  5. Après avoir installé Apache HTTPServeur, PHP, et MySQL, démarrer Apache HTTPServeur, puis confirmez qu'il a 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

    Dans Ubuntu Serveur (pour revenir à l'invite de commande, appuyez surq) :

    sudo service apache2 start && sudo service apache2 status
  6. Démarrer MySQL, puis confirmez qu'il a démarré en exécutant la commande suivante.

    Pour Amazon Linux :

    sudo service mysqld start && sudo service mysqld status

    Dans Ubuntu Serveur (pour revenir à l'invite de commande, appuyez surq) :

    sudo service mysql start && sudo service mysql status

Étape 2 : Configuration MySQL

Au cours de cette étape, vous configurez MySQL à suivre MySQL meilleures pratiques en matière de sécurité. 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 puis à sortir du MySQL client en ligne de commande.

  1. Mettre en œuvre MySQL meilleures pratiques en matière de sécurité pour MySQL installation en exécutant la commande suivante dans une session de terminal dans le AWS Cloud9 IDE.

    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.

    Dans Ubuntu Serveur :

    1. Voulez-vous configurer le VALIDATE PASSWORD plugin ? Entrezy, puis appuyez surEnter.

    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, lancez le MySQL client de ligne de commande 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> alors que vous êtes dans le MySQL client en ligne de commande.

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

    exit;

Étape 3 : Configuration d'un site Web

Au cours de cette étape, vous configurez la racine du site Web par défaut pour Apache HTTPServeur avec propriétaires et autorisations d'accès recommandés. Vous créez ensuite un PHPpage Web basée sur cette racine de site Web par défaut.

Vous autorisez ensuite le trafic Web entrant à consulter cette page Web en configurant le groupe de sécurité dans Amazon EC2 et la liste de contrôle d'accès réseau (réseauACL) dans Amazon Virtual Private Cloud (AmazonVPC) associés à cet EC2 environnement. Chaque EC2 environnement doit être associé à la fois à un groupe de sécurité dans Amazon EC2 et à un réseau ACL dans AmazonVPC. Cependant, même si le réseau ACL par défaut d'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 SSH via le port 22. Pour de plus amples informations, veuillez consulter VPCparamètres pour les environnements AWS Cloud9 de développement.

Vous terminez ensuite cette étape en visualisant correctement la page Web depuis l'extérieur du AWS Cloud9 IDE.

  1. Configurez la racine du site Web par défaut pour Apache HTTPServeur (/var/www/html) avec propriétaires et autorisations d'accès recommandés. Pour ce faire, exécutez les six commandes suivantes, une par une dans l'ordre suivant, dans une session de terminal dans le AWS Cloud9 IDE. 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.

    Dans Ubuntu Serveur :

    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 un PHPpage Web basée sur index.php le nom du dossier racine du site Web par défaut pour Apache HTTPServeur (qui est/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

    La commande précédente pour Amazon Linux change également le propriétaire du fichier enec2-user, change le groupe du fichier enweb-content, et modifie les autorisations du fichier en read/write for the user, and read/execute pour le groupe et les autres.

    Dans Ubuntu Serveur :

    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

    La commande précédente pour Ubuntu Le serveur remplace également le propriétaire du fichierubuntu, le groupe du fichier et les autorisations du fichier read/write for the user, and read/execute pour le groupe et les autres. web-content

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

    <?php phpinfo(); ?>
  3. Activez le trafic Web entrant via le port 80 pour afficher la nouvelle page Web en configurant le réseau ACL dans Amazon VPC et le groupe de sécurité Amazon EC2 associé à cet EC2 environnement. 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 via le port 80 pour tous les EC2 environnements et les EC2 instances Amazon associés au groupe de sécurité et au réseau ACL de cet environnement. Cela peut entraîner l'activation inattendue du trafic Web entrant via le port 80 pour EC2 des environnements et EC2 des instances Amazon autres que celui-ci.

    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 SSH trafic entrant via le port 22, vous devez exécuter la première commande, suivie des deuxième à quatrième commandes. 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 cinquième à huitième commandes suivantes permettent au réseau ACL d'autoriser le trafic Web entrant via le port 80. Si vous avez un réseau par défautACL, qui autorise déjà tout le trafic entrant sur tous les ports, vous pouvez ignorer l'exécution de ces commandes en toute sécurité. Supposons toutefois que vous disposiez d'un réseau personnalisé ACL qui n'autorise pas le trafic Web entrant via 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. Accédez URL au index.php fichier situé à la racine du serveur Web. Pour ce faire, exécutez la commande suivante et utilisez un nouvel onglet de navigateur Web ou un autre navigateur Web distinct de celui URL qui est affiché. AWS Cloud9 IDE En cas de succès, la page Web affiche des informations sur Apache HTTPServeur, MySQL, PHP, et d'autres paramètres connexes.

    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, une par une dans l'ordre suivant, pour supprimer les règles de trafic entrant correspondantes que vous avez définies précédemment dans le groupe de sécurité et le réseau ACL 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 via le port 80 pour tous les EC2 environnements et les EC2 instances Amazon associés au groupe de sécurité et au réseau ACL de cet environnement. Cela peut entraîner la désactivation inattendue du trafic Web entrant via le port 80 pour les EC2 environnements et les EC2 instances Amazon autres que celui-ci.

Note

Les cinquième à huitième commandes suivantes suppriment les règles existantes pour empêcher le réseau ACL d'autoriser le trafic Web entrant via le port 80. Si vous avez un réseau ACL par défaut qui autorise déjà tout le trafic entrant sur tous les ports, vous pouvez ignorer l'exécution de ces commandes. Supposons toutefois que vous disposiez d'un réseau personnalisé ACL doté de règles existantes autorisant 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.