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

Deployer Laravel sur DigitalOcean

Pourquoi Deployer Laravel sur DigitalOcean ?

Deployer Laravel sur DigitalOcean est une pratique courante pour les développeurs qui cherchent à déployer leurs applications web en production. Cette plateforme offre un environnement robuste et fiable, permettant de gérer facilement la mise à l'échelle de vos applications. Un cas concret serait le déploiement d'une application de gestion de projets pour une petite entreprise où la performance et la fiabilité sont essentielles.

Prerequis

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

  • Connaissances :

    • Familiarité avec Laravel
    • Connaissance de l'infrastructure en nuage (Cloud)
    • Basic understanding of Git
  • Outils à installer :

    • Node.js (v14.x ou v16.x) pour les packages npm
    • Composer pour les dépendances PHP
    • Docker (facultatif, mais recommandé pour la gestion des environnements de développement)
    • Git
    • SSH client pour interagir avec votre serveur DigitalOcean

Concepts fondamentaux

1. Environnement Cloud

Le cloud est un modèle de calcul où les ressources informatiques (par exemple, le stockage, le réseau et le traitement) sont décentralisées et accessibles via Internet. Il offre plusieurs avantages :

  • Élasticité : La capacité à augmenter ou diminuer le nombre de ressources en fonction de la demande.
  • Fiabilité : Les données et les services sont hébergés sur des milliers d'ordinateurs, réduisant ainsi les risques de pannes.
  • Coût-éfficacité : Il permet de payer uniquement ce qui est utilisé.

2. DigitalOcean

DigitalOcean est une entreprise spécialisée dans la fourniture de serveurs cloud et d'hébergement. Il offre des instances virtuelles (droplets), qui sont des environnements dédiés à votre application. Les avantages principaux sont :

  • Facilité d'utilisation : Une interface graphique intuitive.
  • Principe pay-as-you-go : Vous payez uniquement pour les ressources que vous utilisez.
  • Diversité géographique : Des centres de données répartis dans le monde entier, permettant une meilleure disponibilité.

3. Configuration Web Server

Laravel utilise Nginx comme serveur web par défaut. Il est conçu pour être rapide et efficace. Vous aurez besoin de configurer Nginx pour servir votre application Laravel.

server {
    listen 80;
    server_name yourdomain.com;

    root /path/to/your/laravel/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 PHP selon votre configuration
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

4. Base de données

Laravel utilise MySQL ou PostgreSQL comme base de données par défaut. Vous aurez besoin d'installer et de configurer une base de données sur votre serveur.

## Installer MySQL
sudo apt update
sudo apt install mysql-server

## Configurer MySQL
sudo mysql_secure_installation

Mise en pratique : Projet fil rouge

Nous allons créer un simple gestionnaire de tâches. Voici les étapes pour le mettre en place :

1. Créer un nouveau projet Laravel

composer create-project --prefer-dist laravel/laravel task-manager
cd task-manager

2. Configurer la base de données

Modifiez le fichier .env pour configurer votre base de données MySQL.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=task_manager
DB_USERNAME=root
DB_PASSWORD=your_password

3. Créer une migration pour la table des tâches

php artisan make:migration create_tasks_table --create=tasks

Editez la migration 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
{
    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();
        });
    }

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

4. Migrer la base de données

php artisan migrate

5. Créer un modèle et une migration pour les tâches

php artisan make:model Task -m

Editez 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
{
    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();
        });
    }

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

6. Créer une migration pour les utilisateurs

php artisan make:model User -m

Editez database/migrations/xxxx_xx_xx_xxxxxx_create_users_table.php :

<?php

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

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

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

7. Migrer les tables

php artisan migrate

8. Créer un contrôleur pour les tâches

php artisan make:controller TaskController

Editez app/Http/Controllers/TaskController.php :

<?php

namespace App\Http\Controllers;

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

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($id)
    {
        $task = Task::find($id);
        return view('tasks.show', compact('task'));
    }

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

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

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

9. Créer les vues

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

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

Exemple resources/views/tasks/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>ID</th>
                <th>Titre</th>
                <th>Description</th>
                <th>Statut</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($tasks as $task)
            <tr>
                <td>$task->id</td>
                <td>$task->title</td>
                <td>$task->description</td>
                <td>$task->completed ? 'Terminée' : 'En cours'</td>
                <td>
                    <a href="route('tasks.edit', $task->id)" class="btn btn-primary">Éditer</a>
                    <form action="route('tasks.destroy', $task->id)" method="POST" style="display:inline">
                        @csrf
                        @method('DELETE')
                        <button type="submit" class="btn btn-danger" onclick="return confirm('Voulez-vous supprimer cette tâche ?')">Supprimer</button>
                    </form>
                </td>
            </tr>
            @endforeach
        </tbody>
    </table>
</div>
@endsection

10. Configurer les routes

Modifiez routes/web.php :

use App\Http\Controllers\TaskController;

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/{id}', [TaskController::class, 'show'])->name('tasks.show');
Route::get('/tasks/{id}/edit', [TaskController::class, 'edit'])->name('tasks.edit');
Route::put('/tasks/{id}', [TaskController::class, 'update'])->name('tasks.update');
Route::delete('/tasks/{id}', [TaskController::class, 'destroy'])->name('tasks.destroy');

11. Configurer le modèle et la migration pour les utilisateurs

Modifiez app/Models/User.php :

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];
}

Modifiez database/migrations/xxxx_xx_xx_xxxxxx_create_users_table.php :

<?php

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

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

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

12. Configurer l'authentification

php artisan make:auth

Modifiez routes/web.php :

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Erreurs frequentes et debugging

1. Erreur : "Class 'Task' not found"

Code incorrect :

use App\Models\Tasks;

Code correct :

use App\Models\Task;

2. Erreur : "SQLSTATE[42S02]: Base table or view not found: 1146 Table 'yourdatabase.tasks' doesn't exist"

Code incorrect :

php artisan migrate

Code correct :

Assurez-vous que la base de données est correctement configurée dans le fichier .env et que les migrations sont bien écrites.

3. Erreur : "Whoops, looks like something went wrong."

Code incorrect :

php artisan serve

Code correct :

Assurez-vous que Nginx est bien configuré pour servir votre application Laravel et que les permissions des fichiers sont correctes.

Pour aller plus loin

  1. Gestion des déploiements automatisés avec GitHub Actions ou GitLab CI/CD
  2. Utilisation de Docker pour la gestion des environnements de développement
  3. Intégration continue (CI) et livraison continue (CD)

Défi pratique

Déployez votre application Laravel sur DigitalOcean en suivant les étapes décrites dans ce tutoriel. Assurez-vous que tout fonctionne correctement, y compris l'authentification et les routes.

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 DigitalOcean?
Pour installer Composer sur DigitalOcean, vous pouvez utiliser la commande suivante : curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer. Assurez-vous ensuite d'ajouter /usr/local/bin à votre variable PATH.
Quel est le chemin du fichier .env dans Laravel?
Le fichier .env se trouve dans la racine de votre projet Laravel. Il contient des variables d'environnement nécessaires pour l'application.
Comment configurer la base de données dans Laravel sur DigitalOcean?
Pour configurer la base de données, ouvrez le fichier .env et modifiez les lignes suivantes : DB_CONNECTION=mysql, DB_HOST=127.0.0.1, DB_PORT=3306, DB_DATABASE=votre_nom_de_base_de_donnees, DB_USERNAME=votre_nom_utilisateur, DB_PASSWORD=votre_mot_de_passe.

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.