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
monsitepar 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=falsepour 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 :
- Entrez votre email
- Acceptez les conditions
- 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:installouphp artisan jetstream:install - 📊 Configurez les queues avec Redis ou Supervisor
- 📧 Configurez l'envoi d'emails (SMTP, Mailgun, etc.)


