déployer Laravel VPS··7 min de lecture·Par l'équipe OmegaCloud

Comment déployer Laravel sur un VPS Linux : le guide complet

Illustration immersive du sujet : déployer Laravel VPS

Vous cherchez à déployer Laravel VPS proprement, sans passer par un hébergement mutualisé qui bride vos processus et vos files d'attente ? Ce tutoriel 2026 couvre l'installation complète d'une stack PHP moderne sur un serveur Linux : PHP 8.3, Nginx, MySQL/MariaDB, Composer, gestion des workers, HTTPS et durcissement. L'objectif est un déploiement stable, reproductible et prêt pour la production.



Préparer le VPS avant de déployer Laravel

Avant de toucher au code applicatif, il faut un serveur sain. Un VPS avec CPU dédié et stockage SSD SAS change radicalement le comportement d'une application Laravel, surtout sur les opérations disque (cache, sessions, logs) et la compilation d'assets. Sur les VPS Linux OmegaCloud, vous partez d'un noyau récent avec accès root SSH complet, ce qui simplifie toute la suite.

Choisir la distribution

Pour Laravel, Debian et Ubuntu LTS restent les valeurs sûres grâce à leur cycle de support et la disponibilité des paquets PHP récents. Rocky et Alma conviennent aux équipes habituées à l'écosystème RHEL. Dans ce guide, on part sur Ubuntu 24.04 LTS.

Première connexion et mise à jour

ssh root@votre-ip-vps
apt update && apt upgrade -y
apt install -y curl git unzip ufw

Créer un utilisateur non-root

Travailler en root permanent est une mauvaise pratique. On crée un compte de déploiement dédié.

adduser deploy
usermod -aG sudo deploy
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy

Sécuriser l'accès SSH

On bascule sur l'authentification par clé uniquement. Générez une paire sur votre poste local si ce n'est pas déjà fait :

ssh-keygen -t ed25519 -C "deploy@laravel"
ssh-copy-id deploy@votre-ip-vps

Puis désactivez le login par mot de passe et le login root dans /etc/ssh/sshd_config :

PermitRootLogin no
PasswordAuthentication no
systemctl restart ssh

Configurez le pare-feu pour n'exposer que le strict nécessaire :

ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Note : la protection anti-DDoS volumétrique est déjà gérée au niveau de l'infrastructure OmegaCloud, de façon transparente. Votre travail se concentre sur le durcissement applicatif et système (fail2ban, ufw, clés SSH), pas sur la mitigation réseau.


Installer la stack LEMP pour déployer Laravel VPS

Laravel s'appuie sur PHP, un serveur web et une base de données. On installe ici Nginx, PHP-FPM 8.3 et MariaDB. Cette combinaison est légère, éprouvée et facile à monitorer depuis un dashboard temps réel.

PHP 8.3 et extensions requises

Laravel 11+ demande PHP 8.2 minimum. On installe PHP-FPM et les extensions courantes :

apt install -y php8.3-fpm php8.3-cli php8.3-mysql \
  php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip \
  php8.3-bcmath php8.3-gd php8.3-intl

Vérifiez la version active :

php -v
systemctl status php8.3-fpm

Nginx

apt install -y nginx
systemctl enable --now nginx

MariaDB

apt install -y mariadb-server
mysql_secure_installation

Créez la base et l'utilisateur applicatif :

mysql -u root -p
CREATE DATABASE laravel_prod CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'laravel'@'localhost' IDENTIFIED BY 'mot_de_passe_solide';
GRANT ALL PRIVILEGES ON laravel_prod.* TO 'laravel'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Composer

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer --version

Node.js pour les assets

Si votre projet utilise Vite ou Laravel Mix, installez Node LTS :

curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
node -v && npm -v


Déployer le code Laravel et configurer l'application

Le serveur est prêt. Passons au déploiement du dépôt applicatif, à la configuration de l'environnement et à la mise en place du virtual host Nginx.

Récupérer le projet

Connectez-vous en tant qu'utilisateur deploy et clonez votre dépôt dans /var/www :

sudo mkdir -p /var/www/monapp
sudo chown deploy:www-data /var/www/monapp
cd /var/www
git clone [email protected]:votre-org/monapp.git monapp
cd monapp

Installer les dépendances en mode production

composer install --no-dev --optimize-autoloader
npm ci && npm run build

Configurer l'environnement

cp .env.example .env
php artisan key:generate

Éditez .env avec vos vrais paramètres :

APP_ENV=production
APP_DEBUG=false
APP_URL=https://votre-domaine.fr

DB_CONNECTION=mysql
DB_DATABASE=laravel_prod
DB_USERNAME=laravel
DB_PASSWORD=mot_de_passe_solide

APP_DEBUG=false est non négociable en production : une trace d'erreur exposée révèle vos chemins, vos variables et parfois vos identifiants.

Migrations et cache de config

php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache

Permissions des dossiers

Laravel écrit dans storage et bootstrap/cache. Ces dossiers doivent appartenir au groupe du serveur web.

sudo chown -R deploy:www-data /var/www/monapp/storage
sudo chown -R deploy:www-data /var/www/monapp/bootstrap/cache
sudo chmod -R 775 /var/www/monapp/storage /var/www/monapp/bootstrap/cache

Virtual host Nginx

Créez /etc/nginx/sites-available/monapp :

server {
    listen 80;
    server_name votre-domaine.fr;
    root /var/www/monapp/public;

    index index.php;
    charset utf-8;

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

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Activez le site et rechargez :

sudo ln -s /etc/nginx/sites-available/monapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Activer HTTPS avec Let's Encrypt

apt install -y certbot python3-certbot-nginx
certbot --nginx -d votre-domaine.fr

Certbot configure automatiquement la redirection HTTP vers HTTPS et le renouvellement. Vérifiez le timer :

systemctl status certbot.timer


Files d'attente, tâches planifiées et maintenance

Une application Laravel en production ne se limite pas au web. Les jobs asynchrones, le scheduler et le monitoring font partie intégrante d'un déploiement sérieux sur VPS.

Le scheduler Laravel

Le scheduler repose sur une seule entrée cron qui s'exécute chaque minute. Éditez le crontab de deploy :

crontab -e
* * * * * cd /var/www/monapp && php artisan schedule:run >> /dev/null 2>&1

Workers de queue avec systemd

Pour traiter les jobs en arrière-plan de façon persistante, créez un service systemd plutôt que de lancer queue:work à la main. Créez /etc/systemd/system/laravel-worker.service :

[Unit]
Description=Laravel queue worker
After=network.target

[Service]
User=deploy
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/monapp/artisan queue:work --sleep=3 --tries=3 --max-time=3600

[Install]
WantedBy=multi-user.target

Activez-le :

sudo systemctl daemon-reload
sudo systemctl enable --now laravel-worker
sudo systemctl status laravel-worker

Après chaque déploiement de code, redémarrez proprement les workers pour qu'ils rechargent la nouvelle version :

php artisan queue:restart

Durcissement complémentaire

Ajoutez fail2ban pour limiter les tentatives de brute force SSH :

apt install -y fail2ban
systemctl enable --now fail2ban
fail2ban-client status sshd

Activez la 2FA sur le panel de gestion pour protéger l'accès à vos snapshots, reboots et reinstall. Le panel OmegaCloud permet aussi de prendre un snapshot avant chaque mise à jour risquée, ce qui offre un rollback rapide en cas de migration défaillante.

Script de déploiement reproductible

Automatisez les étapes récurrentes dans un script deploy.sh versionné :

#!/usr/bin/env bash
set -e
cd /var/www/monapp
git pull origin main
composer install --no-dev --optimize-autoloader
npm ci && npm run build
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan queue:restart
sudo systemctl reload nginx

Ce script s'intègre directement dans un pipeline GitHub Actions ou GitLab CI. Les intégrations & API OmegaCloud permettent de déclencher des actions via webhooks après un déploiement réussi. Pour référence sur la configuration de PHP-FPM et les bonnes pratiques serveur, consultez la documentation officielle Ubuntu Server.

Comparer un VPS à un hébergement mutualisé pour Laravel

CritèreVPSMutualisé
CPUDédiéPartagé
StockageNVMe Gen4Variable
Workers persistantsOui (systemd)Souvent bloqués
Accès root / SSHCompletLimité
Anti-DDoS inclusOuiSelon offre


Conclusion

Déployer une application Laravel sur un VPS demande de la méthode : préparer le serveur, installer une stack cohérente, sécuriser les accès et industrialiser les mises à jour via un script reproductible. Avec des workers gérés par systemd, du HTTPS automatique et des snapshots avant chaque changement, vous obtenez une infrastructure stable, maîtrisée et prête à évoluer avec votre trafic.



FAQ

Quelle version de PHP choisir pour déployer Laravel sur un VPS en 2026 ?

Laravel 11 et 12 exigent PHP 8.2 minimum. PHP 8.3 est recommandé pour bénéficier des dernières optimisations et d'un support long. Installez PHP-FPM plutôt que le CLI seul, et activez uniquement les extensions nécessaires (mbstring, xml, curl, mysql, bcmath) pour limiter la surface d'attaque.

Comment gérer les files d'attente Laravel en production sur un VPS ?

Utilisez un service systemd exécutant queue:work avec Restart=always pour garantir la persistance et le redémarrage automatique. Après chaque déploiement, lancez php artisan queue:restart pour que les workers rechargent le code à jour. Évitez de lancer les workers manuellement dans un terminal.

Faut-il une protection DDoS supplémentaire pour un VPS Laravel ?

La mitigation volumétrique est assurée au niveau de l'infrastructure OmegaCloud, de façon transparente. Côté serveur, concentrez-vous sur le durcissement applicatif : fail2ban contre le brute force, ufw pour n'exposer que les ports 80, 443 et SSH, clés SSH uniquement et 2FA sur le panel de gestion.

Prêt à mettre en pratique ce que vous venez de lire ?

Découvrir nos offres

Articles liés

Prêt à vous lancer ?

à partir de 6,99 € HT/mois

Découvrir nos offres

Hébergements

Navigation