Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐘
Intermediaire 20 min Laravel

Deployer Laravel sur Heroku

Deployer Laravel sur Heroku : Un Tutoriel Approfondi

Pourquoi Deployer Laravel sur Heroku ?

Deployer Laravel sur Heroku est une option populaire pour les développeurs qui cherchent à déployer rapidement et facilement leurs applications PHP. Voici quelques raisons :

  • Scalabilité : Heroku permet de mettre à l'échelle facilement votre application en fonction du trafic.
  • Fournitures de service incluses : Heroku offre des services comme les bases de données, le stockage et la mise en cache intégrés.
  • Environnement hôte sécurisé : Les applications sont exécutées dans un environnement sécurisé avec une forte protection contre les attaques.

Un cas d'usage concret : Imaginez que vous développez une application de gestion des tâches pour une petite entreprise. Vous voulez déployer cette application rapidement et facilement, tout en ayant la possibilité de l'échelle si nécessaire. Deployer sur Heroku serait une solution idéale.

Prerequis

Avant de commencer, vous devez avoir les éléments suivants :

  • Connaissance approfondie de Laravel
  • Un compte Heroku
  • PHP 7.3 ou plus récent
  • Composer pour la gestion des dépendances
  • Git pour le contrôle de version

Les outils à installer sont :

## Installez Node.js (pour les assets)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
nvm install node
npm install -g yarn

## Installez Composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Concepts fondamentaux

1. Création de l'application Laravel

Pour créer une nouvelle application Laravel, utilisez Composer :

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

2. Configuration pour Heroku

Heroku nécessite quelques fichiers supplémentaires dans votre projet.

Procfile : Créez un fichier Procfile à la racine de votre projet avec le contenu suivant :

web: php artisan serve --host=0.0.0.0 --port=$PORT

composer.json : Ajoutez les dépendances nécessaires pour Heroku dans votre composer.json :

"require": {
    "php": "^7.3",
    "fideloper/proxy": "^4.0",
    "laravel/framework": "^8.0"
},
"require-dev": {
    "fakerphp/faker": "^1.9.1",
    "facade/ignition": "^2.5",
    "filp/whoops": "^2.7",
    "fzaninotto/faker": "^1.9.1",
    "friendsofphp/php-cs-fixer": "^3.0",
    "laravel/tinker": "^2.5"
},
"scripts": {
    "post-root-package-install": [
        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
        "@php artisan key:generate --force"
    ],
    "post-create-project-cmd": [
        "@php artisan migrate --seed --no-interaction"
    ]
}

runtime.txt : Ajoutez une ligne runtime.txt à la racine de votre projet avec le contenu suivant :

php-7.4

3. Configuration de la base de données

Heroku utilise PostgreSQL par défaut. Vous devez configurer Laravel pour utiliser cette base de données.

.env.example et .env : Modifiez les fichiers .env.example et .env pour ajouter les configurations suivantes :

DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=${PGDATABASE}
DB_USERNAME=${PGUSER}
DB_PASSWORD=${PGPASSWORD}

Création du fichier de base de données Heroku : Ajoutez un fichier database.php dans le répertoire config/database.php pour configurer les paramètres de connexion :

<?php

return [
    'default' => env('DB_CONNECTION', 'pgsql'),

    'connections' => [
        'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],
    ],
];

Mise en pratique : projet fil rouge

Nous allons créer un gestionnaire de tâches simple avec Laravel.

1. Création du modèle Task

php artisan make:model Task -m

2. Migration pour la table tasks

Modifier 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('name');
            $table->text('description')->nullable();
            $table->boolean('completed')->default(false);
            $table->timestamps();
        });
    }

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

3. Exécution de la migration

php artisan migrate

4. Création du contrôleur TaskController

php artisan make:controller TaskController --resource

5. Ajout des routes dans web.php

Modifier le fichier routes/web.php :

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

6. Création de la vue pour les tâches

Créez un répertoire resources/views/tasks et ajoutez le fichier index.blade.php :

@extends('layouts.app')

@section('content')
<div class="container">
    <h1>Tâches</h1>
    <a href="route('tasks.create')" class="btn btn-primary mb-3">Nouvelle tâche</a>
    <table class="table">
        <thead>
            <tr>
                <th>Nom</th>
                <th>Description</th>
                <th>Statut</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($tasks as $task)
            <tr>
                <td>$task->name</td>
                <td>$task->description ?? '-'</td>
                <td>$task->completed ? 'Terminée' : 'En cours'</td>
                <td>
                    <a href="route('tasks.edit', $task)" class="btn btn-sm btn-primary">Éditer</a>
                    <form action="route('tasks.destroy', $task)" method="POST" style="display: inline;">
                        @csrf
                        @method('DELETE')
                        <button type="submit" class="btn btn-sm btn-danger">Supprimer</button>
                    </form>
                </td>
            </tr>
            @endforeach
        </tbody>
    </table>
</div>
@endsection

7. Ajout de la vue pour la création et l'édition des tâches

Créez les fichiers create.blade.php et edit.blade.php dans le répertoire resources/views/tasks.

8. Configuration du fichier .env

Ajoutez les variables d'environnement nécessaires pour Heroku :

DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=${PGDATABASE}
DB_USERNAME=${PGUSER}
DB_PASSWORD=${PGPASSWORD}

9. Push sur Heroku

Connectez-vous à votre compte Heroku et créez une nouvelle application :

heroku create task-manager-app
git init
git add .
git commit -m "Initial commit"
git push heroku master

Erreurs frequentes et debugging

1. The Mix manifest does not exist.

Code incorrect :

npm run dev

Code correct :

npm install --global laravel-mix
npm run production
git add .
git commit -m "Update package.json"
git push heroku master

2. PDOException: could not find driver

Code incorrect :

// config/database.php
'driver' => 'pgsql',

Code correct :

Ajoutez la extension PostgreSQL à votre fichier composer.json :

"require": {
    "ext-pgsql": "*"
}

3. Call to undefined function App\Providers\AppServiceProvider::boot()

Code incorrect :

public function boot()
{
    //
}

Code correct :

Ajoutez le namespace :

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        //
    }
}

Pour aller plus loin

1. Utilisation de Docker pour Laravel

Découvrez comment utiliser Docker pour développer et déployer vos applications Laravel.

2. Optimisation des performances sur Heroku

Apprenez à optimiser les performances de votre application Laravel sur Heroku en utilisant les services inclus par défaut.

3. Création d'une API RESTful avec Laravel

Développez une API RESTful pour gérer vos tâches à l'aide de Laravel.

Défi pratique : Créer un scraper avec Laravel

Construire un simple scraper qui récupère des données depuis une page web et les stocke dans une base de données.


Ce tutoriel a couvert les aspects essentiels du déploiement d'une application Laravel sur Heroku. Vous devriez maintenant être en mesure de déployer vos propres applications sur cette plateforme puissante et flexible. N'oubliez pas de consulter la documentation officielle de Laravel et de Heroku pour plus de ressources et d'aide.

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 Composer sur Heroku ?
Pour installer Composer sur Heroku, vous devez utiliser le processus de buildpack. Vous pouvez spécifier un fichier 'composer.json' dans votre projet Laravel et Heroku va s'en occuper automatiquement.
Quels sont les étapes pour déployer une application Laravel sur Heroku ?
La première étape est de créer un compte Heroku. Ensuite, vous initialisez le dépôt Git dans votre projet Laravel et utilisez la commande 'heroku create' pour créer une nouvelle application sur Heroku. Enfin, vous pouvez déployer votre application en utilisant 'git push heroku master'.
Comment configurer les variables d'environnement sur Heroku ?
Les variables d'environnement peuvent être définies sur Heroku via la commande 'heroku config:set VARIABLE_NAME=value' dans votre terminal. Elles sont ensuite accessibles dans votre application Laravel en utilisant 'env('VARIABLE_NAME')'.

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.