

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.

# Déploiement d'une application Laravel sur Elastic Beanstalk
<a name="php-laravel-tutorial"></a>

Laravel est un framework open source model-view-controller (MVC) pour PHP. Ce didacticiel explique le processus de génération d'une application Laravel, de son déploiement dans un AWS Elastic Beanstalk environnement et de sa configuration pour se connecter à une instance de base de données Amazon Relational Database Service (Amazon RDS).

**Topics**
+ [Conditions préalables](#php-laravel-tutorial-prereqs)
+ [Lancer un environnement Elastic Beanstalk](#php-laravel-tutorial-launch)
+ [Installation de Laravel et génération d'un site web](#php-laravel-tutorial-generate)
+ [Déploiement de votre application](#php-laravel-tutorial-deploy)
+ [Configuration des paramètres Composer](#php-laravel-tutorial-configure)
+ [Ajout d'une base de données à votre environnement](#php-laravel-tutorial-database)
+ [Nettoyage](#php-laravel-tutorial-cleanup)
+ [Étapes suivantes](#php-laravel-tutorial-nextsteps)

## Conditions préalables
<a name="php-laravel-tutorial-prereqs"></a>

Ce tutoriel suppose que vous connaissez les opérations de base Elastic Beanstalk et la console Elastic Beanstalk. Si ce n'est pas déjà fait, suivez les instructions dans [Découvrez comment démarrer avec Elastic Beanstalk](GettingStarted.md) pour lancer votre premier environnement Elastic Beanstalk.

Pour suivre les procédures décrites dans ce guide, vous aurez besoin d'un shell ou d'un terminal de ligne de commande pour exécuter des commandes. Dans les listes, les commandes sont précédées d'un symbole d'invite ($) et du nom du répertoire actuel, le cas échéant.

```
~/eb-project$ this is a command
this is output
```

Sous Linux et macOS, vous pouvez utiliser le shell et le gestionnaire de package de votre choix. Sur Windows, vous pouvez [installer le sous-système Windows pour Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) afin d'obtenir une version intégrée à Windows d'Ubuntu et de Bash.

Laravel 6 nécessite PHP 7.2 ou version ultérieure. Il requiert également les extensions PHP répertoriées dans la rubrique [Prérequis du serveur](https://laravel.com/docs/6.x/installation#server-requirements) de la documentation officielle de Laravel. Suivez les instructions pour installer PHP et Composer.

Pour plus d'informations sur la prise en charge et la maintenance de Laravel, consultez la rubrique [Stratégie de prise en charge](https://laravel.com/docs/master/releases#support-policy) de la documentation officielle de Laravel.

## Lancer un environnement Elastic Beanstalk
<a name="php-laravel-tutorial-launch"></a>

Utilisez la console Elastic Beanstalk pour créer un environnement Elastic Beanstalk. Choisissez la plateforme **PHP** et acceptez les paramètres par défaut et l'exemple de code.

**Pour lancer un environnement (console)**

1. [Ouvrez la console Elastic Beanstalk à l'aide de ce lien préconfiguré : console.aws.amazon. com/elasticbeanstalk/home\#/newApplication? Nom de l'application = Tutoriels](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced) et type d'environnement = LoadBalanced

1. Pour **Platform (Plateforme)**, sélectionnez la plateforme et la branche de plateforme qui correspondent au langage utilisé par votre application.

1. Pour l'option **Code de l'application**, choisissez **Exemple d'application**.

1. Choisissez **Vérifier et lancer**.

1. Passez en revue les options disponibles. Choisissez l'option disponible que vous souhaitez utiliser et, une fois que vous êtes prêt, choisissez **Create app** (Créer une application).

La création d'un environnement prend environ 5 minutes et crée les ressources suivantes :
+ **Instance EC2** – Machine virtuelle Amazon Elastic Compute Cloud (Amazon EC2) configurée pour exécuter des applications web sur la plateforme de votre choix.

  Chaque plateforme exécute un ensemble spécifique de logiciels, de fichiers de configuration et de scripts pour prendre en charge une version de langage, une infrastructure ou un conteneur web spécifiques, ou une combinaison de ces éléments. La plupart des plateformes utilisent Apache ou nginx comme proxy inverse situé devant votre application web, qui lui transmet des demandes, traite des ressources statiques et génère des journaux d'accès et d'erreur.
+ **Groupe de sécurité de l'instance** – Groupe de sécurité Amazon EC2 configuré pour autoriser le trafic entrant sur le port 80. Cette ressource autorise le trafic HTTP provenant de l'équilibreur de charge à atteindre l'instance EC2 qui exécute votre application web. Par défaut, le trafic n'est pas autorisé sur les autres ports.
+ **Équilibreur de charge** – Équilibreur de charge Elastic Load Balancing configuré pour répartir les demandes vers les instances exécutant votre application. De plus, l'équilibreur de charge vous évite d'exposer directement vos instances sur Internet.
+ **Groupe de sécurité de l'équilibreur de charge** – Groupe de sécurité Amazon EC2 configuré pour autoriser le trafic entrant sur le port 80. Cette ressource autorise le trafic HTTP provenant d'Internet à atteindre l'équilibreur de charge. Par défaut, le trafic n'est pas autorisé sur les autres ports.
+ **Groupe Auto Scaling** – Groupe Auto Scaling configuré pour remplacer une instance si elle est résiliée ou devient indisponible.
+ **Compartiment Amazon S3** – Emplacement de stockage pour votre code source, les journaux et autres artefacts qui sont créés lorsque vous utilisez Elastic Beanstalk.
+ ** CloudWatch Alarmes Amazon** : deux CloudWatch alarmes qui surveillent la charge sur les instances de votre environnement et qui sont déclenchées si la charge est trop élevée ou trop faible. Lorsqu'une alarme est déclenchée, votre groupe Auto Scaling s'adapte en fonction, à la hausse ou à la baisse.
+ **CloudFormation stack** : Elastic CloudFormation Beanstalk utilise pour lancer les ressources de votre environnement et propager les modifications de configuration. Les ressources sont définies dans un modèle, que vous pouvez afficher dans la [console CloudFormation](https://console.aws.amazon.com/cloudformation).
+ **Nom de domaine** : nom de domaine qui mène à votre application Web dans le formulaire *{{subdomain}}. {{region}}.elasticbeanstalk.com*.
**Sécurité du domaine**  
Pour renforcer la sécurité de vos applications Elastic Beanstalk, le domaine *elasticbeanstalk.com* est enregistré dans la [liste des suffixes publics (PSL)](https://publicsuffix.org/).  
Si vous devez définir des cookies sensibles dans le nom de domaine par défaut de vos applications Elastic Beanstalk, nous vous recommandons d'utiliser des cookies `__Host-` avec un préfixe pour une sécurité accrue. Cette pratique protège votre domaine contre les tentatives de falsification de requêtes intersites (CSRF). Pour plus d'informations, consultez la page [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) du Mozilla Developer Network.

Toutes ces ressources sont gérées par Elastic Beanstalk. Lorsque vous arrêtez votre environnement, Elastic Beanstalk arrête toutes les ressources qu'il contient.

**Note**  
Le compartiment Amazon S3 créé par Elastic Beanstalk est partagé entre les environnements et n'est pas supprimé lors de l'arrêt de l'environnement. Pour de plus amples informations, veuillez consulter [Utilisation d'Elastic Beanstalk avec Amazon S3](AWSHowTo.S3.md).

## Installation de Laravel et génération d'un site web
<a name="php-laravel-tutorial-generate"></a>

Composer peut installer Laravel et créer un projet de travail avec une commande :

```
~$ composer create-project --prefer-dist laravel/laravel eb-laravel
```

Composer installe Laravel et ses dépendances et génère un projet par défaut.

Si vous rencontrez des problèmes lors de l'installation de Laravel, consultez le sujet d'installation dans la documentation officielle : [https://laravel.com/docs/6.x](https://laravel.com/docs/6.x). 

## Déploiement de votre application
<a name="php-laravel-tutorial-deploy"></a>

Créez un [bundle source](applications-sourcebundle.md) contenant les fichiers créés par Composer. La commande suivante permet de créer une solution groupée source nommée `laravel-default.zip`. Elle exclut les fichiers du dossier `vendor`, lesquels prennent beaucoup de place et ne sont pas nécessaires pour le déploiement de votre application dans Elastic Beanstalk.

```
~/eb-laravel$ zip ../laravel-default.zip -r * .[^.]* -x "vendor/*"
```

Téléchargez l'offre groupée source sur Elastic Beanstalk pour déployer Laravel dans votre environnement.

**Pour déployer un groupe source**

1. Ouvrez la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk), puis **dans la liste des régions, sélectionnez votre**. Région AWS

1. Dans le panneau de navigation, choisissez **Environments** (Environnements), puis choisissez le nom de votre environnement dans la liste.

1. Sur la page de présentation de l'environnement, choisissez **Upload and deploy (Charger et déployer)**.

1. Utilisez la boîte de dialogue à l'écran pour charger le bundle source.

1. Choisissez **Deploy (Déployer)**.

1. Lorsque le déploiement est terminé, vous pouvez sélectionner l'URL de site pour ouvrir votre site web dans un nouvel onglet.

**Note**  
En vue d'optimiser davantage le bundle source, initialisez un référentiel Git et utilisez la [commande `git archive`](applications-sourcebundle.md#using-features.deployment.source.git) pour créer le bundle source. Le projet Laravel par défaut inclut un fichier `.gitignore` qui indique à Git d'exclure le dossier `vendor` et d'autres fichiers qui ne sont pas nécessaires pour le déploiement.

## Configuration des paramètres Composer
<a name="php-laravel-tutorial-configure"></a>

Lorsque le déploiement est terminé, cliquez sur l'URL pour ouvrir votre application Laravel dans le navigateur :

![403 Page d'erreur interdite indiquant que l'utilisateur n'est pas autorisé à accéder à la ressource demandée.](http://docs.aws.amazon.com/fr_fr/elasticbeanstalk/latest/dg/images/php-laravel-403.png)


De quoi s'agit-il ? Par défaut, Elastic Beanstalk constitue la racine de votre projet sur le chemin d'accès racine du site Web. Dans ce cas, cependant, la page par défaut (`index.php`) est un niveau en-dessous dans le dossier `public`. Vous pouvez vérifier cela en ajoutant `/public` à l'URL. Par exemple, `http://{{laravel}}.{{us-east-2}}.elasticbeanstalk.com/public`.

Pour servir l'application Laravel à la racine, utilisez la console Elastic Beanstalk afin de configurer la *racine du document* du site Web.

**Pour configurer la racine du document de votre site Web**

1. Ouvrez la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk), puis **dans la liste des régions, sélectionnez votre**. Région AWS

1. Dans le panneau de navigation, choisissez **Environments** (Environnements), puis choisissez le nom de votre environnement dans la liste.

1. Dans le panneau de navigation, choisissez **Configuration**.

1. Dans la catégorie de configuration **Mises à jour, surveillance et journalisation**, sélectionnez **Modifier**.

1. Pour **Racine du document**, entrez **/public**.

1. Pour enregistrer les modifications, cliquez sur **Appliquer** en bas de la page.

1. Lorsque la mise à jour est terminée, cliquez sur l'URL pour rouvrir votre site dans le navigateur.

![Logo Laravel avec éléments du menu de navigation : Documentation, Laracasts, News, Forge,. GitHub](http://docs.aws.amazon.com/fr_fr/elasticbeanstalk/latest/dg/images/php-laravel-defaultnodb.png)


Jusqu'ici, tout va bien. Vous ajoutez ensuite une base de données à votre environnement et vous configurez Laravel pour s'y connecter.

## Ajout d'une base de données à votre environnement
<a name="php-laravel-tutorial-database"></a>

Lancez une instance de base de données RDS dans votre environnement Elastic Beanstalk. Vous pouvez utiliser des bases de données MySQL ou PostgreSQL avec Laravel sur Elastic Beanstalk. SQLServer Pour cet exemple, nous utiliserons MySQL.

**Pour ajouter une instance de base de données RDS à votre environnement Elastic Beanstalk**

1. Ouvrez la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk), puis **dans la liste des régions, sélectionnez votre**. Région AWS

1. Dans le panneau de navigation, choisissez **Environments** (Environnements), puis choisissez le nom de votre environnement dans la liste.

1. Dans le panneau de navigation, choisissez **Configuration**.

1. Dans la catégorie de configuration **Database (Base de données)**, choisissez **Edit (Modifier)**.

1. Pour **Moteur**, choisissez **mysql**.

1. Saisissez un **nom d'utilisateur** principal et un **mot de passe**. Elastic Beanstalk fournit ces valeurs à votre application en utilisant les propriétés d'environnement.

1. Pour enregistrer les modifications, cliquez sur **Appliquer** en bas de la page.

La création d'une instance de base de données prend environ 10 minutes. Pour plus d'informations sur les bases de données couplées à un environnement Elastic Beanstalk, consultez [Ajout d'une base de données à votre environnement Elastic Beanstalk](using-features.managing.db.md).

En attendant, vous pouvez mettre à jour votre code source afin de lire les informations de connexion depuis l'environnement. Elastic Beanstalk fournit des détails de connexion en utilisant les variables d'environnement telles que `RDS_HOSTNAME` auxquelles vous pouvez accéder depuis votre application.

La configuration de la base de données Laravel est stockée dans un fichier nommé `database.php` dans le dossier `config` dans votre code de projet. Recherchez l'entrée `mysql` et modifiez les variables `host`, `database`, `username` et `and password` pour lire les valeurs correspondantes à partir d'Elastic Beanstalk :

**Example \~/Eb- .php laravel/config/database**  

```
...
    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('RDS_HOSTNAME', '127.0.0.1'),
            'port' => env('RDS_PORT', '3306'),
            'database' => env('RDS_DB_NAME', 'forge'),
            'username' => env('RDS_USERNAME', 'forge'),
            'password' => env('RDS_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
...
```

Pour vérifier que la connexion de base de données est configurée correctement, ajoutez le code à `index.php` pour vous connecter à la base de données et ajoutez du code à la réponse par défaut :

**Example \~/Eb- .php laravel/public/index**  

```
...
if(DB::connection()->getDatabaseName())
{
   echo "Connected to database ".DB::connection()->getDatabaseName();
}
$response->send();
...
```

Lorsque l'instance DB a terminé son lancement, regroupez et déployez l'application mise à jour dans votre environnement.

**Pour mettre à jour votre environnement Elastic Beanstalk**

1. Créez un nouveau groupe source :

   ```
   ~/eb-laravel$ zip ../laravel-v2-rds.zip -r * .[^.]* -x "vendor/*"
   ```

1. Ouvrez la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk), puis **dans la liste des régions, sélectionnez votre**. Région AWS

1. Dans le panneau de navigation, choisissez **Environments** (Environnements), puis choisissez le nom de votre environnement dans la liste.

1. Choisissez **Upload and Deploy** (Charger et déployer).

1. Choisissez **Browse (Parcourir)** et chargez `laravel-v2-rds.zip`.

1. Choisissez **Deploy** (Déployer).

Le déploiement d'une nouvelle version de votre application prend moins d'une minute. Lorsque le déploiement est terminé, actualisez la page web à nouveau pour vérifier que la connexion de base de données a abouti :

![Page d'accueil de l'application Laravel indiquant une connexion réussie à la base de données à ebdb.](http://docs.aws.amazon.com/fr_fr/elasticbeanstalk/latest/dg/images/php-laravel-defaultwdb.png)


## Nettoyage
<a name="php-laravel-tutorial-cleanup"></a>

Une fois que vous avez fini d'utiliser le code de démonstration, vous pouvez mettre fin à votre environnement. [Elastic Beanstalk supprime AWS toutes les ressources associées, telles que les instances [Amazon EC2, les instances de base de données, les équilibreurs](using-features.managing.ec2.md)[de charge, les groupes](using-features.managing.db.md) de sécurité et [les](using-features.managing.elb.md) alarmes.](using-features.alarms.md#using-features.alarms.title) 

La suppression de ressources ne supprime pas l'application Elastic Beanstalk. Vous pouvez donc créer de nouveaux environnements pour votre application à tout moment.

**Pour mettre fin à votre environnement Elastic Beanstalk depuis la console**

1. Ouvrez la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk), puis **dans la liste des régions, sélectionnez votre**. Région AWS

1. Dans le panneau de navigation, choisissez **Environments** (Environnements), puis choisissez le nom de votre environnement dans la liste.

1. Choisissez **Actions** (Actions), puis **Terminate Environment** (Résilier l’environnement).

1. Utilisez la boîte de dialogue à l'écran pour confirmer la résiliation de l'environnement.

Vous pouvez également arrêter les ressources de base de données que vous avez créées hors de votre environnement Elastic Beanstalk. Lorsque vous résiliez une instance de base de données Amazon RDS, vous pouvez prendre un instantané et restaurer les données dans une autre instance ultérieurement.

**Pour résilier votre instance DB RDS**

1. Ouvrez la [console Amazon RDS](https://console.aws.amazon.com/rds).

1. Choisissez **Databases** (Bases de données).

1. Sélectionnez votre instance DB.

1. Choisissez **Actions**, puis **Supprimer**.

1. Choisissez si vous souhaitez créer un instantané, puis choisissez **Delete** (Supprimer).

## Étapes suivantes
<a name="php-laravel-tutorial-nextsteps"></a>

Pour plus d'informations sur Laravel, consultez le site officiel à l'adresse [laravel.com](https://laravel.com/).

À mesure que vous continuez à développer votre application, vous souhaiterez probablement disposer d'une solution pour gérer des environnements et déployer votre application sans devoir créer un fichier .zip et le charger manuellement sur la console Elastic Beanstalk. L'interface de [ligne de commande Elastic Beanstalk](eb-cli3.md) (EB CLI easy-to-use) fournit des commandes pour créer, configurer et déployer des applications dans les environnements Elastic Beanstalk à partir de la ligne de commande.

Dans ce tutoriel, vous avez utilisé la console Elastic Beanstalk pour configurer les options du composeur. Pour que cette configuration fasse partie de votre source d'application, vous pouvez utiliser un fichier de configuration comme celui qui suit.

**Example .ebextensions/composer.config**  

```
option_settings:
  aws:elasticbeanstalk:container:php:phpini:
    document_root: /public
```

Pour de plus amples informations, veuillez consulter [Personnalisation d'environnement avancée avec fichiers de configuration (`.ebextensions`)](ebextensions.md).

L'exécution d'une instance de base de données Amazon RDS dans votre environnement Elastic Beanstalk est excellente pour le développement et les tests, mais elle lie le cycle de vie de votre base de données à votre environnement. Pour de plus amples informations sur la connexion à une base de données s'exécutant en dehors de votre environnement, consultez [Ajouter une instance de base de données Amazon RDS à votre environnement PHP Elastic Beanstalk](create_deploy_PHP.rds.md).

Enfin, si vous prévoyez d'utiliser votre application dans un environnement de production, vous devez [configurer un nom de domaine personnalisé](customdomains.md) pour votre environnement et [activer HTTPS](configuring-https.md) pour des connexions sécurisées.