Dernière modification
07/03/2026

Configuration de Aedes Websocket MQTT avec Plesk (Phusion Passenger)

Lecture de 2 minutes

L'utilisation de WebSocket et MQTT via Plesk nécessite quelques réglages. Voici les points principaux à retenir.

nginx Setup

Dans les paramètres Apache & nginx Settings, désactiver Proxy mode:
Proxy mode checbox

Puis, ajouter les paramètres suivants dans la section Additional nginx directives pour permettre le support de Websocket à travers nginx et Passenger :

add_header X-Robots-Tag "noindex, nofollow" always;  
proxy_http_version 1.1;  
proxy_set_header Upgrade $http_upgrade;  
proxy_set_header Connection "upgrade";  
proxy_set_header Host $host;  

Point d'entrée Phusion Passenger

Si l'application est configurée comme un module ES Javascript dans app.js file, alors Phusion Passengeger tentera de trouver un fichier .bootstrap.cjs pour démarrer. L'erreur suivante sera affichée :

Error: Cannot find module '/your/projet/path/.bootstrap.cjs'

Pour résoudre ce problème, créez un fichier utilisant la syntaxe CommunJS et importez votre module :

(async () => {  
  await import('./app.mjs'); // Point to your actual ESM entry file  
})();

Exemple d'application basique

Voici un exemple minimal d'application app.mjs qui permet le MQTT sur WebSocket et qui est compatible avec Phusion Passenger. L'application peut être exécutée en utilisant le support built-in node.js de Plesk.

import express from 'express';
import {Aedes} from 'aedes'
import http from 'node:http';
import {WebSocketServer, createWebSocketStream} from 'ws'
import dotenv from 'dotenv';

dotenv.config({quiet: true});

const app = express();
const server = http.Server(app);
const aedes = await Aedes.createBroker({persistence: 0})

/**
 * Enable if you're behind a reverse proxy (Heroku, Bluemix, AWS ELB, Nginx, etc)
 * see https://expressjs.com/en/guide/behind-proxies.html
 */
app.set('trust proxy', ((parseInt(process.env.BEHIND_PROXY) === 1)));

// Index page
app.get(["/"], (req, res) => {
  res.send("200");
});

// Create Websocket server
const wss = new WebSocketServer({
  server: server
})

// Bind the websocket server with Aedes
wss.on('connection', (websocket, req) => {
  const stream = createWebSocketStream(websocket)
  aedes.handle(stream, req)
})

// Launch app.
const PORT = process.env.PORT || 8080;
server.listen(PORT, () => {
  console.log(`App listening on port ${PORT}`);
  console.log('Press Ctrl+C to quit.');
});