Nouveau : Datasets open source gratuits disponibles !Decouvrir →
☁️
Intermediaire 25 min Laravel

Deployer Laravel sur AWS

Pourquoi Deployer Laravel sur AWS ?

L'Amazon Web Services (AWS) est la plus grande plateforme cloud mondialement, offrant une variété de services et d'outils puissants pour développer, déployer et gérer des applications web. En tant que développeur Laravel senior avec 10+ ans d'expérience, vous savez qu'un déploiement sur AWS peut offrir plusieurs avantages :

  • Elasticité : AWS permet de gérer l'échelle dynamique de votre application en ajoutant ou en retirant des instances de serveurs.
  • Haute disponibilité : En utilisant les services AWS comme EC2, RDS et S3, vous pouvez assurer la disponibilité élevée et la tolérance aux pannes.
  • Sécurité : AWS offre une série d'outils et de services pour protéger vos applications contre les menaces en ligne.

Un cas concret serait le déploiement d'une application web de gestion de projet, où vous avez besoin d'un système capable de gérer des milliers de projets par jour. Avec AWS, vous pouvez facilement augmenter ou diminuer la capacité de votre serveur en fonction du volume de travail.

Prerequis

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

  • Connaissances : Laravel, PHP, Nginx, Composer, Git.
  • Outils à installer :
    • Node.js (pour les outils d'administration)
    • AWS CLI
    • Composer
    • Git

Concepts fondamentaux

1. EC2 Instance

L'Instance EC2 est la base de l'hébergement sur AWS. Vous pouvez choisir une image Linux pour votre serveur et installer tout ce dont vous avez besoin.

## Créer une instance EC2 via AWS CLI
aws ec2 run-instances --image-id ami-0c55b159cbfafe1f0 --count 1 --instance-type t2.micro --key-name mon-key-pair

2. RDS (Relational Database Service)

AWS RDS vous permet de gérer des bases de données relationnelles directement dans le cloud.

## Créer une base de données RDS via AWS CLI
aws rds create-db-instance --db-instance-identifier mon-db-instance --allocated-storage 20 --instance-class db.t2.micro --engine mysql --master-username admin --master-user-password password

3. S3 (Simple Storage Service)

S3 est un service d'objets stockage de masse, idéal pour stocker des fichiers statiques.

## Créer un bucket S3 via AWS CLI
aws s3 mb s3://mon-bucket

Mise en pratique : Projet fil rouge

Nous allons créer une application de gestion de tâches simple. Voici les étapes :

1. Initialisation du projet

## Créer un nouveau projet Laravel
composer create-project --prefer-dist laravel/laravel task-manager

## Naviguer dans le répertoire du projet
cd task-manager

2. Configuration de la base de données

Modifier les paramètres de connexion à la base de données dans .env :

DB_CONNECTION=mysql
DB_HOST=mon-db-instance.c9i3qj8z67xw.us-east-1.rds.amazonaws.com
DB_PORT=3306
DB_DATABASE=task_manager
DB_USERNAME=admin
DB_PASSWORD=password

3. Création d'une migration pour la table des tâches

php artisan make:migration create_tasks_table --create=tasks

Editer database/migrations/xxxx_xx_xx_xxxxxx_create_tasks_table.php :

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTasksTable extends Migration
{
    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('description')->nullable();
            $table->boolean('completed')->default(false);
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('tasks');
    }
}

4. Migration et seeding des données

php artisan migrate

## Créer une fabrique pour les tâches
php artisan make:factory TaskFactory --model=Task

## Remplir la base de données avec du seed
php artisan make:seeder TasksTableSeeder

## Editer `database/seeders/TasksTableSeeder.php`
use App\Models\Task;
use Illuminate\Database\Seeder;

class TasksTableSeeder extends Seeder
{
    public function run()
    {
        Task::factory(50)->create();
    }
}

## Exécuter le seeder
php artisan db:seed --class=TasksTableSeeder

5. Création d'un contrôleur pour les tâches

php artisan make:controller TaskController

Editer app/Http/Controllers/TaskController.php :

namespace App\Http\Controllers;

use App\Models\Task;
use Illuminate\Http\Request;

class TaskController extends Controller
{
    public function index()
    {
        $tasks = Task::all();
        return view('tasks.index', compact('tasks'));
    }

    public function create()
    {
        return view('tasks.create');
    }

    public function store(Request $request)
    {
        Task::create($request->all());
        return redirect()->route('tasks.index')->with('success', 'Tâche créée avec succès.');
    }

    public function show(Task $task)
    {
        return view('tasks.show', compact('task'));
    }
}

6. Création des vues

Créer les fichiers de vue dans resources/views/tasks :

  • index.blade.php
  • create.blade.php
  • show.blade.php

7. Configuration du routeur

Editer routes/web.php :

use App\Http\Controllers\TaskController;

Route::resource('tasks', TaskController::class);

8. Déploiement sur AWS

8.1 Configurer la machine EC2

Connectez-vous à votre instance EC2 via SSH et installez les dépendances nécessaires :

## Installer Nginx, PHP, Composer et Git
sudo apt update
sudo apt install nginx php-fpm php-mysql composer git

## Configurer Nginx pour Laravel
sudo nano /etc/nginx/sites-available/task-manager

server {
    listen 80;
    server_name yourdomain.com;

    root /var/www/html/task-manager/public;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # Ajustez la version de PHP si nécessaire
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

## Activer le site et redémarrer Nginx
sudo ln -s /etc/nginx/sites-available/task-manager /etc/nginx/sites-enabled/
sudo systemctl restart nginx

## Installer les dépendances de Composer
cd /var/www/html/task-manager
composer install --no-dev --optimize-autoloader

## Créer un lien symbolique pour le public
ln -s /var/www/html/task-manager/public /var/www/html/task-manager/public_html

8.2 Déploiement via Git

## Sur votre machine locale, ajouter une remote AWS dans votre dépôt Git
git remote add aws ec2-user@your-ec2-ip:/var/www/html/task-manager

## Pusher les modifications sur AWS
git push aws master

Erreurs frequentes et debugging

1. Accès refusé à la base de données

Message d'erreur :

PDOException in Connector.php line 58: SQLSTATE[28000] [1045] Access denied for user 'admin'@'your-ec2-ip' (using password: YES)

Code incorrect :

DB_PASSWORD=password

Code correct :

DB_PASSWORD=your-password

2. Erreur de configuration Nginx

Message d'erreur :

nginx: [emerg] open() "/var/www/html/task-manager/storage/logs/laravel.log" failed (13: Permission denied)

Code incorrect :

sudo chown -R www-data:www-data /var/www/html/task-manager/storage/logs

Code correct :

sudo chown -R ec2-user:ec2-user /var/www/html/task-manager/storage/logs

3. Erreur de connexion à la base de données

Message d'erreur :

SQLSTATE[HY000] [2002] No such file or directory

Code incorrect :

DB_HOST=localhost

Code correct :

DB_HOST=your-db-instance.c9i3qj8z67xw.us-east-1.rds.amazonaws.com

Pour aller plus loin

1. Utilisation d'AWS Elastic Beanstalk

Elastic Beanstalk simplifie le déploiement et l'échelle automatique des applications web.

2. Configuration de CloudFront pour un accès rapide

CloudFront est un service de distribution de contenu en streaming à travers le monde.

3. Sécurité des données avec AWS Secrets Manager

Secrets Manager permet de stocker et gérer les secrets d'application de manière sécurisée.

Défi pratique : Créez une application API RESTful utilisant Laravel qui utilise un service AWS (comme S3 ou RDS) pour stocker et récupérer des données. Assurez-vous que l'application est déployée sur AWS EC2 et accédez à elle via Internet.

Besoin d'aide sur Laravel ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Comment installer les dépendances nécessaires pour Laravel sur AWS EC2?
Pour installer les dépendances nécessaires, connectez-vous à votre instance EC2 via SSH et exécutez la commande `composer install` dans le répertoire de votre projet Laravel.
Quel est le meilleur type d'instance AWS pour un environnement de développement Laravel?
Le choix du type d'instance dépend des besoins de votre application, mais une instance EC2 t2.medium ou plus grande sera généralement suffisante pour un développement initial. Assurez-vous de vérifier les spécifications en fonction du nombre de packages Composer à installer et du volume de données.
Comment configurer le serveur web Apache pour servir mon application Laravel?
Pour configurer Apache, vous devez créer un fichier de configuration virtuel. Ajoutez-le dans le répertoire `/etc/apache2/sites-available/` et activez-le avec `a2ensite`. N'oubliez pas d'activer les modules nécessaires comme mod_rewrite avec `a2enmod rewrite`, puis redémarrez Apache avec `systemctl restart apache2`.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.