Déploiement d'une application Laravel sur Elastic Beanstalk - AWS Elastic Beanstalk

Déploiement d'une application Laravel sur Elastic Beanstalk

Laravel est une infrastructure open source, modèle-vue-contrôleur (MVC) pour PHP. Ce didacticiel vous guide tout au long du processus de génération d'une application Laravel, de son déploiement dans un environnement AWS Elastic Beanstalk et de sa configuration pour se connecter à une instance de base de données Amazon Relational Database Service (Amazon RDS).

Prérequis

Ce didacticiel suppose que vous avez des connaissances de base des opérations Elastic Beanstalk et de la console Elastic Beanstalk. Si ce n'est pas déjà fait, suivez les instructions dans Mise en route avec Elastic Beanstalk pour lancer votre premier environnement Elastic Beanstalk.

Pour suivre les procédures décrites dans ce manuel, 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

Sur Linux et macOS, utilisez votre gestionnaire de shell et de package préféré. Sur Windows 10, vous pouvez installer le sous-système Windows pour Linux afin d'obtenir une version intégrée à Windows d'Ubuntu et Bash.

Laravel a besoin de PHP 5.5.9 ou version ultérieure, et de l'extension mbstring pour PHP. Dans ce didacticiel, nous utilisons PHP 7.0 et la version de la plateforme Elastic Beanstalk correspondante. Installez PHP et Composer en suivant les instructions de la section Configuration de votre environnement de développement PHP.

Lancement d'un environnement Elastic Beanstalk

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 en utilisant le lien préconfiguré suivant : console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced

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

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

  4. Choisissez Vérifier et lancer.

  5. Passez en revue les options disponibles. Choisissez l'option disponible que vous souhaitez utiliser et, une fois que vous êtes prêt, choisissez 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 aux 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 mise hors service 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.

  • Alarmes Amazon CloudWatch – Deux alarmes CloudWatch qui contrôlent la charge sur les instances de votre environnement et qui se déclenchent 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.

  • Pile AWS CloudFormation – Elastic Beanstalk utilise AWS CloudFormation pour lancer les ressources dans votre environnement et pour propager les modifications de configuration. Les ressources sont définies dans un modèle, que vous pouvez afficher dans la console AWS CloudFormation.

  • Nom de domaine – Nom de domaine qui permet d'accéder à votre application web sous la forme subdomain.region.elasticbeanstalk.com.

Toutes ces ressources sont gérées par Elastic Beanstalk. Lorsque vous suspendez votre environnement, Elastic Beanstalk suspend 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 la résiliation de l'environnement. Pour de plus amples informations, veuillez consulter Utilisation d'Elastic Beanstalk avec Amazon S3.

Installation de Laravel et génération d'un site web

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

~$ composer create-project --prefer-dist laravel/laravel eb-laravel Installing laravel/laravel (v5.5.28) - Installing laravel/laravel (v5.5.28): Downloading (100%) Created project in eb-laravel > @php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 70 installs, 0 updates, 0 removals - Installing symfony/thanks (v1.0.7): Downloading (100%) - Installing hamcrest/hamcrest-php (v2.0.0): Downloading (100%) - Installing mockery/mockery (1.0): Downloading (100%) - Installing vlucas/phpdotenv (v2.4.0): Downloading (100%) - Installing symfony/css-selector (v3.4.8): Downloading (100%) - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Downloading (100%) ...

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, accédez à la rubrique d'installation dans la documentation officielle : https://laravel.com/docs/5.2

Déploiement de votre application

Créez un bundle source 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 la solution groupée source dans Elastic Beanstalk pour déployer Laravel dans votre environnement.

Pour déployer un groupe source

  1. Ouvrez la console Elastic Beanstalk, puis, dans la liste Régions, sélectionnez votre région AWS.

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

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

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

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

  5. Choisissez Deploy (Déployer).

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

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

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 dans le chemin d'accès racine, utilisez la console Elastic Beanstalk pour configurer le document racine du site Web.

Pour configurer la racine du document de votre site web

  1. Ouvrez la console Elastic Beanstalk, puis, dans la liste Régions, sélectionnez votre région AWS.

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

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  3. Dans le panneau de navigation, choisissez Configuration.

  4. Dans la catégorie de configuration Software (Logiciels), choisissez Edit (Modifier).

  5. Pour Racine du document, entrez /public.

  6. Choisissez Apply.

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

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

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

Note

L'exécution d'une instance 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 plus d'informations sur la connexion à une base de données s'exécutant en dehors de votre environnement, consultez Lancement et connexion d'une instance Amazon RDS externe dans un VPC par défaut.

Pour ajouter une instance DB RDS à votre environnement Elastic Beanstalk

  1. Ouvrez la console Elastic Beanstalk, puis, dans la liste Régions, sélectionnez votre région AWS.

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

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  3. Dans le panneau de navigation, choisissez Configuration.

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

  5. Pour Moteur, choisissez mysql.

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

  7. Choisissez Apply.

La création d'une instance de base de données prend environ 10 minutes. 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 :

Exemple ~/Eb-laravel/config/database.php

... '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 :

Exemple ~/Eb-laravel/public/index.php

... 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/*"
  2. Ouvrez la console Elastic Beanstalk, puis, dans la liste Régions, sélectionnez votre région AWS.

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

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  4. Choisissez Upload and Deploy.

  5. Choisissez Browse (Parcourir) et chargez laravel-v2-rds.zip.

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

Nettoyage

Lorsque vous cessez d'utiliser Elastic Beanstalk, vous pouvez résilier votre environnement. Elastic Beanstalk résilie toutes les ressources AWS associées à votre environnement, telles que les instances Amazon EC2, les instances de base de données, les équilibreurs de charge, les groupes de sécurité et les alarmes.

Pour résilier votre ancien environnement Elastic Beanstalk

  1. Ouvrez la console Elastic Beanstalk, puis, dans la liste Régions, sélectionnez votre région AWS.

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

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  3. Choisissez Actions dans l’environnement, puis Terminate Environment (Résilier l’environnement).

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

Avec Elastic Beanstalk, vous pouvez facilement créer un nouvel environnement pour votre application à tout moment.

Vous pouvez également suspendre 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 .

  2. Choisissez Bases de données.

  3. Sélectionnez votre instance DB.

  4. Choisissez Actions, puis choisissez Delete.

  5. Choisissez si vous souhaitez créer un instantané, puis choisissez Supprimer.

Étapes suivantes

Pour plus d'informations sur Laravel, consultez le didacticiel à l'adresse suivante : laravel.com.

A mesure que vous continuez à développer votre application, vous souhaiterez probablement un moyen de gérer des environnements et de déployer votre application sans devoir créer manuellement un fichier .zip et le télécharger sur la console Elastic Beanstalk. L'interface de ligne de commande Elastic Beanstalk (CLI EB) fournit des commandes faciles à utiliser pour la création, la configuration et le déploiement d'applications dans des environnements Elastic Beanstalk à partir de la ligne de commande.

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

Exemple .ebextensions/composer.config

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

Pour plus d'informations, consultez Personnalisation d'environnement avancée avec fichiers de configuration (.ebextensions).

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, veuillez consulter Ajout d'une instance de base de données Amazon RDS à votre environnement d'application PHP.

Enfin, si vous prévoyez d'utiliser votre application dans un environnement de production, vous devez configurer un nom de domaine personnalisé pour votre environnement et activer HTTPS pour des connexions sécurisées.