Serveurs Dédiés & VPS15 décembre 2025 4 vues

Comment installer Laravel sur un VPS Linux (Debian 13 / Ubuntu 24.04)

Comment installer Laravel sur un VPS Linux (Debian 13 / Ubuntu 24.04)

Comment installer Laravel sur un VPS Linux (Debian 13 / Ubuntu 24.04)

Temps estimé : 30-45 minutes
Difficulté : Intermédiaire ⭐⭐
Système : Debian 13 (Trixie) / Ubuntu 24.04 LTS


📋 Introduction

Ce guide vous explique comment installer Laravel 12 (dernière version) sur un VPS Linux avec Debian 13 ou Ubuntu 24.04. À la fin de ce tutoriel, vous aurez un environnement de production prêt avec :

  • PHP 8.3 (requis pour Laravel 12)
  • Composer (gestionnaire de dépendances PHP)
  • Nginx (serveur web haute performance)
  • MariaDB (base de données)
  • Laravel 12 (framework PHP)

Prérequis

Prérequis Description
🖥️ VPS Linux Debian 13 ou Ubuntu 24.04 avec accès root
🔑 Accès SSH Connexion en root ou utilisateur sudo
🌐 Nom de domaine (Optionnel) Pour accéder via une URL
💾 RAM Minimum 1 Go recommandé
💿 Stockage Minimum 10 Go

Configuration requise pour Laravel 12

Composant Version minimale
PHP 8.2 (8.3 ou 8.4 recommandé)
Composer 2.x
Base de données MySQL 5.7+ / MariaDB 10.3+ / PostgreSQL 10+ / SQLite 3.26+

🔄 Étape 1 : Mettre à Jour le Système

Avant toute installation, mettez à jour votre système.

Connexion SSH

ssh root@votre-ip-serveur

Mise à jour des paquets

# Mettre à jour la liste des paquets
apt update

# Mettre à niveau les paquets installés
apt upgrade -y

Résultat attendu : Tous les paquets sont à jour.


🐘 Étape 2 : Installer PHP 8.3

Laravel 12 nécessite PHP 8.2 minimum. Nous allons installer PHP 8.3 pour de meilleures performances.

Pour Debian 13

Debian 13 (Trixie) inclut PHP 8.4 par défaut. Pour installer PHP 8.3, ajoutez le dépôt Sury :

# Installer les dépendances
apt install -y apt-transport-https lsb-release ca-certificates curl gnupg


# Télécharger la clé GPG du dépôt Sury
curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/sury-php.gpg


# Ajouter le dépôt Sury
echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list


# Mettre à jour la liste des paquets
apt update

Pour Ubuntu 24.04

Ubuntu 24.04 inclut PHP 8.3 par défaut. Si vous souhaitez une version plus récente, ajoutez le PPA Ondřej :

# Installer les dépendances
apt install -y software-properties-common


# Ajouter le PPA PHP (optionnel pour PHP 8.4)
add-apt-repository ppa:ondrej/php -y


# Mettre à jour la liste des paquets
apt update

Installer PHP 8.3 et les extensions requises

apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-common \
    php8.3-mysql php8.3-pgsql php8.3-sqlite3 \
    php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml \
    php8.3-zip php8.3-bcmath php8.3-intl php8.3-readline \
    php8.3-tokenizer php8.3-opcache
Extension Utilité
php8.3-fpm FastCGI Process Manager (pour Nginx)
php8.3-mysql Connexion MySQL/MariaDB
php8.3-curl Requêtes HTTP
php8.3-gd Manipulation d'images
php8.3-mbstring Chaînes multibytes (UTF-8)
php8.3-xml Traitement XML
php8.3-zip Compression ZIP
php8.3-bcmath Calculs de précision
php8.3-intl Internationalisation

Vérifier l'installation

php -v

Résultat attendu :

PHP 8.3.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.3.x, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.x, Copyright (c), by Zend Technologies

📦 Étape 3 : Installer Composer

Composer est le gestionnaire de dépendances PHP, indispensable pour Laravel.

Télécharger et installer Composer

# Télécharger l'installateur
curl -sS https://getcomposer.org/installer -o composer-setup.php


# Installer Composer globalement
php composer-setup.php --install-dir=/usr/local/bin --filename=composer


# Supprimer l'installateur
rm composer-setup.php

Vérifier l'installation

composer --version

Résultat attendu :

Composer version 2.x.x 2024-xx-xx xx:xx:xx

🌐 Étape 4 : Installer Nginx

Nginx est un serveur web performant, idéal pour Laravel.

Installer Nginx

apt install -y nginx

Démarrer et activer Nginx

# Démarrer Nginx
systemctl start nginx
# Activer au démarrage
systemctl enable nginx
# Vérifier le statut
systemctl status nginx

Résultat attendu :

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; ...)
     Active: active (running) since ...

Tester Nginx

Ouvrez votre navigateur et accédez à http://votre-ip-serveur. Vous devriez voir la page par défaut de Nginx.


🗄️ Étape 5 : Installer MariaDB

MariaDB est une base de données compatible MySQL, performante et open source.

Installer MariaDB

apt install -y mariadb-server mariadb-client

Démarrer et activer MariaDB

# Démarrer MariaDB
systemctl start mariadb
# Activer au démarrage
systemctl enable mariadb
# Vérifier le statut
systemctl status mariadb

Sécuriser l'installation

mysql_secure_installation

Répondez aux questions :

Question Réponse recommandée
Enter current password for root Appuyez sur Entrée (vide)
Switch to unix_socket authentication n
Change the root password Y puis entrez un mot de passe fort
Remove anonymous users Y
Disallow root login remotely Y
Remove test database Y
Reload privilege tables Y

Créer une base de données pour Laravel

# Se connecter à MariaDB
mysql -u root -p
-- Créer la base de données
CREATE DATABASE laravel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Créer un utilisateur
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'VotreMotDePasseSecurise123!';

-- Donner les permissions
GRANT ALL PRIVILEGES ON laravel.* TO 'laravel_user'@'localhost';

-- Appliquer les changements
FLUSH PRIVILEGES;

-- Quitter
EXIT;

📝 Notez : Gardez ces informations pour la configuration de Laravel :

  • Base de données : laravel
  • Utilisateur : laravel_user
  • Mot de passe : VotreMotDePasseSecurise123!

🚀 Étape 6 : Installer Laravel 12

Créer le répertoire du projet

# Créer le dossier pour les sites web
mkdir -p /var/www

# Aller dans le répertoire
cd /var/www

Installer Laravel via Composer

composer create-project laravel/laravel monsite

💡 Remplacez monsite par le nom de votre projet.

Résultat attendu :

Creating a "laravel/laravel" project at "./monsite"
Installing laravel/laravel (v12.x.x)
  - Downloading laravel/laravel (v12.x.x)
  - Installing laravel/laravel (v12.x.x): Extracting archive
...
Application ready! Build something amazing.

Structure du projet Laravel

📁 /var/www/monsite/
├── 📁 app/              ← Code de l'application
├── 📁 bootstrap/        ← Fichiers de démarrage
├── 📁 config/           ← Configuration
├── 📁 database/         ← Migrations et seeds
├── 📁 public/           ← Point d'entrée web (index.php)
├── 📁 resources/        ← Vues, CSS, JS
├── 📁 routes/           ← Routes de l'application
├── 📁 storage/          ← Fichiers générés, logs, cache
├── 📁 tests/            ← Tests unitaires
├── 📁 vendor/           ← Dépendances Composer
├── 📄 .env              ← Variables d'environnement
├── 📄 artisan           ← CLI Laravel
└── 📄 composer.json     ← Dépendances du projet

⚙️ Étape 7 : Configurer Laravel

Configurer le fichier .env

cd /var/www/monsite
nano .env

Modifiez les lignes suivantes :

APP_NAME="Mon Site Laravel"
APP_ENV=production
APP_DEBUG=false
APP_URL=http://votre-domaine.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel_user
DB_PASSWORD=VotreMotDePasseSecurise123!

⚠️ Important : En production, mettez APP_DEBUG=false pour ne pas exposer d'informations sensibles.

Générer la clé de l'application

php artisan key:generate

Résultat attendu :

INFO  Application key set successfully.

Exécuter les migrations

php artisan migrate

Résultat attendu :

INFO  Running migrations.

2024_01_01_000000_create_users_table ............... 45ms DONE
2024_01_01_000001_create_password_reset_tokens_table  12ms DONE
2024_01_01_000002_create_sessions_table ............ 18ms DONE
...

📁 Étape 8 : Configurer les Permissions

Laravel nécessite que certains dossiers soient accessibles en écriture.

Définir le propriétaire

# Changer le propriétaire vers l'utilisateur web
chown -R www-data:www-data /var/www/monsite

Définir les permissions

# Permissions pour les dossiers
find /var/www/monsite -type d -exec chmod 755 {} \;

# Permissions pour les fichiers
find /var/www/monsite -type f -exec chmod 644 {} \;

# Permissions spéciales pour storage et bootstrap/cache
chmod -R 775 /var/www/monsite/storage
chmod -R 775 /var/www/monsite/bootstrap/cache

🔧 Étape 9 : Configurer Nginx pour Laravel

Créer la configuration du site

nano /etc/nginx/sites-available/monsite

Collez la configuration suivante :

server {
    listen 80;
    listen [::]:80;
    
    # Remplacez par votre domaine ou IP
    server_name votre-domaine.com www.votre-domaine.com;
    
    # Racine du site (dossier public de Laravel)
    root /var/www/monsite/public;
    
    # Fichiers index
    index index.php index.html index.htm;
    
    # Encodage
    charset utf-8;
    
    # Logs
    access_log /var/log/nginx/monsite.access.log;
    error_log /var/log/nginx/monsite.error.log;
    
    # Gestion des requêtes
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    # Fichiers statiques
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
    
    # Erreur 404 → Laravel
    error_page 404 /index.php;
    
    # Traitement PHP via PHP-FPM
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }
    
    # Bloquer l'accès aux fichiers cachés
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Activer le site

# Créer un lien symbolique
ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/

# Désactiver le site par défaut (optionnel)
rm /etc/nginx/sites-enabled/default

# Tester la configuration
nginx -t

Résultat attendu :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Redémarrer Nginx

systemctl restart nginx

✅ Étape 10 : Tester l'Installation

Accéder au site

Ouvrez votre navigateur et accédez à :

  • http://votre-ip-serveur (si pas de domaine)
  • http://votre-domaine.com (si domaine configuré)

Vous devriez voir la page d'accueil de Laravel :

Vérifier la santé de l'application

Laravel 12 inclut une route de health check :

curl http://localhost/up

Résultat attendu : Code HTTP 200 (OK)


🔒 Étape 11 : Sécuriser avec HTTPS (Let's Encrypt)

Installer Certbot

apt install -y certbot python3-certbot-nginx

Obtenir un certificat SSL

certbot --nginx -d votre-domaine.com -d www.votre-domaine.com

Suivez les instructions :

  1. Entrez votre email
  2. Acceptez les conditions
  3. Choisissez de rediriger HTTP vers HTTPS (recommandé)

Vérifier le renouvellement automatique

certbot renew --dry-run

Résultat attendu :

Congratulations, all simulated renewals succeeded

✅ Votre site est maintenant accessible via https://votre-domaine.com


🛠️ Commandes Laravel Utiles

Artisan (CLI Laravel)

# Aller dans le dossier du projet
cd /var/www/monsite

# Voir toutes les commandes disponibles
php artisan list

# Vider le cache
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

# Optimiser pour la production
php artisan optimize

# Créer un contrôleur
php artisan make:controller NomController

# Créer un modèle avec migration
php artisan make:model NomModele -m

# Exécuter les migrations
php artisan migrate

# Revenir en arrière
php artisan migrate:rollback

# Mode maintenance
php artisan down
php artisan up

📊 Optimisation pour la Production

Optimiser Laravel

cd /var/www/monsite

# Mettre en cache la configuration
php artisan config:cache

# Mettre en cache les routes
php artisan route:cache

# Mettre en cache les vues
php artisan view:cache

# Optimisation globale
php artisan optimize

Configurer OPcache

nano /etc/php/8.3/fpm/conf.d/10-opcache.ini

Ajoutez ou modifiez :

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
opcache.save_comments=1

Redémarrez PHP-FPM :

systemctl restart php8.3-fpm

🔧 Dépannage

Erreur 500 - Internal Server Error

❌ Cause ✅ Solution
Permissions incorrectes chown -R www-data:www-data /var/www/monsite
Storage non accessible chmod -R 775 /var/www/monsite/storage
Clé APP_KEY manquante php artisan key:generate
.env mal configuré Vérifiez les paramètres de base de données
# Voir les erreurs Laravel
tail -f /var/www/monsite/storage/logs/laravel.log

Erreur 502 Bad Gateway

❌ Cause ✅ Solution
PHP-FPM non démarré systemctl start php8.3-fpm
Mauvais socket PHP Vérifiez /var/run/php/php8.3-fpm.sock
Version PHP incorrecte update-alternatives --config php

Erreur de connexion à la base de données

❌ Cause ✅ Solution
MariaDB non démarrée systemctl start mariadb
Mauvais identifiants Vérifiez .env (DB_DATABASE, DB_USERNAME, DB_PASSWORD)
Base non créée Créez la base via mysql -u root -p
# Tester la connexion
php artisan tinker
>>> DB::connection()->getPdo();

Page blanche

# Activer le debug temporairement
nano /var/www/monsite/.env
# Changer APP_DEBUG=true

# Vider le cache
php artisan cache:clear
php artisan config:clear

# Regarder les logs
tail -50 /var/www/monsite/storage/logs/laravel.log

📝 Récapitulatif des Commandes

# === MISE À JOUR SYSTÈME ===
apt update && apt upgrade -y

# === INSTALLATION PHP 8.3 (Debian 13) ===
apt install -y apt-transport-https lsb-release ca-certificates curl gnupg
curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/sury-php.gpg
echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list
apt update
apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-bcmath php8.3-intl

# === INSTALLATION COMPOSER ===
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# === INSTALLATION NGINX ===
apt install -y nginx
systemctl enable nginx && systemctl start nginx

# === INSTALLATION MARIADB ===
apt install -y mariadb-server mariadb-client
systemctl enable mariadb && systemctl start mariadb
mysql_secure_installation

# === CRÉATION BASE DE DONNÉES ===
mysql -u root -p -e "CREATE DATABASE laravel; CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'MotDePasse'; GRANT ALL ON laravel.* TO 'laravel_user'@'localhost'; FLUSH PRIVILEGES;"

# === INSTALLATION LARAVEL ===
cd /var/www
composer create-project laravel/laravel monsite
cd monsite
php artisan key:generate
php artisan migrate

# === PERMISSIONS ===
chown -R www-data:www-data /var/www/monsite
chmod -R 775 /var/www/monsite/storage /var/www/monsite/bootstrap/cache

# === HTTPS (Let's Encrypt) ===
apt install -y certbot python3-certbot-nginx
certbot --nginx -d votre-domaine.com

🎉 Conclusion

Félicitations ! Vous avez installé avec succès :

  • PHP 8.3 avec toutes les extensions Laravel
  • Composer 2.x pour la gestion des dépendances
  • Nginx configuré pour Laravel
  • MariaDB avec une base de données dédiée
  • Laravel 12 prêt pour la production
  • HTTPS avec Let's Encrypt (optionnel)

Prochaines étapes

  • 📖 Consultez la documentation Laravel
  • 🎨 Installez un starter kit : php artisan breeze:install ou php artisan jetstream:install
  • 📊 Configurez les queues avec Redis ou Supervisor
  • 📧 Configurez l'envoi d'emails (SMTP, Mailgun, etc.)