Installer un serveur web sur votre instance EC2 - Amazon Relational Database Service

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.

Installer un serveur web sur votre instance EC2

Installez un serveur Web sur l'instance EC2 que vous avez créée dans Lancer une instance EC2. Le serveur Web se connecte à l'instance de base de données Amazon RDS que vous avez créée dans Créer une instance de base de données Amazon RDS.

Installer un serveur Web Apache avec PHP et MariaDB

Connectez-vous à votre instance EC2 et installez le serveur web.

Pour vous connecter à votre instance EC2 et installer le serveur Web Apache avec PHP
  1. Connectez-vous à l'instance EC2 que vous avez précédemment créée en suivant la procédure spécifiée dans Connectez-vous à votre instance Linux dans le Guide de l'utilisateur Amazon EC2 pour les instances Linux.

    Nous vous recommandons de vous connecter à votre instance EC2 en utilisant SSH. Si l'utilitaire client SSH est installé sur Windows, Linux ou Mac, vous pouvez vous connecter à l'instance à l'aide du format de commande suivant :

    ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name

    Supposons, par exemple, que ec2-database-connect-key-pair.pem soit stocké dans /dir1 sur Linux et que le DNS IPv4 public de votre instance EC2 soit ec2-12-345-678-90.compute-1.amazonaws.com. Votre commande SSH se présenterait comme suit :

    ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
  2. Obtenez les dernières corrections de bogues et mises à jour de sécurité en mettant à jour le logiciel sur votre instance EC2. Pour ce faire, exécutez la commande suivante.

    Note

    L'option -y installe les mises à jour sans demander de confirmation. Pour examiner les mises à jour avant de les installer, omettez cette option.

    sudo dnf update -y
  3. Une fois les mises à jour terminées, installez le serveur web Apache, PHP et le logiciel MariaDB ou PostgreSQL à l'aide des commandes suivantes. Cette commande installe plusieurs packages logiciels et les dépendances connexes au même moment.

    MariaDB & MySQL
    sudo dnf install -y httpd php php-mysqli mariadb105
    PostgreSQL
    sudo dnf install -y httpd php php-pgsql postgresql15

    Si vous recevez une erreur, votre instance n'a probablement pas été lancée avec une AMI Amazon Linux 2023. Vous utilisez peut-être une AMI Amazon Linux 2 à la place. Vous pouvez afficher votre version d'Amazon Linux avec la commande suivante

    cat /etc/system-release

    Pour plus d'informations, consultez Mise à jour du logiciel de l'instance.

  4. Démarrez le serveur web avec la commande illustrée ci-dessous.

    sudo systemctl start httpd

    Vous pouvez vérifier que votre serveur web est correctement installé et démarré. Pour ce faire, saisissez le nom DNS (Domain Name System) public de votre instance EC2 dans la barre d'adresse d'un navigateur web, par exemple : http://ec2-42-8-168-21.us-west-1.compute.amazonaws.com. Si votre serveur Web est en cours d'exécution, vous voyez la page de test Apache.

    Si la page de test Apache ne s'affiche pas, vérifiez vos règles entrantes pour le groupe de sécurité du VPC que vous avez créé dans Tutoriel : créer un VPC à utiliser avec un(e) instance de base de données (IPv4 uniquement). Assurez-vous que vos règles entrantes incluent un accès HTTP (port 80) à l'adresse IP pour vous connecter au serveur Web.

    Note

    La page de test Apache apparaît uniquement en l'absence de contenu dans le répertoire racine des documents, /var/www/html. Après l'ajout de contenu dans le répertoire racine des documents, votre contenu apparaît à l'adresse DNS publique de votre instance EC2. Avant cela, il apparaît sur la page de test d'Apache.

  5. Configurez le serveur web pour qu'il démarre à chaque redémarrage du système à l'aide de la commande systemctl.

    sudo systemctl enable httpd

Pour autoriser ec2-user à gérer les fichiers dans le répertoire racine par défaut pour votre serveur Web Apache, modifiez l'appartenance et les autorisations du répertoire /var/www. 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 pour le serveur Web Apache
  1. Ajoutez l'utilisateur ec2-user au groupe apache.

    sudo usermod -a -G apache ec2-user
  2. Pour actualiser vos autorisations et inclure le nouveau groupe apache, déconnectez-vous.

    exit
  3. Reconnectez-vous et vérifiez que le groupe apache existe à l'aide de la commande groups.

    groups

    Votre sortie se présente comme suit :

    ec2-user adm wheel apache systemd-journal
  4. Remplacez le groupe propriétaire du répertoire /var/www et de son contenu par le groupe apache.

    sudo chown -R ec2-user:apache /var/www
  5. Modifiez les autorisations des répertoires /var/www et de ses sous-répertoires pour ajouter des autorisations d'écriture de groupe et définir l'ID de groupe sur les sous-répertoires créés à l'avenir.

    sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} \;
  6. Modifiez de façon récursive les autorisations pour les fichiers figurant dans le répertoire /var/www et ses sous-répertoires pour ajouter des autorisations d'écriture de groupe.

    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. Cela vous permet d'ajouter du contenu, tel qu'un site Web statique ou une application PHP.

Note

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, de nombreuses informations peuvent être vues par des personnes malveillantes sur le chemin d'accès réseau. Ces informations incluent 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.

Les bonnes pratiques en matière de sécurisation de votre serveur Web consistent à installer la prise en charge HTTPS (HTTP Secure). Ce protocole protège vos données avec le chiffrement SSL/TLS. Pour plus d'informations, consultez Didacticiel : Configurer SSL/TLS avec l'AMI Amazon Linux dans le Guide de l'utilisateur Amazon EC2.

Connecter le serveur web Apache à l'instance de base de données

Ensuite, vous allez ajouter du contenu à votre serveur web Apache qui se connecte à votre instance de base de données Amazon RDS.

Pour ajouter du contenu au serveur web Apache qui se connecte à votre instance de base de données
  1. Alors que vous êtes encore connecté à votre instance EC2, remplacez le répertoire par /var/www et créez un sous-répertoire nommé inc.

    cd /var/www mkdir inc cd inc
  2. Créez un fichier dans le répertoire inc nommé dbinfo.inc, puis modifiez le fichier en appelant nano (ou l'éditeur de votre choix).

    >dbinfo.inc nano dbinfo.inc
  3. Ajoutez le contenu suivant au fichier dbinfo.inc. Ici, db_instance_endpoint est le point de terminaison de votre instance de base de données, sans le port, pour votre instance de base de données.

    Note

    Nous vous recommandons de placer les informations de nom d'utilisateur et de mot de passe dans un dossier ne faisant pas partie de la racine du document de votre serveur web. Vous réduisez ainsi la possibilité d'exposer vos informations de sécurité.

    Veillez à remplacer master password par un mot de passe approprié dans votre application.

    <?php define('DB_SERVER', 'db_instance_endpoint'); define('DB_USERNAME', 'tutorial_user'); define('DB_PASSWORD', 'master password'); define('DB_DATABASE', 'sample'); ?>
  4. Enregistrez et fermez le fichier dbinfo.inc. Si vous utilisez nano, enregistrez et fermez le fichier à l'aide des touches Ctrl+S et Ctrl+X.

  5. Remplacez le répertoire par /var/www/html.

    cd /var/www/html
  6. Créez un fichier dans le répertoire html nommé SamplePage.php, puis modifiez le fichier en appelant nano (ou l'éditeur de votre choix).

    >SamplePage.php nano SamplePage.php
  7. Ajoutez le contenu suivant au fichier SamplePage.php :

    MariaDB & MySQL
    <?php include "../inc/dbinfo.inc"; ?> <html> <body> <h1>Sample page</h1> <?php /* Connect to MySQL and select the database. */ $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD); if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error(); $database = mysqli_select_db($connection, DB_DATABASE); /* Ensure that the EMPLOYEES table exists. */ VerifyEmployeesTable($connection, DB_DATABASE); /* If input fields are populated, add a row to the EMPLOYEES table. */ $employee_name = htmlentities($_POST['NAME']); $employee_address = htmlentities($_POST['ADDRESS']); if (strlen($employee_name) || strlen($employee_address)) { AddEmployee($connection, $employee_name, $employee_address); } ?> <!-- Input form --> <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <table border="0"> <tr> <td>NAME</td> <td>ADDRESS</td> </tr> <tr> <td> <input type="text" name="NAME" maxlength="45" size="30" /> </td> <td> <input type="text" name="ADDRESS" maxlength="90" size="60" /> </td> <td> <input type="submit" value="Add Data" /> </td> </tr> </table> </form> <!-- Display table data. --> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>ID</td> <td>NAME</td> <td>ADDRESS</td> </tr> <?php $result = mysqli_query($connection, "SELECT * FROM EMPLOYEES"); while($query_data = mysqli_fetch_row($result)) { echo "<tr>"; echo "<td>",$query_data[0], "</td>", "<td>",$query_data[1], "</td>", "<td>",$query_data[2], "</td>"; echo "</tr>"; } ?> </table> <!-- Clean up. --> <?php mysqli_free_result($result); mysqli_close($connection); ?> </body> </html> <?php /* Add an employee to the table. */ function AddEmployee($connection, $name, $address) { $n = mysqli_real_escape_string($connection, $name); $a = mysqli_real_escape_string($connection, $address); $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');"; if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>"); } /* Check whether the table exists and, if not, create it. */ function VerifyEmployeesTable($connection, $dbName) { if(!TableExists("EMPLOYEES", $connection, $dbName)) { $query = "CREATE TABLE EMPLOYEES ( ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(45), ADDRESS VARCHAR(90) )"; if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>"); } } /* Check for the existence of a table. */ function TableExists($tableName, $connection, $dbName) { $t = mysqli_real_escape_string($connection, $tableName); $d = mysqli_real_escape_string($connection, $dbName); $checktable = mysqli_query($connection, "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'"); if(mysqli_num_rows($checktable) > 0) return true; return false; } ?>
    PostgreSQL
    <?php include "../inc/dbinfo.inc"; ?> <html> <body> <h1>Sample page</h1> <?php /* Connect to PostgreSQL and select the database. */ $constring = "host=" . DB_SERVER . " dbname=" . DB_DATABASE . " user=" . DB_USERNAME . " password=" . DB_PASSWORD ; $connection = pg_connect($constring); if (!$connection){ echo "Failed to connect to PostgreSQL"; exit; } /* Ensure that the EMPLOYEES table exists. */ VerifyEmployeesTable($connection, DB_DATABASE); /* If input fields are populated, add a row to the EMPLOYEES table. */ $employee_name = htmlentities($_POST['NAME']); $employee_address = htmlentities($_POST['ADDRESS']); if (strlen($employee_name) || strlen($employee_address)) { AddEmployee($connection, $employee_name, $employee_address); } ?> <!-- Input form --> <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <table border="0"> <tr> <td>NAME</td> <td>ADDRESS</td> </tr> <tr> <td> <input type="text" name="NAME" maxlength="45" size="30" /> </td> <td> <input type="text" name="ADDRESS" maxlength="90" size="60" /> </td> <td> <input type="submit" value="Add Data" /> </td> </tr> </table> </form> <!-- Display table data. --> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>ID</td> <td>NAME</td> <td>ADDRESS</td> </tr> <?php $result = pg_query($connection, "SELECT * FROM EMPLOYEES"); while($query_data = pg_fetch_row($result)) { echo "<tr>"; echo "<td>",$query_data[0], "</td>", "<td>",$query_data[1], "</td>", "<td>",$query_data[2], "</td>"; echo "</tr>"; } ?> </table> <!-- Clean up. --> <?php pg_free_result($result); pg_close($connection); ?> </body> </html> <?php /* Add an employee to the table. */ function AddEmployee($connection, $name, $address) { $n = pg_escape_string($name); $a = pg_escape_string($address); echo "Forming Query"; $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');"; if(!pg_query($connection, $query)) echo("<p>Error adding employee data.</p>"); } /* Check whether the table exists and, if not, create it. */ function VerifyEmployeesTable($connection, $dbName) { if(!TableExists("EMPLOYEES", $connection, $dbName)) { $query = "CREATE TABLE EMPLOYEES ( ID serial PRIMARY KEY, NAME VARCHAR(45), ADDRESS VARCHAR(90) )"; if(!pg_query($connection, $query)) echo("<p>Error creating table.</p>"); } } /* Check for the existence of a table. */ function TableExists($tableName, $connection, $dbName) { $t = strtolower(pg_escape_string($tableName)); //table name is case sensitive $d = pg_escape_string($dbName); //schema is 'public' instead of 'sample' db name so not using that $query = "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t';"; $checktable = pg_query($connection, $query); if (pg_num_rows($checktable) >0) return true; return false; } ?>
  8. Enregistrez et fermez le fichier SamplePage.php.

  9. Vérifiez que votre serveur web se connecte avec succès à votre instance de base de données en ouvrant un navigateur web et en accédant à une page http://EC2 instance endpoint/SamplePage.php, par exemple : http://ec2-12-345-67-890.us-west-2.compute.amazonaws.com/SamplePage.php.

Vous pouvez utiliser SamplePage.php pour ajouter des données à votreinstance de base de données. Les données que vous ajoutez sont ensuite affichées sur la page. Pour vérifier que les données ont été insérées dans la table, installez le client MySQL sur l'instance Amazon EC2. Connectez-vous ensuite à l'instance de bases de données et interrogez la table.

Pour plus d'informations sur l'installation du client MySQL et la connexion à une instance de base de données, consultez Connexion à une instance de base de données exécutant le moteur de base de données MySQL.

Pour vérifier que la sécurité de votre instance de base de données est assurée, contrôlez que les sources extérieures du VPC ne peuvent pas se connecter à votre instance de base de données.

Après avoir testé votre serveur Web et votre base de données, vous devez supprimer votre instance de base de données et votre instance Amazon EC2.

  • Pour supprimer une instance de base de données, suivez les instructions de la section Suppression d'une instance DB. Vous n'avez pas besoin de créer un instantané final.

  • Pour résilier une instance Amazon EC2, suivez les instructions de la page Résilier votre instance dans le Guide de l'utilisateur Amazon EC2.