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

Deployer Laravel sur GCP

Pourquoi Deployer Laravel sur GCP ?

L'importance d'un bon déploiement pour un projet Laravel est cruciale. En effet, il permet de rendre l'application accessible à vos utilisateurs et de garantir sa disponibilité 24h/24, 7j/7. Depuis Google Cloud Platform (GCP), vous disposez d'une plateforme puissante et scalable pour héberger vos applications Laravel.

Un cas d'utilisation concret serait un site de commerce électronique ou une application de gestion de projet nécessitant des performances élevées et une disponibilité maximale. GCP offre les ressources nécessaires pour gérer ces chargeuses demandes, tout en offrant une grande facilité d'utilisation et des coûts compétitifs.

Prerequis

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un compte Google Cloud Platform (GCP)
  • Laravel 8 ou plus récent installé sur votre machine locale
  • Composer pour gérer les dépendances PHP
  • Git pour le contrôle de version

Les outils à installer sont :

Concepts fondamentaux

1. Création d'un projet sur GCP

Pour démarrer, vous devez créer un nouveau projet sur GCP.

gcloud projects create mon-projet-laravel --set-as-default

2. Configuration de votre compte Google Cloud

Assurez-vous que le compte utilisé est configuré pour les services nécessaires.

gcloud auth login
gcloud config set project mon-projet-laravel

3. Création d'une instance Compute Engine

Vous aurez besoin d'une machine virtuelle pour héberger votre application Laravel.

gcloud compute instances create laravel-instance --zone=us-central1-a --machine-type=n1-standard-1 --scopes=https://www.googleapis.com/auth/cloud-platform

4. Installation de PHP et Composer sur l'instance

Connectez-vous à votre instance Compute Engine et installez les dépendances nécessaires.

gcloud compute ssh laravel-instance

## Mise à jour des paquets
sudo apt-get update && sudo apt-get upgrade -y

## Installation de PHP 8.1 et Composer
sudo apt-get install -y php8.1 php8.1-fpm php8.1-mysql php8.1-xml php8.1-zip unzip git curl

## Téléchargement et installation de Composer
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

## Configuration de PHP-FPM
sudo cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/www.conf.bak
sudo sed -i 's/user = www-data/user = laravel/' /etc/php/8.1/fpm/pool.d/www.conf
sudo sed -i 's/group = www-data/group = laravel/' /etc/php/8.1/fpm/pool.d/www.conf

## Installation des dépendances du projet Laravel
composer create-project --prefer-dist laravel/laravel my-laravel-app "v8.*"

Mise en pratique : projet fil rouge

Nous allons créer un simple gestionnaire de tâches avec Laravel. Voici les étapes pour mettre en place ce projet.

1. Initialisation du projet

Créez un nouveau projet Laravel et configurez la base de données.

composer create-project --prefer-dist laravel/laravel task-manager "v8.*"
cd task-manager

## Configuration de la base de données dans .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=root
DB_PASSWORD=password

2. Création d'une table pour les tâches

php artisan make:migration create_tasks_table --create=tasks

Dans le fichier database/migrations/xxxx_xx_xx_xxxxxx_create_tasks_table.php :

<?php

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

class CreateTasksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('description')->nullable();
            $table->boolean('completed')->default(false);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tasks');
    }
}

Exécutez la migration :

php artisan migrate

3. Création d'un modèle et une contrôleur

php artisan make:model Task -mcr

Dans app/Models/Task.php :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'description', 'completed'];
}

Dans app/Http/Controllers/TaskController.php :

<?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 = new Task;
        $task->title = $request->title;
        $task->description = $request->description;
        $task->save();
        return redirect()->route('tasks.index');
    }

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

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

    public function update(Request $request, Task $task)
    {
        $task->title = $request->title;
        $task->description = $request->description;
        $task->completed = $request->completed;
        $task->save();
        return redirect()->route('tasks.index');
    }

    public function destroy(Task $task)
    {
        $task->delete();
        return redirect()->route('tasks.index');
    }
}

4. Création des vues

Créez les vues dans resources/views/tasks/ :

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

Chaque vue doit être structurée pour afficher et modifier les tâches.

5. Configuration des routes

Ajoutez les routes dans routes/web.php :

<?php

use Illuminate\Support\Facades\Route;

Route::get('/tasks', [TaskController::class, 'index'])->name('tasks.index');
Route::get('/tasks/create', [TaskController::class, 'create'])->name('tasks.create');
Route::post('/tasks', [TaskController::class, 'store'])->name('tasks.store');
Route::get('/tasks/{task}', [TaskController::class, 'show'])->name('tasks.show');
Route::get('/tasks/{task}/edit', [TaskController::class, 'edit'])->name('tasks.edit');
Route::put('/tasks/{task}', [TaskController::class, 'update'])->name('tasks.update');
Route::delete('/tasks/{task}', [TaskController::class, 'destroy'])->name('tasks.destroy');

6. Déploiement sur GCP

Connectez-vous à votre instance Compute Engine et déployez l'application.

gcloud compute scp --recurse task-manager laravel-instance:~/
sudo cp -r ~/task-manager/* /var/www/html/
sudo chown -R www-data:www-data /var/www/html/

Créez un fichier nginx.conf pour Nginx :

sudo nano /etc/nginx/sites-available/default

Ajoutez le contenu suivant :

server {
    listen 80;
    server_name your_domain_or_ip;

    root /var/www/html/public;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

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

Redémarrez Nginx :

sudo systemctl restart nginx

Erreurs frequentes et debugging

1. Erreur : Class 'App\Http\Controllers\TaskController' not found

Ce problème peut se produire si le contrôleur n'est pas correctement importé.

Code incorrect :

class TaskController extends Controller
{
    // ...
}

Code correct :

namespace App\Http\Controllers;

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

class TaskController extends Controller
{
    // ...
}

2. Erreur : Migrations not found

Ce problème peut se produire si les migrations ne sont pas détectées.

Code incorrect :

php artisan migrate

Code correct :

php artisan migrate --path=database/migrations/

3. Erreur : Whoops, looks like something went wrong

Ce problème peut se produire si la configuration Nginx est incorrecte.

Code incorrect :

server {
    listen 80;
    server_name your_domain_or_ip;

    root /var/www/html/public;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

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

Code correct :

server {
    listen 80;
    server_name your_domain_or_ip;

    root /var/www/html/public;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

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

Pour aller plus loin

1. Utilisation de Kubernetes pour une formation sur le déploiement automatisé

Documentation Kubernetes

2. Intégration d'un système de monitoring et de gestion des erreurs

Laravel Nova

3. Sécurité et configuration de la sécurité

Best Practices Security for Laravel

Un défi pratique serait de créer une application API RESTful pour un blog en utilisant Laravel, qui comprend des fonctionnalités telles que la création, la lecture, la mise à jour et la suppression d'articles.

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 Google Cloud Platform (GCP) ?
Pour installer les dépendances nécessaires pour Laravel sur GCP, vous devez d'abord créer une instance virtuelle dans GCP et y installer PHP et Composer. Ensuite, clonner votre projet Laravel sur cette machine virtuelle et exécuter `composer install` pour installer toutes les dépendances du projet.
Quelle est la configuration recommandée pour un serveur web lors de l'hébergement de Laravel sur GCP ?
Pour une meilleure performance, il est recommandé d'utiliser Nginx comme serveur web. Vous devrez configurer Nginx pour servir votre application Laravel en utilisant le fichier de configuration `.env` fourni par Laravel et en assurant que les chemins vers les fichiers publics sont correctement définis.
Comment configurer la base de données MySQL sur GCP pour un projet Laravel ?
Pour configurer une base de données MySQL sur GCP, vous devez d'abord créer une instance SQL en utilisant le service Google Cloud SQL. Ensuite, dans votre fichier `.env` Laravel, spécifiez les informations de connexion à la base de données, y compris le nom de l'utilisateur, le mot de passe et le nom de la base de données.

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.