{"id":85022,"date":"2026-06-29T08:00:00","date_gmt":"2026-06-29T15:00:00","guid":{"rendered":"https:\/\/dhblog.dream.press\/blog\/?p=85022"},"modified":"2026-07-07T08:17:19","modified_gmt":"2026-07-07T15:17:19","slug":"comment-faire-tourner-nodejs-sur-un-vps-fr","status":"publish","type":"post","link":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/","title":{"rendered":"Comment Faire Tourner Node.js sur un VPS"},"content":{"rendered":"<div class=\"tldr-block\" style=\"display: none;\">\n\t<div class=\"svg\">\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 119.25 37.8\">\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"#ffffff\" d=\"M23.4,6.93h-8.1v24.57h-7.2V6.93H0V0h23.4v6.93Z\" \/>\n\t\t\t<path fill=\"#ffffff\" d=\"M45,24.57v6.93h-18.45V0h7.2v24.57h11.25Z\" \/>\n\t\t\t<path fill=\"#ffffff\"\n\t\t\t\td=\"M90.9,15.75c0,8.91-6.61,15.75-15.3,15.75h-12.6V0h12.6c8.68,0,15.3,6.84,15.3,15.75ZM83.97,15.75c0-5.4-3.42-8.82-8.37-8.82h-5.4v17.64h5.4c4.95,0,8.37-3.42,8.37-8.82Z\" \/>\n\t\t\t<path fill=\"#ffffff\"\n\t\t\t\td=\"M105.57,21.15h-3.42v10.35h-7.2V0h12.6c5.98,0,10.8,4.81,10.8,10.8,0,3.87-2.34,7.38-5.81,9.13l6.71,11.56h-7.74l-5.94-10.35ZM102.15,14.85h5.4c1.98,0,3.6-1.75,3.6-4.05s-1.62-4.05-3.6-4.05h-5.4v8.1Z\" \/>\n\t\t<\/g>\n\t\t<path\n\t\t\tfill=\"#0173ec\"\n\t\t\td=\"M53.97,37.8h-5.4l1.8-13.27h7.2l-3.6,13.27ZM49.02,12.55c0-2.34,1.93-4.27,4.27-4.27s4.27,1.94,4.27,4.27-1.93,4.27-4.27,4.27-4.27-1.94-4.27-4.27Z\"\n\t\t \/>\n\t<\/g>\n<\/svg>\n\t<\/div>\n\t<div class=\"tldr-wrap\">\n\t\t\n\n<p class=\"wp-block-paragraph\">Ex\u00e9cuter Node.js sur un VPS signifie installer la version LTS actuelle de Node.js (24.x &#8220;Krypton&#8221; en mai 2026) sur un serveur Linux que tu contr\u00f4les, puis ex\u00e9cuter ton application derri\u00e8re un gestionnaire de processus et un proxy inverse avec HTTPS. Tu obtiens une bo\u00eete toujours active qui g\u00e8re les connexions de longue dur\u00e9e, les travaux en arri\u00e8re-plan et les calculs lourds sans facturation par fonction ou d\u00e9marrages \u00e0 froid.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Configuration cible :<\/strong> Ubuntu 24.04 LTS + Node 24 via NodeSource ou nvm + PM2 (ou systemd) + NGINX + Let&#8217;s Encrypt.<\/p>\n\n\n\n\t<\/div>\n<\/div>\n\n<p class=\"wp-block-paragraph\">Heroku a supprim\u00e9 son offre gratuite et a augment\u00e9 le seuil minimum. Vercel facture par utilisateur et interrompt les t\u00e2ches de longue dur\u00e9e. Render et Railway ajustent leurs prix en fonction du trafic.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Ouvre la facture la plus r\u00e9cente de ton fournisseur d&#8217;h\u00e9bergement. L&#8217;application Node, une base de donn\u00e9es Postgres, et un cache Redis. Trois lignes de frais, trois s\u00e9ries d&#8217;avertissements de d\u00e9passement, un fil Slack fr\u00e9n\u00e9tique le jour o\u00f9 le marketing lance enfin une campagne.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Cette facture est la raison pour laquelle de nombreuses \u00e9quipes se penchent \u00e0 nouveau sur le VPS. <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/what-is-node-js\/\">Node.js<\/a> lui-m\u00eame ne se <em>soucie<\/em> pas de l&#8217;endroit o\u00f9 il s&#8217;ex\u00e9cute. La seule chose que le sans serveur vous prot\u00e9geait de d\u00e9couvrir \u00e9tait ce qui se passe apr\u00e8s \u2018npm start\u2019.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Examinons un mod\u00e8le de configuration de production pour <a href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/nodejs\/\">Node.js<\/a> sur une machine Linux que tu contr\u00f4les. Si tu peux te connecter en SSH \u00e0 une machine et lire un fichier de configuration, \u00e0 la fin, tu auras une pile de production que tu peux faire fonctionner pendant des ann\u00e9es avec quelques heures de maintenance par mois.<\/p>\n\n\n<h2 id=\"h-when-does-running-node-js-on-a-vps-make-sense\" class=\"wp-block-heading\">Quand Est-Il Judicieux de Faire Tourner Node.js Sur Un VPS ?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Un VPS est le domicile id\u00e9al pour Node.js lorsque tu as un processus de longue dur\u00e9e, une pile que tu souhaites consolider en une seule facture, ou une facture de runtime g\u00e9r\u00e9 qui a d\u00e9pass\u00e9 la commodit\u00e9.<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>De mani\u00e8re g\u00e9n\u00e9rale, il y a trois bonnes correspondances :<\/strong><\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Processus \u00e0 longue dur\u00e9e de vie :<\/strong> Serveurs WebSocket, travailleurs de file d&#8217;attente, planificateurs de Cron Job, serveurs MCP. Tout ce qui doit <em>rester<\/em> en fonctionnement et \u00e0 l&#8217;\u00e9coute. La plupart des plateformes sans serveur sont encore optimis\u00e9es pour des cycles d&#8217;ex\u00e9cution et de demande de courte dur\u00e9e. Un processus Node sur un VPS reste simplement l\u00e0.<\/li>\n\n\n\n<li><strong>Consolidation des co\u00fbts :<\/strong> Application Node, <a href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/postgresql\/\">Postgres<\/a>, Redis, plus un petit travailleur de construction vivent tous sur la m\u00eame bo\u00eete de 4 Go. Une ligne de facture, pas quatre.<\/li>\n\n\n\n<li><strong>Applications qui ont d\u00e9pass\u00e9 PaaS :<\/strong> D\u00e9lais de fonction sur votre travail de g\u00e9n\u00e9ration de PDF long. Tarification par utilisateur sur une \u00e9quipe qui a finalement embauch\u00e9 un quatri\u00e8me ing\u00e9nieur. Une facture <a target=\"_blank\" href=\"https:\/\/www.heroku.com\/pricing\/\">Heroku<\/a> qui d\u00e9passe 60 $ par mois pour une charge de travail qui fonctionne bien sur un VPS de 15 $.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\"><strong>Et il y a trois <\/strong><strong><em>mauvaises<\/em><\/strong><strong> correspondances :<\/strong><\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sites statiques et contenu SSG :<\/strong> Un export Next.js, une construction Astro, un blog Gatsby. La version gratuite de Vercel est l&#8217;outil appropri\u00e9. Un VPS est excessif.<\/li>\n\n\n\n<li><strong>Charges de travail sporadiques, pilot\u00e9es par \u00e9v\u00e9nements :<\/strong> AWS Lambda ou Cloudflare Workers co\u00fbtent quelques centimes pour un webhook qui s&#8217;ex\u00e9cute dix fois par jour. Un VPS co\u00fbte le m\u00eame prix, que l&#8217;application soit active ou en veille.<\/li>\n\n\n\n<li><strong>Applications en temps r\u00e9el \u00e0 \u00e9chelle horizontale :<\/strong> Si votre serveur WebSocket doit \u00eatre diffus\u00e9 \u00e0 100 000 connexions simultan\u00e9es, un VPS n&#8217;est pas la r\u00e9ponse. C&#8217;est un cluster Kubernetes, une infrastructure p\u00e9riph\u00e9rique distribu\u00e9e, ou une plateforme en temps r\u00e9el g\u00e9r\u00e9e.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">JavaScript est le langage le plus utilis\u00e9 dans <a target=\"_blank\" href=\"https:\/\/survey.stackoverflow.co\/2025\/technology\">l&#8217;enqu\u00eate des d\u00e9veloppeurs Stack Overflow de 2025<\/a>, et Node.js reste l&#8217;une des mani\u00e8res par d\u00e9faut pour les d\u00e9veloppeurs d&#8217;ex\u00e9cuter JavaScript sur le backend. Cela repr\u00e9sente beaucoup de personnes utilisant Node quelque part. Cet article est destin\u00e9 \u00e0 la partie d&#8217;entre eux qui serait plus heureuse de l&#8217;ex\u00e9cuter sur un serveur qu&#8217;ils contr\u00f4lent.<\/p>\n\n\n<p class=\"wp-block-paragraph\">J&#8217;ai vu des \u00e9quipes d\u00e9placer quatre services Node de production de Heroku vers un seul VPS de 4 GB, avec la m\u00eame garantie de disponibilit\u00e9, un tiers de la facture, et des WebSockets \u00e0 longue dur\u00e9e qui finalement fonctionnaient sans contournement.<\/p>\n\n\n<p class=\"wp-block-paragraph\">La migration est principalement une apr\u00e8s-midi de \u00ab apt install \u00bb, un \u00ab pm2 start \u00bb et un changement de DNS.<\/p>\n\n\n<h2 id=\"h-what-vps-specs-does-node-js-actually-need\" class=\"wp-block-heading\">De Quelles Sp\u00e9cifications VPS Node.js A-T-Il R\u00e9ellement Besoin ?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Node.js est en lui-m\u00eame l\u00e9ger. Un serveur Express minimal peut rester inactif bien en dessous de 100 Mo de m\u00e9moire r\u00e9sidente. Le conseil \u00ab Node a seulement besoin de 1 Go \u00bb que vous pouvez encore trouver sur des blogs plus anciens est techniquement vrai et pratiquement inutile. Au moment o\u00f9 vous avez ajout\u00e9 Postgres, Redis, des logs et un processus de d\u00e9ploiement qui ne tient pas juste par espoir, vous d\u00e9passez d\u00e9j\u00e0 cette limite lors d&#8217;une journ\u00e9e calme.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Dimensionnement r\u00e9aliste pour les charges de travail courantes :<\/p>\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Charge de travail<\/strong><\/th><th><strong>RAM<\/strong><\/th><th><strong>vCPU<\/strong><\/th><th><strong>Stockage<\/strong><\/th><th><strong>Notes<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Petite API Express sans DB sur la machine<\/td><td>2 Go<\/td><td>1-2<\/td><td>40 Go NVMe<\/td><td>Seuil r\u00e9aliste pour une application de production<\/td><\/tr><tr><td>API Node + Postgres + Redis sur une seule machine<\/td><td>4 Go<\/td><td>2<\/td><td>80 Go NVMe<\/td><td>Le juste milieu ; la plupart des \u00e9quipes se retrouvent ici<\/td><\/tr><tr><td>Application lourde en SSR (Next.js, Nuxt, Remix)<\/td><td>8 Go<\/td><td>4<\/td><td>80 Go NVMe<\/td><td>Le rendu SSR et les pipelines de construction consomment beaucoup de m\u00e9moire<\/td><\/tr><tr><td>Application en temps r\u00e9el\/WebSocket, \u00e9chelle mod\u00e9r\u00e9e<\/td><td>8 Go<\/td><td>4<\/td><td>80 Go NVMe<\/td><td>Chaque connexion persistante consomme de la m\u00e9moire<\/td><\/tr><\/tbody><\/table><\/figure>\n\n<p class=\"wp-block-paragraph\">Quelques d\u00e9tails \u00e0 pr\u00e9ciser avant de proc\u00e9der \u00e0 la provision :<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Le Stockage NVMe Est Plus Important Que La Taille Pure Du Disque :<\/strong> Les applications Node modernes manipulent des milliers de petits fichiers lors des installations, des constructions et du d\u00e9marrage. Les disques lents rendent les installations de d\u00e9pendances, les d\u00e9marrages \u00e0 froid et les reconstructions SSR nettement pires.<\/li>\n\n\n\n<li><strong>Virtualisation KVM, Pas OpenVZ :<\/strong> Les anciens plans bas\u00e9s sur OpenVZ partagent un noyau avec l&#8217;h\u00f4te, ce qui peut signifier des versions de noyau obsol\u00e8tes et des maux de t\u00eate de compatibilit\u00e9 occasionnels avec les nouveaux environnements d&#8217;ex\u00e9cution. La plupart des fournisseurs VPS r\u00e9put\u00e9s utilisent maintenant exclusivement KVM, mais cela vaut toujours la peine de v\u00e9rifier.<\/li>\n\n\n\n<li><strong>Espace De Swap :<\/strong> Active 1-2 Go de swap sur les petites bo\u00eetes. Le tas V8 de Node peut varier fortement lors du ramassage des ordures. Sans swap, un pic transitoire tue le processus. J&#8217;ai vu une bo\u00eete de 4 Go OOM pendant un d\u00e9ploiement routinier parce que quelqu&#8217;un avait d\u00e9sactiv\u00e9 le swap en pensant que c&#8217;\u00e9tait un anachronisme de l&#8217;\u00e8re Docker.<\/li>\n\n\n\n<li><strong>Bande Passante :<\/strong> La plupart des plans VPS modernes incluent 1-4 To de bande passante mensuelle, suffisamment pour presque tout sauf l&#8217;h\u00e9bergement vid\u00e9o. Les <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\">plans VPS auto-g\u00e9r\u00e9s<\/a> incluent une bande passante non mesur\u00e9e, une ligne de moins sur la feuille de calcul de la planification des capacit\u00e9s.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">Un VPS de 4 Go co\u00fbte environ 15 $ par mois au tarif du march\u00e9. Cela fait 50 cents par jour, soit \u00e0 peu pr\u00e8s un caf\u00e9 d&#8217;a\u00e9roport toutes les deux semaines. Compar\u00e9 au paiement s\u00e9par\u00e9 pour les runtimes d&#8217;application, le Postgres g\u00e9r\u00e9 et Redis sur un PaaS, l&#8217;\u00e9conomie s&#8217;inverse de mani\u00e8re surprenante rapidement.<\/p>\n\n\n<h2 id=\"h-which-node-js-version-should-you-install\" class=\"wp-block-heading\">Quelle Version De Node.js Devrais-Tu Installer ?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Installe <strong>Node.js 24 (nom de code Krypton)<\/strong>. C\u2019est la version LTS active actuelle, promue en octobre 2025 et soutenue jusqu&#8217;en avril 2028 selon le <a target=\"_blank\" href=\"https:\/\/nodejs.org\/en\/about\/previous-releases\">calendrier officiel des versions de Node.js<\/a>.<\/p>\n\n\n<p class=\"wp-block-paragraph\">De nombreux tutoriels dirigent encore les gens vers Node 22. Ces guides n&#8217;ont pas \u00e9t\u00e9 mis \u00e0 jour. Si tu lances un nouveau d\u00e9ploiement aujourd&#8217;hui, fixe ton image CI et ton VPS sur Node 24.x.<\/p>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Version<\/strong><\/th><th><strong>Nom de Code<\/strong><\/th><th><strong>Statut<\/strong><\/th><th><strong>EOL<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Node.js 26.x<\/td><td>(aucun)<\/td><td>Actuelle<\/td><td>Passe en LTS fin 2026<\/td><\/tr><tr><td>Node.js 24.x<\/td><td>Krypton<\/td><td>LTS Actif<\/td><td>Avril 2028<\/td><\/tr><tr><td>Node.js 22.x<\/td><td>Jod<\/td><td>LTS de Maintenance<\/td><td>Avril 2027<\/td><\/tr><tr><td>Node.js 20.x<\/td><td>Fer<\/td><td>Fin de Vie |<\/td><td>EOL atteint le 30 avril 2026. Ne pas utiliser.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Quelques r\u00e8gles de base :<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ne faites pas fonctionner les versions actuelles (non-LTS) en production : <\/strong>Node 26 existe pour tester la compatibilit\u00e9 future et les nouvelles fonctionnalit\u00e9s d&#8217;ex\u00e9cution, et non pour l&#8217;application dont d\u00e9pend votre revenu.<\/li>\n\n\n\n<li><strong>Node 22 est l&#8217;option de repli si une d\u00e9pendance critique n&#8217;est toujours pas compatible avec Node 24 : <\/strong>La plupart de l&#8217;\u00e9cosyst\u00e8me s&#8217;est stabilis\u00e9e quelques mois apr\u00e8s la promotion LTS.<\/li>\n\n\n\n<li><strong>Fixez votre version de Node partout : <\/strong>Votre image CI, Dockerfile, .nvmrc et VPS de production devraient tous \u00eatre en accord. \u201c\u00c7a marche sur ma machine\u201d devient rapidement co\u00fbteux une fois que les modules natifs entrent en jeu.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">\ud83e\udd14<a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/bun-vs-node\/\"><strong>Tu Consid\u00e8res Bun<\/strong><\/a><strong>?<\/strong> Il est plus rapide sur certaines charges de travail et vraiment impressionnant, mais l&#8217;\u00e9cosyst\u00e8me est encore plus petit et le bilan de production est moins long que celui de Node. Pour la plupart des \u00e9quipes, le classique l&#8217;emporte.<\/p>\n\n\n<p class=\"wp-block-paragraph\">NodeSource, qui maintient les d\u00e9p\u00f4ts apt et yum d&#8217;o\u00f9 de nombreuses \u00e9quipes de production installent Node, met en avant les am\u00e9liorations de la version 24.x, en commen\u00e7ant par un moteur V8 plus r\u00e9cent. Node 24 embarque \u00e9galement des outils d\u00e9sormais matures comme le built-in node &#8211;watch et un ex\u00e9cuteur de tests natif stable (node : test), tous deux stabilis\u00e9s dans les versions 20\u201322 et qui se poursuivent ici. Rien de tape-\u00e0-l\u2019\u0153il. Cela \u00e9limine juste un peu de friction op\u00e9rationnelle chaque mois.<\/p>\n\n\n<h2 id=\"h-how-do-you-install-node-js-on-a-vps\" class=\"wp-block-heading\">Comment Installer Node.js Sur Un VPS ?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Tu as deux chemins d&#8217;installation r\u00e9alistes. Choisis en fonction de si le serveur ex\u00e9cute une application Node ou plusieurs.<\/p>\n\n\n<h3 id=\"h-nodesource-for-a-single-app-server\" class=\"wp-block-heading\">NodeSource pour un Serveur d&#8217;Application Unique<\/h3>\n\n\n<p class=\"wp-block-paragraph\">C&#8217;est le chemin de production le plus simple. Un script d&#8217;installation et une commande <strong><code>apt install<\/code><\/strong> te permettent d&#8217;obtenir la version LTS actuelle de Node 24 en tant que paquet syst\u00e8me, et les futures mises \u00e0 jour de s\u00e9curit\u00e9 seront int\u00e9gr\u00e9es via les mises \u00e0 jour de paquets normales.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Sur Ubuntu ou Debian :<\/p>\n\n\n<pre class=\"wp-block-code\"><code>curl -fsSL https:\/\/deb.nodesource.com\/setup_24.x | bash -\napt install -y nodejs<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">V\u00e9rifie l&#8217;installation :<\/p>\n\n\n<pre class=\"wp-block-code\"><code>node -v\nnpm -v<\/code><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2560\" height=\"1344\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-scaled.webp\" alt=\"Commandes de terminal affichant la version 24.14.0 de Node.js et la version 11.9.0 de npm install\u00e9es sur DreamHost.\" class=\"wp-image-83813 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-scaled.webp 2560w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-300x158.webp 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1024x538.webp 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-768x403.webp 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1536x806.webp 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-2048x1075.webp 2048w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-600x315.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1200x630.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-730x383.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1460x767.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-784x412.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1568x823.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-877x460.webp 877w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1754x921.webp 1754w\" data-sizes=\"(max-width: 2560px) 100vw, 2560px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 2560px; --smush-placeholder-aspect-ratio: 2560\/1344;\" \/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Tu devrais voir une version Node 24.x.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Les instructions pour les distributions de la famille RHEL (yum\/dnf) se trouvent dans le d\u00e9p\u00f4t officiel des distributions NodeSource.<\/p>\n\n\n<h3 id=\"h-nvm-for-per-project-version-switching\" class=\"wp-block-heading\">nvm pour le changement de version par projet<\/h3>\n\n\n<p class=\"wp-block-paragraph\"><a target=\"_blank\" href=\"https:\/\/github.com\/nvm-sh\/nvm\">nvm<\/a> (Gestionnaire de Version Node) installe Node dans ton r\u00e9pertoire personnel et permet \u00e0 diff\u00e9rents projets d&#8217;ex\u00e9cuter diff\u00e9rentes versions de Node. Utile si tu h\u00e9berges plusieurs applications sur le m\u00eame serveur ou si tu n&#8217;as pas acc\u00e8s \u00e0 sudo.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Lance cela en tant qu&#8217;utilisateur de ton application, pas en tant que root :<\/p>\n\n\n<pre class=\"wp-block-code\"><code>curl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.40.5\/install.sh | bash<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Recharge ton Shell, puis installe Node 24 :<\/p>\n\n\n<pre class=\"wp-block-code\"><code>nvm install 24\nnvm use 24\nnvm alias default 24<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud83d\udc49Une r\u00e8gle importante : <\/strong>Ne utilise pas <code>sudo \u2018npm install -g\u2019<\/code> pour les d\u00e9pendances d&#8217;applications.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Les installations globales sont g\u00e9n\u00e9ralement r\u00e9serv\u00e9es aux outils CLI de niveau machine comme pm2, typescript ou nodemon. Les d\u00e9pendances de ton application doivent figurer dans package.json et devraient \u00eatre install\u00e9es \u00e0 partir du r\u00e9pertoire du projet avec npm ci.<\/p>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>NodeSource<\/strong><\/th><th><strong>nvm<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Une version Node par serveur<\/td><td>Plusieurs versions Node par serveur<\/td><\/tr><tr><td>Install\u00e9 sur tout le syst\u00e8me, fonctionne pour tout utilisateur<\/td><td>Install\u00e9 par utilisateur<\/td><\/tr><tr><td>Mises \u00e0 jour automatiques avec <code>\u2018apt\u2019<\/code><\/td><td>G\u00e9r\u00e9 manuellement<\/td><\/tr><tr><td>Requiert <code>sudo<\/code><\/td><td>Pas de <code>sudo<\/code> requis<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Si tu n&#8217;es pas s\u00fbr, commence par NodeSource. La plupart des serveurs de production \u00e0 usage unique n&#8217;ont pas besoin de changement de version Node par projet.<\/p>\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49<strong>Utilisateurs de VPS autog\u00e9r\u00e9s DreamHost :<\/strong> L&#8217;application Node disponible lors de la configuration est fournie avec Node 22 LTS \u2014 toujours pris en charge jusqu&#8217;en avril 2027. Pour utiliser Node 24, utilisez les \u00e9tapes NodeSource ou nvm ci-dessus apr\u00e8s la configuration.<\/p>\n\n\n<h2 id=\"h-should-you-use-pm2-or-systemd-to-keep-your-app-running\" class=\"wp-block-heading\">Devrais-Tu Utiliser PM2 ou systemd Pour Maintenir Ton Application En Fonctionnement ?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Les deux fonctionnent. La r\u00e9ponse honn\u00eate est celle avec laquelle ton \u00e9quipe est \u00e0 l&#8217;aise. PM2 est la voie conviviale pour les d\u00e9veloppeurs. systemd est la voie native Unix. Les deux r\u00e9solvent les trois m\u00eames probl\u00e8mes : red\u00e9marrage en cas de crash, d\u00e9marrage au boot, et arr\u00eat en douceur lors d\u2019un \u2018SIGTERM\u2019.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Si tu commences \u00e0 partir de z\u00e9ro, voici comment choisir :<\/p>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><\/th><th><strong>PM2<\/strong><\/th><th><strong>systemd<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Temps de configuration<\/td><td>3 minutes<\/td><td>10 minutes<\/td><\/tr><tr><td>Mode cluster (multi-c\u0153ur)<\/td><td>Int\u00e9gr\u00e9<\/td><td>Non int\u00e9gr\u00e9 (d\u00e9marrer N unit\u00e9s)<\/td><\/tr><tr><td>Rotation des logs<\/td><td>Module : <code>\u2018pm2-logrotate\u2019<\/code><\/td><td>Int\u00e9gr\u00e9 via <code>\u2018journalctl\u2019<\/code><\/td><\/tr><tr><td>Rechargement sans temps d&#8217;arr\u00eat<\/td><td><code>\u2018pm2 reload\u2019<\/code><\/td><td>G\u00e9n\u00e9ralement g\u00e9r\u00e9 manuellement avec red\u00e9marrages progressifs ou plusieurs unit\u00e9s<\/td><\/tr><tr><td>Surcharge m\u00e9moire (d\u00e9mon)<\/td><td>Faible surcharge du d\u00e9mon<\/td><td>Aucune (pas de d\u00e9mon suppl\u00e9mentaire)<\/td><\/tr><tr><td>Le meilleur pour<\/td><td>Bo\u00eete unique, boutique JS, it\u00e9ration rapide<\/td><td>Bo\u00eetes multi-applications, confort de l&#8217;\u00e9quipe d&#8217;op\u00e9rations<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Le <a target=\"_blank\" href=\"https:\/\/pm2.keymetrics.io\/docs\/usage\/quick-start\/\">d\u00e9marrage rapide PM2<\/a> est exactement cela, rapide :<\/p>\n\n\n<pre class=\"wp-block-code\"><code>npm install -g pm2\npm2 start app.js --name api\npm2 startup    # imprime la commande de d\u00e9marrage systemd \u00e0 ex\u00e9cuter\npm2 save       # enregistre la liste des processus actuels<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">PM2 devient alors la seule chose \u00e0 laquelle tu t&#8217;adresses : \u2018<code>pm2 logs<\/code>,\u2019 \u2018<code>pm2 reload api<\/code>,\u2019 \u2018<code>pm2 monit<\/code>.\u2019<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud83d\udc49Aussi bon \u00e0 savoir :<\/strong> \u00ab <code>pm2 startup<\/code> \u00bb \u00e9crit une unit\u00e9 systemd, donc la configuration de PM2 utilise <em>r\u00e9ellement<\/em> systemd sous le capot.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Une unit\u00e9 systemd minimale pour la gestion directe de Node \u00e0 \u2018\/etc\/systemd\/system\/api.service\u2019 :<\/p>\n\n\n<p class=\"wp-block-paragraph\"><code>[Unit]<br>Description=Mon API Node<br>After=network.target<\/code><\/p>\n\n\n<p class=\"wp-block-paragraph\"><code>[Service]<br>Type=simple<br>User=app<br>WorkingDirectory=\/var\/www\/api<br>ExecStart=\/usr\/bin\/node server.js<br>Restart=on-failure<br>RestartSec=5<br>Environment=NODE_ENV=production<br>StandardOutput=journal<br>StandardError=journal<\/code><\/p>\n\n\n<p class=\"wp-block-paragraph\"><code>[Install]<br>WantedBy=multi-user.target<\/code><br>Ensuite \u2018<code>systemctl enable --now api<\/code>.\u2019 Les logs se trouvent dans \u2018<code>journalctl -u api -f<\/code>.\u2019<\/p>\n\n\n<p class=\"wp-block-paragraph\">Si tu utilises d\u00e9j\u00e0 PM2 et que cela fonctionne, ne migre pas vers systemd simplement parce que quelqu&#8217;un sur Hacker News l&#8217;a dit. La m\u00e9moire du d\u00e9mon PM2 n&#8217;est pas la raison pour laquelle tu migrerais loin de celui-ci.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Migre lorsque tu as une vraie raison, comme faire fonctionner une demi-douzaine de processus Node o\u00f9 chaque m\u00e9gaoctet compte, ou exp\u00e9dier dans un environnement op\u00e9rationnel o\u00f9 chaque autre service est une unit\u00e9 systemd, et PM2 se d\u00e9marque comme l&#8217;exception.<\/p>\n\n\n<h2 id=\"h-how-do-you-put-nginx-or-caddy-in-front-of-your-node-app\" class=\"wp-block-heading\">Comment Mettre NGINX (ou Caddy) Devant Ton Application Node ?<\/h2>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"1099\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node.webp\" alt=\"NGINX agit comme proxy inverse entre les demandes des clients et le backend de l'application Node.js.\" class=\"wp-image-83812 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-300x206.webp 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1024x703.webp 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-768x528.webp 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1536x1055.webp 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-600x412.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1200x824.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-730x501.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1460x1003.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-784x539.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1568x1077.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-877x602.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/1099;\" \/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Tu veux un proxy inverse devant Node pour cinq raisons : terminaison HTTPS, compression gzip\/brotli, service d&#8217;actifs statiques, ex\u00e9cution de plusieurs applications sur la m\u00eame machine, et limitation de d\u00e9bit plus facile. Node <em>peut<\/em> faire tout cela. NGINX et Caddy le font mieux, et ils ne bloquent pas ta boucle d\u2019\u00e9v\u00e9nements lorsque quelque chose se comporte mal.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Choisis NGINX si quelqu&#8217;un dans ton \u00e9quipe le conna\u00eet d\u00e9j\u00e0. Choisis Caddy si tu veux <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/ultimate-guide-ssl-tls\/\">HTTPS<\/a> en trois lignes de configuration et que tu es \u00e0 l&#8217;aise avec un \u00e9cosyst\u00e8me de configuration avanc\u00e9e plus petit.<\/p>\n\n\n<h3 id=\"h-minimal-nginx-config\" class=\"wp-block-heading\">Configuration Minimale De NGINX<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Mets ce bloc proxy dans <strong>\/etc\/nginx\/sites-available\/api<\/strong>, cr\u00e9e un lien symbolique vers <strong><code>sites-enabled<\/code><\/strong>, puis <strong><code>nginx -t &amp;&amp; systemctl reload nginx<\/code><\/strong>.<\/p>\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 80;\n    server_name api.example.com;\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_cache_bypass $http_upgrade;\n    }\n}<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Les en-t\u00eates \u2018Upgrade\u2019 et \u2018Connection\u2019 sont les lignes de support de WebSocket. <a target=\"_blank\" href=\"https:\/\/nginx.org\/en\/docs\/http\/websocket.html\">Les propres documents de NGINX indiquent<\/a> que Upgrade est un en-t\u00eate de saut par saut, il n\u00e9cessite donc un traitement explicite lors de la proxyfication du trafic WebSocket.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Laisse-les si ton application utilise actuellement des WebSockets, ou pourrait les utiliser plus tard. Socket.IO, les abonnements GraphQL via WebSockets, et un nombre surprenant de fonctionnalit\u00e9s en temps r\u00e9el \u00ab r\u00e9guli\u00e8res \u00bb d\u00e9pendent de cette poign\u00e9e de main pour la mise \u00e0 niveau.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Le bug de production le plus courant que je vois dans les configurations Node est un serveur Socket.IO derri\u00e8re <a target=\"_blank\" href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/216431827-Nginx-overview\">NGINX<\/a> sans ces deux lignes. Les connexions \u00e9chouent par intermittence, les d\u00e9veloppeurs bl\u00e2ment Socket.IO, et le probl\u00e8me r\u00e9el est g\u00e9n\u00e9ralement la configuration du proxy.<\/p>\n\n\n<h3 id=\"h-minimal-caddyfile\" class=\"wp-block-heading\">Caddyfile Minimal<\/h3>\n\n\n<p class=\"wp-block-paragraph\">La version <a target=\"_blank\" href=\"https:\/\/caddyserver.com\/docs\/quick-starts\/reverse-proxy\">d\u00e9marrage rapide du proxy inverse Caddy<\/a> de la m\u00eame chose :<\/p>\n\n\n<pre class=\"wp-block-code\"><code>api.example.com {\n    reverse_proxy 127.0.0.1:3000\n}<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Voil\u00e0 le fichier complet. Tant que le domaine pointe vers le serveur et que les ports 80\/443 sont accessibles, Caddy configure et renouvelle automatiquement le HTTPS. La documentation de Caddy indique que le <a target=\"_blank\" href=\"https:\/\/caddyserver.com\/docs\/automatic-https\">HTTPS automatique<\/a> provisionne les certificats TLS pour les sites et les renouvelle ; son guide de d\u00e9marrage rapide pour le proxy inverse mentionne \u00e9galement que le HTTPS est automatique lorsque Caddy conna\u00eet le nom d\u2019h\u00f4te.<\/p>\n\n\n<h3 id=\"h-bind-node-to-localhost-not-0-0-0-0\" class=\"wp-block-heading\">Lier Le N\u0153ud \u00c0 Localhost, Pas \u00c0 0.0.0.0<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Quel que soit le proxy que tu choisis, configure ton application Node pour \u00e9couter sur 127.0.0.1:3000, et non 0.0.0.0:3000. La seule chose qui devrait \u00eatre expos\u00e9e \u00e0 Internet public sur une bo\u00eete Node est le proxy. Associe cela \u00e0 UFW, le frontend de pare-feu courant d&#8217;Ubuntu, pour tout refuser sauf les ports 22, 80, et 443.<\/p>\n\n\n<pre class=\"wp-block-code\"><code>ufw par d\u00e9faut refuser entrant\nufw permettre 22\/tcp\nufw permettre 80\/tcp\nufw permettre 443\/tcp\nufw activer<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Si SSH fonctionne sur un port personnalis\u00e9, autorise ce port avant d&#8217;activer UFW.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Lie-toi \u00e0 localhost d\u00e8s le premier jour. La r\u00e9union o\u00f9 quelqu&#8217;un admet que \u00ab l&#8217;application \u00e9tait expos\u00e9e parce que Node \u00e9tait li\u00e9 \u00e0 0.0.0.0 \u00bb n&#8217;est pas une r\u00e9union \u00e0 laquelle tu souhaites assister.<\/p>\n\n\n<h2 id=\"h-how-do-you-set-up-https-for-your-node-js-app\" class=\"wp-block-heading\">Comment Configurer HTTPS Pour Ton Application Node.js ?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Utilise <a target=\"_blank\" href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/216539558-Let-s-Encrypt-SSL-certificate-overview\">Let&#8217;s Encrypt<\/a>. C&#8217;est gratuit, automatis\u00e9, et approuv\u00e9 par tous les navigateurs. Il existe deux chemins, selon le proxy que tu as choisi.<\/p>\n\n\n<h3 id=\"h-nginx-certbot\" class=\"wp-block-heading\">NGINX + Certbot<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Oriente un enregistrement A vers ton IP VPS et attends que le DNS se propage.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Installe Certbot :<\/p>\n\n\n<pre class=\"wp-block-code\"><code>apt install certbot python3-certbot-nginx<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Ex\u00e9cute :<\/p>\n\n\n<pre class=\"wp-block-code\"><code>certbot --nginx -d api.example.com<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Certbot met \u00e0 jour ta configuration NGINX et recharge le serveur automatiquement.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Sur les versions modernes d&#8217;Ubuntu, un minuteur systemd install\u00e9 par le paquet Certbot g\u00e8re automatiquement le renouvellement.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Ouvre <strong>https:\/\/api.example.com<\/strong> et confirme l&#8217;ic\u00f4ne de verrou.<\/p>\n\n\n<p class=\"wp-block-paragraph\">La <a target=\"_blank\" href=\"https:\/\/certbot.eff.org\/instructions?ws=nginx&amp;os=snap\">documentation officielle de Certbot<\/a> couvre \u00e9galement le chemin d&#8217;installation bas\u00e9 sur snap si le paquet de ta distribution est obsol\u00e8te.<\/p>\n\n\n<h3 id=\"h-caddy\" class=\"wp-block-heading\">Caddy<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Ajoute le domaine au Caddyfile (l&#8217;exemple ci-dessus l&#8217;a d\u00e9j\u00e0), puis red\u00e9marre Caddy. Tant que le domaine est r\u00e9solu correctement et que les ports 80\/443 sont accessibles, le certificat est provisionn\u00e9 automatiquement lors du premier d\u00e9marrage. Il n\u2019y a pas de Certbot.<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Ne termine pas le TLS dans Node lui-m\u00eame pour la production.<\/strong><\/p>\n\n\n<p class=\"wp-block-paragraph\">Le module https de Node fonctionne parfaitement, mais les proxies invers\u00e9s comme NGINX et Caddy sont sp\u00e9cialement con\u00e7us pour la terminaison TLS. Ils offrent le stapling OCSP, des valeurs par d\u00e9faut de chiffrement modernes, le renouvellement automatique des certificats, le support de HTTP\/2 et \u2014 dans le cas de Caddy \u2014 le support de HTTP\/3 d\u00e8s la sortie de la bo\u00eete.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Pourrais-tu g\u00e9rer tout cela directement dans Node ? Bien s\u00fbr. Tu serais juste en train de reconstruire une infrastructure que ton proxy r\u00e9sout d\u00e9j\u00e0 extr\u00eamement bien.<\/p>\n\n\n<h2 id=\"h-what-does-a-production-ready-node-js-setup-actually-look-like\" class=\"wp-block-heading\">\u00c0 Quoi Ressemble Vraiment Une Configuration Node.js Pr\u00eate Pour La Production ?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Huit choses mordent les gens en production. La plupart ne figurent pas dans les tutoriels d&#8217;installation car elles ne correspondent pas \u00e0 l&#8217;arc &#8220;installer Node, ex\u00e9cuter l&#8217;application&#8221;. Elles repr\u00e9sentent la diff\u00e9rence entre une application qui survit au deuxi\u00e8me mois et une qui ne le fait pas.<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>NODE_ENV=production:<\/strong> L\u2019\u00e9tape la plus souvent oubli\u00e9e. Dans de nombreux cadres et biblioth\u00e8ques Node, cela d\u00e9sactive les comportements exclusifs au d\u00e9veloppement et active les optimisations de production. Express, par exemple, met en cache les mod\u00e8les de vue compil\u00e9s et renvoie des erreurs plus concises en production \u2014 ses propres documents mentionnent une am\u00e9lioration des performances allant jusqu&#8217;\u00e0 3 fois. D\u00e9finis la variable d\u2019environnement partout.<\/li>\n\n\n\n<li><strong>Arr\u00eat en douceur:<\/strong> Lorsque ton VPS red\u00e9marre ou que PM2 envoie un \u2018SIGTERM\u2019, ton application dispose de quelques secondes pour g\u00e9rer les requ\u00eates en cours, fermer les connexions \u00e0 la base de donn\u00e9es et se terminer proprement. Configure un gestionnaire \u2018process.on(&#8216;SIGTERM&#8217;, &#8230;)\u2019. Le timing d&#8217;arr\u00eat par d\u00e9faut de PM2 d\u00e9pend de la configuration et de l&#8217;environnement, donc ne suppose pas que tu auras toujours beaucoup de temps pour nettoyer.&nbsp;<\/li>\n\n\n\n<li><strong>Rotation des logs:<\/strong> Le module \u2018pm2-logrotate\u2019 de PM2 s\u2019en occupe pour PM2. Le journal systemd s\u2019en occupe pour les unit\u00e9s systemd directes. Sans rotation, tes logs consomment le disque en un quart du temps que tu attendrais.<\/li>\n\n\n\n<li><strong>Discipline .env:<\/strong> Ne jamais engager de secrets, ne jamais les enregistrer. Utilise \u2018dotenv\u2019 pour le d\u00e9veloppement local. En production, d\u00e9finis les variables d\u2019environnement via \u2018Environment=\u2019 de ton unit\u00e9 systemd ou ton fichier \u00e9cosyst\u00e8me PM2. Le jour o\u00f9 tu fais \u2018console.log(process.env)\u2019 par accident est le jour o\u00f9 tu fais tourner chaque identifiant.<\/li>\n\n\n\n<li><strong>Un proxy inverse devant Node: <\/strong>Lie Node \u00e0 localhost ; laisse NGINX ou Caddy faire face \u00e0 internet public.<\/li>\n\n\n\n<li><strong>Un pare-feu:<\/strong> UFW bloque tout sauf 22, 80, 443. D\u00e9placer SSH loin du port 22 n\u2019arr\u00eatera pas un attaquant d\u00e9termin\u00e9, mais cela r\u00e9duit consid\u00e9rablement le bruit de force brute automatis\u00e9 et les logs d&#8217;authentification inutiles.<\/li>\n\n\n\n<li><strong>Surveillance:<\/strong> Un point de terminaison de v\u00e9rification de sant\u00e9 que ton outil de surveillance consulte chaque minute. PM2 dispose des bases int\u00e9gr\u00e9es. Pour quelque chose de s\u00e9rieux, utilise Prometheus et Grafana, ou un service de disponibilit\u00e9 h\u00e9berg\u00e9 comme <a target=\"_blank\" href=\"https:\/\/betterstack.com\/\">Better Stack<\/a> ou <a target=\"_blank\" href=\"https:\/\/uptimerobot.com\/\">UptimeRobot<\/a>. Tu veux savoir que ton application est hors ligne <em>avant<\/em> qu&#8217;un client te le signale.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">Estimation de la maintenance pour la pile ci-dessus : une \u00e0 trois heures par mois.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Mises \u00e0 jour Apt, mises \u00e0 niveau occasionnelles des d\u00e9pendances et un examen trimestriel du volume des logs. C&#8217;est l&#8217;\u00e9change pour les gains de co\u00fbt et de contr\u00f4le.<\/p>\n\n\n<h2 id=\"h-when-is-a-vps-the-wrong-choice-for-node-js\" class=\"wp-block-heading\">Quand Est-Ce Que Un VPS Est Un Mauvais Choix Pour Node.js ?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Un VPS est un mauvais choix lorsque ton travail est con\u00e7u pour autre chose. Sois honn\u00eate sur le c\u00f4t\u00e9 o\u00f9 tu te trouves avant de provisionner.<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sites statiques et contenu SSG :<\/strong> Exportation Next.js, Astro, Gatsby et un blog Eleventy. Des plateformes comme Vercel, Netlify ou Cloudflare Pages vous offrent un h\u00e9bergement statique mis en cache globalement, des d\u00e9ploiements bas\u00e9s sur Git, et des reconstructions automatiques d\u00e8s le d\u00e9part. Un VPS est g\u00e9n\u00e9ralement une infrastructure inutile pour un contenu purement statique.<\/li>\n\n\n\n<li><strong>Charges de travail \u00e9v\u00e9nementielles et peu fr\u00e9quentes :<\/strong> Cloudflare Workers et AWS Lambda sont \u00e9conomiques pour des webhooks qui s&#8217;ex\u00e9cutent dix fois par jour.&nbsp;<\/li>\n\n\n\n<li><strong>Applications en temps r\u00e9el n\u00e9cessitant plus de 100 000 connexions simultan\u00e9es :<\/strong> Un VPS ne se scale pas horizontalement. Tu auras besoin d&#8217;orchestration (Kubernetes, ECS, Nomad) ou d&#8217;une plateforme g\u00e9r\u00e9e en temps r\u00e9el comme Ably ou Pusher.<\/li>\n\n\n\n<li><strong>Charges de travail r\u00e9glement\u00e9es et lourdes en conformit\u00e9 :<\/strong> HIPAA, PCI-DSS Niveau 1, FedRAMP. Une PaaS g\u00e9r\u00e9e avec des certifications de conformit\u00e9 int\u00e9gr\u00e9es \u00e9pargne la douleur des audits. L&#8217;h\u00e9bergement autog\u00e9r\u00e9 de la conformit\u00e9 sur un VPS est un projet de plusieurs trimestres que tu ne veux probablement pas.<\/li>\n\n\n\n<li><strong>Aucun confort avec <\/strong><a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/linux-distros\/\"><strong>Linux<\/strong><\/a><strong> \u2014 et aucune envie de le d\u00e9velopper :<\/strong> Des plateformes comme Render, Railway et DigitalOcean App Platform se situent quelque part entre l&#8217;h\u00e9bergement VPS brut et la PaaS enti\u00e8rement g\u00e9r\u00e9e. Des outils comme <a href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/dokploy\/\">Dokploy<\/a> ajoutent des workflows de d\u00e9ploiement de style Heroku sur ton propre infrastructure VPS. Tu conserves encore beaucoup des avantages en termes de co\u00fbt et de contr\u00f4le sans avoir besoin de te familiariser profond\u00e9ment avec iptables, les d\u00e9tails de systemd, ou le d\u00e9bogage de proxy inverse \u00e0 1 heure du matin.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">Il n&#8217;y a aucune honte dans aucune de ces r\u00e9ponses. La meilleure d\u00e9cision technique est celle qui correspond \u00e0 ta charge de travail.<\/p>\n\n\n<h2 id=\"h-picking-your-node-stack-and-moving-in\" class=\"wp-block-heading\">Choisir Ton Stack Node Et Emm\u00e9nager<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Ouvre cette facture d&#8217;h\u00e9bergement encore une fois.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Tu es sur le point de remplacer une quantit\u00e9 surprenante par une seule facture de VPS.<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud83d\udc49La pile :<\/strong> Ubuntu 24.04 LTS, Node 24, PM2 (ou systemd), NGINX (ou Caddy), Let&#8217;s Encrypt via Certbot (ou int\u00e9gr\u00e9 \u00e0 Caddy).<\/p>\n\n\n<p class=\"wp-block-paragraph\">Lance le plan VPS le plus petit qui atteint la RAM que tu as dimensionn\u00e9e, installe Node, ex\u00e9cute ton application sur \u2018127.0.0.1\u2019, oriente NGINX vers celle-ci, et modifie ton DNS.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Si l&#8217;application survit \u00e0 un d\u00e9ploiement, un red\u00e9marrage et une ex\u00e9cution nocturne sans probl\u00e8me, tu es presque arriv\u00e9.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Le reste, c&#8217;est de la maintenance. Une ou deux heures par mois, la fen\u00eatre occasionnelle de \u00ab\u00a0apt upgrade\u00a0\u00bb, une mise \u00e0 jour des d\u00e9pendances tous les trimestres. C&#8217;est l&#8217;accord que tu as conclu lorsque tu as \u00e9chang\u00e9 une facture par utilisateur contre une facture forfaitaire, et c\u2019est avec le Self-Managed VPS Stack 4 de DreamHost que tu peux commencer.<\/p>\n\n\n\n<div class=\"article-cta-shared article-cta-small article-cta--product\">\n\t<div class=\"tr-img-wrap-outer jsLoading\"><img decoding=\"async\" class=\"js-img-lazy \" src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/lazy-loading-transparent.webp\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/cta_image_a-877x522.webp 1x, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/cta_image_a.webp 2x\"  \/><\/div>\n\n\t<a href='https:\/\/www.dreamhost.com\/hosting\/vps\/' class='link-top' target='_blank' rel='noopener noreferrer'>\n\t\t<span>VPS<\/span>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\" width=\"15\"><path d=\"M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\/><\/svg>\n\t<\/a>\n\n\t<div class=\"content-btm\">\n\t\t<h2 class=\"h2--md\">\n\t\t\tOwn Your Entire Stack. Apps, AI, Databases, and More.\n\t\t<\/h2>\n\t\t<p class=\"p--md\">\n\t\t\tKeep every credential and conversation on a server you control, with NVMe speed and unmetered bandwidth built in.\n\t\t<\/p>\n\n\t\t        <a\n            href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Explore VPS Hosting Plans                    <\/a>\n\n\t<\/div>\n<\/div>\n\n<h2 id=\"h-frequently-asked-questions-about-running-node-js-on-a-vps\" class=\"wp-block-heading\">Questions Fr\u00e9quemment Pos\u00e9es Sur L&#8217;ex\u00e9cution De Node.js Sur Un VPS<\/h2>\n\n\n<h3 id=\"h-can-i-run-node-js-on-any-vps\" class=\"wp-block-heading\">Puis-je ex\u00e9cuter Node.js sur n&#8217;importe quel VPS ?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">La plupart des plans VPS modernes ex\u00e9cutent tr\u00e8s bien Node.js. Les plans VPS bas\u00e9s sur KVM avec une distribution Linux 64 bits sont la configuration par d\u00e9faut la plus s\u00fbre pour les versions actuelles de Node.js.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Les anciens plans bas\u00e9s sur OpenVZ ont parfois des restrictions de noyau qui perturbent les nouvelles versions de Node. Si tu choisis entre des fournisseurs, demande s&#8217;ils utilisent KVM.<\/p>\n\n\n<h3 id=\"h-how-much-ram-does-node-js-need-on-a-vps\" class=\"wp-block-heading\">Combien de RAM Node.js n\u00e9cessite-t-il sur un VPS ?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Un serveur Express minimal fonctionne au ralenti bien en dessous de 100 Mo, mais une application de production r\u00e9aliste avec intergiciel, journalisation et un pool de connexions tourne g\u00e9n\u00e9ralement dans la plage de 150 \u00e0 300 Mo.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Le minimum r\u00e9aliste pour une application de production est de 2 Go ; le niveau id\u00e9al pour une pile Node + Postgres + Redis est de 4 Go. La <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\">pile 4 (4 Go) de VPS auto-g\u00e9r\u00e9 de DreamHost<\/a> g\u00e8re la plupart des charges de travail de production Node. Opte pour la pile 8 (8 Go) pour les applications utilisant intensivement le SSR ou en temps r\u00e9el.<\/p>\n\n\n<h3 id=\"h-what-s-the-current-node-js-lts-version\" class=\"wp-block-heading\">Quelle est la version LTS actuelle de Node.js ?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">La version LTS active actuelle est Node.js 24.x (&#8220;Krypton&#8221;), promue le 28 octobre 2025 et support\u00e9e jusqu&#8217;en avril 2028. Node.js 22.x (&#8220;Jod&#8221;) est en LTS de maintenance jusqu&#8217;en avril 2027 si une d\u00e9pendance impose une compatibilit\u00e9 arri\u00e8re. <a target=\"_blank\" href=\"https:\/\/nodejs.org\/en\/blog\/release\/v26.0.0\">Node.js 26 a \u00e9t\u00e9 lanc\u00e9 le 5 mai 2026<\/a>, comme actuel et sera promu en LTS en octobre 2026.<\/p>\n\n\n<p class=\"wp-block-paragraph\">La plupart des \u00e9quipes de production s&#8217;en tiennent aux versions LTS \u00e0 moins qu&#8217;elles n&#8217;aient sp\u00e9cifiquement besoin de nouvelles fonctionnalit\u00e9s d&#8217;ex\u00e9cution.<\/p>\n\n\n<h3 id=\"h-do-i-need-pm2-if-i-have-systemd\" class=\"wp-block-heading\">Ai-je besoin de PM2 si j&#8217;ai systemd ?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Non, tu n&#8217;as pas besoin des deux. PM2 et systemd r\u00e9solvent le m\u00eame probl\u00e8me : maintenir ton application Node en fonctionnement en cas de plantages et de red\u00e9marrages. De nombreuses \u00e9quipes centr\u00e9es sur Node choisissent PM2 pour la gestion int\u00e9gr\u00e9e des grappes, la gestion des logs et les outils de rechargement.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Les \u00e9quipes qui utilisent d\u00e9j\u00e0 des unit\u00e9s systemd pour tout le reste choisissent systemd.<\/p>\n\n\n<h3 id=\"h-why-put-nginx-in-front-of-node-js\" class=\"wp-block-heading\">Pourquoi mettre NGINX devant Node.js ?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">NGINX (ou Caddy) devant Node.js centralise la terminaison TLS, la compression, la distribution d&#8217;actifs statiques et la limitation de d\u00e9bit dans un logiciel con\u00e7u sp\u00e9cifiquement pour le proxy et le service web.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Cela te permet \u00e9galement d&#8217;ex\u00e9cuter plusieurs applications Node sur le m\u00eame VPS sans conflits de ports. En production, Node \u00e9coute sur localhost ; NGINX fait face \u00e0 l&#8217;internet public.<\/p>\n\n\n<h3 id=\"h-is-node-js-on-a-vps-cheaper-than-heroku-or-vercel\" class=\"wp-block-heading\">Node.js sur un VPS est-il moins cher que Heroku ou Vercel ?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Oui, souvent. Un VPS de 4 Go se situe g\u00e9n\u00e9ralement dans la fourchette de 15 \u00e0 25 $ par mois au tarif du march\u00e9 et peut consolider les co\u00fbts d&#8217;ex\u00e9cution d&#8217;applications, de base de donn\u00e9es et de cache qui sont factur\u00e9s s\u00e9par\u00e9ment sur de nombreuses plateformes PaaS.<\/p>\n\n\n<p class=\"wp-block-paragraph\">La tarification de Vercel Pro est bas\u00e9e sur le nombre d&#8217;utilisateurs, et les plateformes sans serveur imposent toujours des limites de dur\u00e9e d&#8217;ex\u00e9cution selon le runtime et le plan.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Le compromis est que tu g\u00e8res les op\u00e9rations toi-m\u00eame, environ une \u00e0 trois heures par mois.<\/p>\n\n\n<h3 id=\"h-can-i-run-multiple-node-apps-on-one-vps\" class=\"wp-block-heading\">Puis-je ex\u00e9cuter plusieurs applications Node sur un seul VPS ?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Oui, et c&#8217;est la raison la plus courante pour laquelle les \u00e9quipes passent de PaaS \u00e0 un VPS. Ex\u00e9cute chaque application sur son propre port interne (3000, 3001, 3002) et dirige le trafic avec des blocs serveur NGINX par nom d&#8217;h\u00f4te. PM2 g\u00e8re tous ces processus s\u00e9par\u00e9ment ; systemd utilise un fichier unitaire par application.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Un VPS de 4 Go peut souvent g\u00e9rer plusieurs services Node l\u00e9gers en plus d\u2019une petite charge de travail de base de donn\u00e9es.<\/p>\n\n\n<h3 id=\"h-can-i-run-node-js-on-dreamhost-shared-hosting\" class=\"wp-block-heading\">Puis-je ex\u00e9cuter Node.js sur le Shared Hosting DreamHost ?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Non. Node.js n\u00e9cessite des processus persistants, des installations de paquets au niveau root et une liaison directe de port, ce que le shared hosting ne fournit pas. Les <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\">plans VPS Auto-g\u00e9r\u00e9s de DreamHost<\/a> (Stack 4 et plus) conviennent aux charges de travail Node avec un acc\u00e8s root complet, un stockage NVMe et une bande passante illimit\u00e9e.<\/p>\n\n\n\n<p><script type=\"application\/ld+json\"><br \/>\n{<br \/>\n  \"@context\": \"https:\/\/schema.org\",<br \/>\n  \"@graph\": [<br \/>\n    {<br \/>\n      \"@type\": \"FAQPage\",<br \/>\n      \"mainEntity\": [<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Puis-je ex\u00e9cuter Node.js sur n'importe quel VPS ?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"La plupart des plans VPS modernes ex\u00e9cutent correctement Node.js. La condition est KVM (ou une virtualisation compl\u00e8te similaire) et un noyau Linux 64 bits. Les plans plus anciens bas\u00e9s sur OpenVZ ont parfois des restrictions de noyau qui perturbent les nouvelles versions de Node. Si tu choisis entre des fournisseurs, demande s'ils sont bas\u00e9s sur KVM.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Combien de RAM Node.js n\u00e9cessite-t-il sur un VPS ?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"Un serveur Express minimal fonctionne bien en dessous de 100 Mo, mais une application de production r\u00e9aliste avec des intergiciels, des logs et un pool de connexions fonctionne g\u00e9n\u00e9ralement dans la plage de 150-300 Mo. Le minimum r\u00e9aliste pour une application de production est de 2 Go ; le point id\u00e9al pour une pile Node + Postgres + Redis est de 4 Go. Le Self-Managed VPS Stack 4 de DreamHost (4 Go) g\u00e8re la plupart des charges de travail de production de Node. Passe \u00e0 Stack 8 (8 Go) pour des applications SSR lourdes ou en temps r\u00e9el.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Quelle est la version LTS actuelle de Node.js ?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"La LTS Active actuelle est Node.js 24.x ('Krypton'), promue le 28 octobre 2025 et soutenue jusqu'en avril 2028. Node.js 22.x ('Jod') est en LTS de maintenance jusqu'en avril 2027 si une d\u00e9pendance critique impose une compatibilit\u00e9 arri\u00e8re. Node.js 26 a \u00e9t\u00e9 lanc\u00e9 le 5 mai 2026 comme Current et passe en LTS en octobre 2026. Ne pas ex\u00e9cuter des versions Current (non LTS) en production.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Ai-je besoin de PM2 si j'ai systemd ?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"Non, tu n'as pas besoin des deux. PM2 et systemd r\u00e9solvent le m\u00eame probl\u00e8me, en maintenant ton application Node en fonctionnement en cas de plantages et de red\u00e9marrages. La plupart des \u00e9quipes choisissent PM2 pour les commodit\u00e9s du mode cluster, de la rotation des logs et du rechargement sans interruption. Les \u00e9quipes qui g\u00e8rent d\u00e9j\u00e0 des unit\u00e9s systemd pour tout le reste choisissent systemd. Utilise celui avec lequel ton \u00e9quipe est \u00e0 l'aise.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Pourquoi mettre NGINX devant Node.js ?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"NGINX (ou Caddy) devant Node.js g\u00e8re la terminaison TLS, la compression gzip et brotli, le service des ressources statiques, et la limitation du d\u00e9bit plus efficacement que Node lui-m\u00eame. Cela te permet \u00e9galement de faire fonctionner plusieurs applications Node sur le m\u00eame VPS sans conflits de ports. En production, Node \u00e9coute sur localhost ; NGINX fait face \u00e0 l'internet public. C'est le sch\u00e9ma de production standard, pas une optimisation facultative.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Node.js sur un VPS est-il moins cher que Heroku ou Vercel ?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"Oui, souvent. Un VPS de 4 Go fonctionne dans la gamme de 15 $ \u00e0 25 $ par mois et remplace un dyno Heroku Basic plus Heroku Postgres plus la pile Heroku Redis qui atterrit fr\u00e9quemment dans la gamme de 25 $ \u00e0 60 $ par mois. Vercel Pro commence \u00e0 20 $ par si\u00e8ge avec des d\u00e9lais d'expiration de fonction. L'\u00e9change est que tu g\u00e8res les op\u00e9rations toi-m\u00eame, environ une \u00e0 trois heures par mois de maintenance.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Puis-je ex\u00e9cuter plusieurs applications Node sur un seul VPS ?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"Oui, et c'est la raison la plus courante pour laquelle les \u00e9quipes passent de PaaS \u00e0 un VPS. Ex\u00e9cute chaque application sur son propre port interne (3000, 3001, 3002) et route le trafic avec des blocs serveur NGINX bas\u00e9s sur le nom d\u2019h\u00f4te. PM2 les g\u00e8re tous comme des processus s\u00e9par\u00e9s ; systemd utiliserait un fichier unitaire par application. Un VPS de 4 Go ex\u00e9cute confortablement trois ou quatre petits services Node plus une base de donn\u00e9es.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Puis-je ex\u00e9cuter Node.js sur l'h\u00e9bergement mutualis\u00e9 DreamHost ?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"Non. Node.js n\u00e9cessite des processus persistants, des installations de paquets au niveau root, et une liaison de port direct, aucun de ces \u00e9l\u00e9ments n'est fourni par l'h\u00e9bergement mutualis\u00e9. Les plans VPS autog\u00e9r\u00e9s de DreamHost (Stack 4 et plus) conviennent aux charges de travail Node avec un acc\u00e8s root complet, un stockage NVMe et une bande passante non mesur\u00e9e.\"<br \/>\n          }<br \/>\n        }<br \/>\n      ]<br \/>\n    },<br \/>\n    {<br \/>\n      \"@type\": \"HowTo\",<br \/>\n      \"name\": \"Comment ex\u00e9cuter Node.js sur un VPS\",<br \/>\n      \"step\": [<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Installe Node.js 24 LTS\",<br \/>\n          \"text\": \"Sur Ubuntu ou Debian, ex\u00e9cute : curl -fsSL https:\/\/deb.nodesource.com\/setup_24.x | bash -, puis apt install -y nodejs. V\u00e9rifie avec node -v. Utilise nvm \u00e0 la place si tu as besoin de changer de version par projet.\"<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Configure un gestionnaire de processus\",<br \/>\n          \"text\": \"Installe PM2 avec npm install -g pm2, puis pm2 start app.js --name api, pm2 startup, pm2 save. Ou r\u00e9dige une unit\u00e9 systemd \u00e0 \/etc\/systemd\/system\/api.service et ex\u00e9cute systemctl enable --now api.\"<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Installe NGINX et configure un proxy inverse\",<br \/>\n          \"text\": \"Installe NGINX avec apt install nginx. Cr\u00e9e un bloc serveur dans \/etc\/nginx\/sites-available\/api avec proxy_pass http:\/\/127.0.0.1:3000 et les en-t\u00eates de mise \u00e0 niveau WebSocket. Fais un lien symbolique vers sites-enabled et recharge.\"<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Lia Node \u00e0 localhost et active un pare-feu\",<br \/>\n          \"text\": \"Configure ton application Node pour \u00e9couter sur 127.0.0.1:3000 plut\u00f4t que 0.0.0.0:3000. Active UFW avec deny incoming par d\u00e9faut, puis autorise les ports 22, 80 et 443.\"<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Configure HTTPS avec Let's Encrypt\",<br \/>\n          \"text\": \"Pointe un enregistrement A sur ton IP VPS. Installe Certbot avec apt install certbot python3-certbot-nginx, puis ex\u00e9cute certbot --nginx -d tondomaine.com. Certbot installe un minuteur systemd qui renouvelle le certificat automatiquement.\"<br \/>\n        }<br \/>\n      ]<br \/>\n    }<br \/>\n  ]<br \/>\n}<br \/>\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ex\u00e9cutez Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas d&#8217;expiration de fonctions, pas de facturation par si\u00e8ge. LTS actuel, PM2 contre systemd, NGINX avec Let\u2019s Encrypt.<\/p>\n","protected":false},"author":2,"featured_media":83811,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_opengraph-title":"Comment Ex\u00e9cuter Node.js sur un VPS - DreamHost","_yoast_wpseo_opengraph-description":"Ex\u00e9cute Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas de d\u00e9lais d'expiration de fonction, pas de factures par utilisateur. LTS actuel, PM2 vs. systemd, NGINX avec Let's Encrypt.","_yoast_wpseo_twitter-title":"Comment Ex\u00e9cuter Node.js sur un VPS - DreamHost","_yoast_wpseo_twitter-description":"Ex\u00e9cute Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas de d\u00e9lais d'expiration de fonction, pas de factures par utilisateur. LTS actuel, PM2 vs. systemd, NGINX avec Let's Encrypt.","toc_headlines":"[[\"h-when-does-running-node-js-on-a-vps-make-sense\",\"Quand Est-Il Judicieux de Faire Tourner Node.js Sur Un VPS ?\"],[\"h-what-vps-specs-does-node-js-actually-need\",\"De Quelles Sp\u00e9cifications VPS Node.js A-T-Il R\u00e9ellement Besoin ?\"],[\"h-which-node-js-version-should-you-install\",\"Quelle Version De Node.js Devrais-Tu Installer ?\"],[\"h-how-do-you-install-node-js-on-a-vps\",\"Comment Installer Node.js Sur Un VPS ?\"],[\"h-should-you-use-pm2-or-systemd-to-keep-your-app-running\",\"Devrais-Tu Utiliser PM2 ou systemd Pour Maintenir Ton Application En Fonctionnement ?\"],[\"h-how-do-you-put-nginx-or-caddy-in-front-of-your-node-app\",\"Comment Mettre NGINX (ou Caddy) Devant Ton Application Node ?\"],[\"h-how-do-you-set-up-https-for-your-node-js-app\",\"Comment Configurer HTTPS Pour Ton Application Node.js ?\"],[\"h-what-does-a-production-ready-node-js-setup-actually-look-like\",\"\u00c0 Quoi Ressemble Vraiment Une Configuration Node.js Pr\u00eate Pour La Production ?\"],[\"h-when-is-a-vps-the-wrong-choice-for-node-js\",\"Quand Est-Ce Que Un VPS Est Un Mauvais Choix Pour Node.js ?\"],[\"h-picking-your-node-stack-and-moving-in\",\"Choisir Ton Stack Node Et Emm\u00e9nager\"],[\"h-frequently-asked-questions-about-running-node-js-on-a-vps\",\"Questions Fr\u00e9quemment Pos\u00e9es Sur L'ex\u00e9cution De Node.js Sur Un VPS\"]]","hide_toc":false,"show_updated_at":"0","footnotes":""},"categories":[15001,14995,14999],"tags":[],"class_list":["post-85022","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-hosting-fr","category-tutorials-fr","category-vps-hosting-fr"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.3 (Yoast SEO v27.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Comment Ex\u00e9cuter Node.js sur un VPS - DreamHost<\/title>\n<meta name=\"description\" content=\"Ex\u00e9cute Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas de d\u00e9lais d&#039;expiration de fonction, pas de factures par utilisateur. LTS actuel, PM2 vs. systemd, NGINX avec Let&#039;s Encrypt.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comment Ex\u00e9cuter Node.js sur un VPS - DreamHost\" \/>\n<meta property=\"og:description\" content=\"Ex\u00e9cute Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas de d\u00e9lais d&#039;expiration de fonction, pas de factures par utilisateur. LTS actuel, PM2 vs. systemd, NGINX avec Let&#039;s Encrypt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/\" \/>\n<meta property=\"og:site_name\" content=\"DreamHost Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DreamHost\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-29T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-07T15:17:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1920\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Dallas Kashuba\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Comment Ex\u00e9cuter Node.js sur un VPS - DreamHost\" \/>\n<meta name=\"twitter:description\" content=\"Ex\u00e9cute Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas de d\u00e9lais d&#039;expiration de fonction, pas de factures par utilisateur. LTS actuel, PM2 vs. systemd, NGINX avec Let&#039;s Encrypt.\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/dallas\" \/>\n<meta name=\"twitter:site\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dallas Kashuba\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Comment Ex\u00e9cuter Node.js sur un VPS - DreamHost","description":"Ex\u00e9cute Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas de d\u00e9lais d'expiration de fonction, pas de factures par utilisateur. LTS actuel, PM2 vs. systemd, NGINX avec Let's Encrypt.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/","og_locale":"en_US","og_type":"article","og_title":"Comment Ex\u00e9cuter Node.js sur un VPS - DreamHost","og_description":"Ex\u00e9cute Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas de d\u00e9lais d'expiration de fonction, pas de factures par utilisateur. LTS actuel, PM2 vs. systemd, NGINX avec Let's Encrypt.","og_url":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/","og_site_name":"DreamHost Blog","article_publisher":"https:\/\/www.facebook.com\/DreamHost\/","article_published_time":"2026-06-29T15:00:00+00:00","article_modified_time":"2026-07-07T15:17:19+00:00","og_image":[{"width":2560,"height":1920,"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","type":"image\/webp"}],"author":"Dallas Kashuba","twitter_card":"summary_large_image","twitter_title":"Comment Ex\u00e9cuter Node.js sur un VPS - DreamHost","twitter_description":"Ex\u00e9cute Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas de d\u00e9lais d'expiration de fonction, pas de factures par utilisateur. LTS actuel, PM2 vs. systemd, NGINX avec Let's Encrypt.","twitter_creator":"@http:\/\/twitter.com\/dallas","twitter_site":"@dreamhost","twitter_misc":{"Written by":"Dallas Kashuba","Est. reading time":"20 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/#article","isPartOf":{"@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/"},"author":{"name":"Dallas Kashuba","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/person\/f6a12ad459538e8e418cf31b8b603814"},"headline":"Comment Faire Tourner Node.js sur un VPS","datePublished":"2026-06-29T15:00:00+00:00","dateModified":"2026-07-07T15:17:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/"},"wordCount":4794,"publisher":{"@id":"https:\/\/www.dreamhost.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","articleSection":["H\u00e9bergement Web","Tutoriels","VPS Hosting"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/","url":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/","name":"Comment Ex\u00e9cuter Node.js sur un VPS - DreamHost","isPartOf":{"@id":"https:\/\/www.dreamhost.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/#primaryimage"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","datePublished":"2026-06-29T15:00:00+00:00","dateModified":"2026-07-07T15:17:19+00:00","description":"Ex\u00e9cute Node.js sur un VPS avec un contr\u00f4le total : pas de d\u00e9marrages \u00e0 froid, pas de d\u00e9lais d'expiration de fonction, pas de factures par utilisateur. LTS actuel, PM2 vs. systemd, NGINX avec Let's Encrypt.","breadcrumb":{"@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/#primaryimage","url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","contentUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","width":2560,"height":1920,"caption":"How To Run Node.js on a VPS"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dreamhost.com\/blog\/fr\/comment-faire-tourner-nodejs-sur-un-vps-fr\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dreamhost.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Comment Faire Tourner Node.js sur un VPS"}]},{"@type":"WebSite","@id":"https:\/\/www.dreamhost.com\/blog\/#website","url":"https:\/\/www.dreamhost.com\/blog\/","name":"DreamHost Blog","description":"","publisher":{"@id":"https:\/\/www.dreamhost.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dreamhost.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dreamhost.com\/blog\/#organization","name":"DreamHost","url":"https:\/\/www.dreamhost.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","contentUrl":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","width":1200,"height":168,"caption":"DreamHost"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DreamHost\/","https:\/\/x.com\/dreamhost","https:\/\/www.instagram.com\/dreamhost\/","https:\/\/www.linkedin.com\/company\/dreamhost\/","https:\/\/www.youtube.com\/user\/dreamhostusa"]},{"@type":"Person","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/person\/f6a12ad459538e8e418cf31b8b603814","name":"Dallas Kashuba","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/05ab6fb1606be97d16c74efb0fba01b3c11e91501dc5f9661bdfbb5c5b0cd113?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/05ab6fb1606be97d16c74efb0fba01b3c11e91501dc5f9661bdfbb5c5b0cd113?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/05ab6fb1606be97d16c74efb0fba01b3c11e91501dc5f9661bdfbb5c5b0cd113?s=96&d=mm&r=g","caption":"Dallas Kashuba"},"description":"Dallas Kashuba co-founded DreamHost while attending Harvey Mudd College and has spent nearly three decades building infrastructure at scale. Today he serves as an advisor, board member, and investor for various tech startups, with a consistent focus on user privacy, open source, and data portability. When he's not thinking about the Open Web, he's probably making music. Follow Dallas on X.","sameAs":["http:\/\/www.idallas.com\/","https:\/\/x.com\/http:\/\/twitter.com\/dallas"],"url":"https:\/\/www.dreamhost.com\/blog\/author\/dallas\/"}]}},"lang":"fr","translations":{"fr":85022,"it":85083,"en":83809,"pt":84966,"es":84969,"uk":84978,"pl":84985,"ru":84999,"nl":85024,"de":85053},"pll_sync_post":{},"_links":{"self":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/85022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"version-history":[{"count":3,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/85022\/revisions"}],"predecessor-version":[{"id":85330,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/85022\/revisions\/85330"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/media\/83811"}],"wp:attachment":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/media?parent=85022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/categories?post=85022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/tags?post=85022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}