Agence karac
karac
Axel Piaget | 14 août 2025

Gérer votre serveur websocket avec Laravel Reverb

Gérer votre serveur websocket avec Laravel Reverb

Nous rédigeons cet article sur Laravel Reverb car nous avons eu l'occasion de l'utiliser dans le cadre de nos mandats d'agence de développement. Si vous aussi souhaitez utiliser ces technologies innovantes, n'hésitez pas à contacter l'agence web karac.

Les websockets : Quésaco ?

Le protocole websocket permet une communication bidirectionnelle entre un client (par exemple votre navigateur web préféré) et un serveur. Cela fait une quinzaine d'années que les API websockets sont intégrées aux différents navigateurs. Le protocole est donc très bien supporté.

Et Laravel Reverb ?

Il s'agit d'un package Composer pour Laravel sorti en 2024 qui permet aux développeurs familiers de PHP et Laravel de mettre en place un serveur websocket facilement. Avant Reverb, il était nécessaire d'utiliser des logiciels node.js comme socketi.io ou des services payants comme Pusher pour intégrer les websockets dans nos applications.

Comment fonctionne Laravel Reverb ?

Laravel fonctionne en tant que processus qui écoute et dispatch en continu les événements websockets aux clients connectés. En mode développement, il se lance avec la commande suivante :

php artisan reverb:start

Et bien sûr, en mode production, sur un serveur, il est exécuté via un processus "d'arrière plan".

Laravel Reverb en mode production - Les grandes lignes

Bien qu'il soit possible de faire fonctionner Laravel Reverb au sein même de l'application qui en fera usage, nous avons décidé de mettre en place un serveur Reverb à part et qui tournera sur son propre serveur. Cela nous permettra notamment de scaler ce service de manière indépendante à notre application.

Le système complet est constitué des éléments suivants :

  • Un serveur VPS Ubuntu 24.04 LTS
  • Installer différents outils (PHP) ainsi que le serveur web Caddy que nous utiliserons comme proxy
  • Une application Laravel sur laquelle est installé et configuré Reverb
  • Un processus d'arrière plan configuré avec systemctl

Serveur VPS Ubuntu 24.04 LTS

Nous avons opté pour un serveur VPS Lite d'infomaniak. Le serveur à CHF 3.- par mois nous semble amplement puissant pour débuter. Pour le mettre en route, vous aurez besoin de votre clé SSH et d'un nom de domaine (ou d'un sous-domaine) qui vous permettra d'atteindre votre serveur. Vous aurez besoin de vous connecter à votre serveur en SSH pour la suite.

Se connecter en SSH :

ssh ubuntu@votre-domaine.ch

 

Installer différents outils (PHP) ainsi que le serveur web Caddy que nous utiliserons comme proxy

Pour installer PHP (la version 8.4 étant la plus récente à l'écriture de cet article), nous aurons besoin d'ajouter le dépôt de packets debian/ubuntu relatifs à PHP et son écosystème maintenu par Ondřej Surý. Il s'agit d'un contributeur de longue date de l'écosystème, reconnu entre autre par l'équipe Laravel qui le soutient financièrement.

# Installation du dépôt
sudo add-apt-repository ppa:ondrej/php

# Actualisation de la liste des packets installables
sudo apt update

# Installation des packets nécessaires au fonctionnement de notre application
sudo apt install php8.4-{cli,pdo,zip,gd,mbstring,curl,xml,bcmath,common,redis,fpm,sqlite3}

L'installation et la configuration du serveur web Caddy tient en quelques lignes. L'avantage de ce serveur web est qu'il est "https-first" : Dès le moment où un domaine lui est associé (et que les réglages DNS sont corrects), il se chargera pour vous d'installer un certificat SSL Let's Encrypt et le renouvellera automatiquement. Voici les lignes de commandes à exécuter, que vous pouvez également retrouver sur la documentation officielle de Caddy.

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
sudo apt-get install acl

Pour le paramétrage, commencez par ouvrir le fichier de configuration :

sudo nano /etc/caddy/Caddyfile
votre-domaine.ch {
    reverse_proxy 127.0.0.1:8080
}

Et oui, c'est tout ! Ces deux lignes vous permettent de mettre en place un proxy de toutes les requêtes sur votre nom de domaine vers votre application Reverb (qui tourne en local sur le port 8080).

Finalement, pensez à redémarrer Caddy pour être sûr de bien prendre en compte la nouvelle configuration.

sudo systemctl restart caddy

Une application Laravel sur laquelle est installé et configuré Reverb

Nous vous conseillons de commencer par créer une application Laravel vierge sur laquelle nous installerons le packet Composer Reverb. Vous pouvez tranquillement créer l'application sur votre ordinateur et quand vous en êtes satisfait, vous pourrez la copier sur le serveur Ubuntu.

# https://laravel.com/docs/12.x/installation#creating-an-application
# Vous pouvez utiliser la base de données SQLite, ce sera bien plus facile à déployer et vous évitera d'avoir à installer un serveur de base de données conséquent.
laravel new example-app 

# Sélectionnez Reverb. Vous pouvez omettre l'installation du client (Laravel Echo)
php artisan install:broadcasting

Voici les éléments importants de votre fichier .env :

# Seules les clés pertinentes sont affichées
APP_ENV=production
APP_KEY=base64:bB1G2Ku4Kt21XrPAcwWdqSXbSP+O4yCYP2Rlus8UJgQ=
APP_DEBUG=false
APP_URL=https://votre-domaine.ch

DB_CONNECTION=sqlite

REVERB_HOST="votre-domaine.ch"
REVERB_PORT=8080
REVERB_SCHEME=https

# Normalement, à l'installation de Reverb, les clés ci-dessous sont préremplies
REVERB_APP_ID=1234567899
REVERB_APP_KEY=abcdef...
REVERB_APP_SECRET=123abc...

Les clés relatives à Reverb spécifiées ci-dessus sont utilisées par le fichier de configuration du projet Laravel config/reverb.php. C'est dans ce fichier que vous avez la possibilité de créer des serveur Reverb supplémentaires, comme spécifié dans la documentation.

Vous pouvez vérifier que Reverb est bien installé dans votre application en tapant la commande ci-dessous. Reverb écoutera par défaut sur le port 8080. Vous pouvez changer ce paramètre ainsi que d'autres en vous référant à la documentation officielle :

php artisan reverb:start

Vous pouvez à présent copier votre application sur le serveur Ubuntu, en passant soit pas un dépôt Git (GitHub, Gitlab, etc.) ou d'autres outils (rsync, scp, etc.). Nous vous conseillons de placer les fichiers de votre application dans le répertoire /srv/votre-domaine.ch/.

Il est en général nécessaire de donner de bonnes permissions aux fichiers ainsi copiés.

sudo chown -R ubuntu:www-data /srv/votre-domaine.ch

La commande suivante peut être exécutée afin d'optimiser la vitesse de votre application. Nous vous conseillons de l'exécuter après chaque modification des clés d'environnement.

php artisan config:cache

Un processus d'arrière plan configuré avec systemctl

Finalement, nous allons faire en sorte de faire fonctionner Reverb en continu via le gestionnaire de processus systemctl.

Commençons par créer un fichier de service :

sudo nano /etc/systemd/system/reverb.service
[Unit]
Description=Laravel Reverb WebSocket Server
After=network.target

[Service]
ExecStart=/usr/bin/php /srv/votre-domaine.ch/artisan reverb:start --port=8080 --host=0.0.0.0
Restart=always
User=www-data
Group=www-data
WorkingDirectory=/srv/votre-domaine.ch

[Install]
WantedBy=multi-user.target

Ce service est configuré pour exécuter la commande reverb:start et pour redémarrer s'il est arrêté (ou si le serveur redémarre au complet).

Ce service doit à présent être activé puis enclenché.

# Nous rechargeons systemctl pour que ce nouveau service lui soit visible
sudo systemctl daemon-reload

# Indique à systemctl que nous voulons que le service se lance au boot du serveur
sudo systemctl enable reverb.service

# Démarrer le service
sudo systemctl start reverb.service

Sachez qu'en cas de modification du code de votre application Laravel, il sera nécessaire de redémarrer Reverb :

php artisan reverb:restart

Installer l'extension PHP uv (facultatif)

Par défaut, le système qu'utilise Reverb permet de gérer jusqu'à 1000 connexions simultanées. Si vous souhaitez augmenter ce nombre, il est conseillé d'installer l'extension PHP uv que Reverb pourra utiliser afin de gérer bien plus de connexions. Voici le processus d'installation :

sudo apt install libuv1-dev php-pear php8.4-dev
sudo pecl channel-update pecl.php.net
sudo pecl install uv-beta

La fin de l'exécution de la dernière commande nous indique qu'il est à présent nécessaire d'activer l'extension dans le fichier de configuration de PHP.

# Si vous ne savez pas où est votre php.ini, exécutez la commande php --ini pour le trouver
sudo nano /etc/php/8.4/cli/php.ini

A la fin du fichier de configuration, ajoutez la ligne suivante puis sauvegardez :

extension=uv.so

Vous pouvez vérifier qu'uv est bien activé pour PHP avec la commande qui liste toutes les extensions PHP actives :

php -m

Finalement, pensez à relancer Reverb en exécutant la commande suivante dans votre application Laravel :

php artisan reverb:restart

Commandes utiles

Faire tourner Reverb en mode débug :

php artisan reverb:start --debug

Vérifier le statut de notre service sur le serveur :

sudo systemctl status reverb.service

Redémarrer le service sur le serveur :

sudo systemctl restart reverb.service

Eteindre gracieusement Reverb (les connexion Websocket ne seront pas interrompues abruptement) :

php artisan reverb:restart

Documentation officielle et points importants

  • Laravel Reverb : Contient entre autre quelques conseils pour optimiser le fonctionnement de l'app (pouvoir gérer plus de connections simultanées et mettre en place un scaling horizontal)
  • Dispatcher des Events via Reverb : Contient toutes les informations pour que votre application Laravel (backend et frontend) utilise Reverb
Catégorie
Tech Web
Partager
Promotion vers l'agence - application web

Newsletter

Abonnez-vous à notre newsletter!

Pourrait vous intéresser

Promotion vers l'agence - green

Besoin d'un coup de pouce pour votre projet web ?

L'agence karac, spécialisée dans le développement web, vous accompagne de la conception à la mise en ligne.
Découvrez nos prestations