{"id":11027,"date":"2026-06-30T13:30:40","date_gmt":"2026-06-30T13:30:40","guid":{"rendered":"https:\/\/ideastomakemoneytoday.online\/?p=11027"},"modified":"2026-06-30T13:30:42","modified_gmt":"2026-06-30T13:30:42","slug":"how-to-run-node-js-on-a-vps","status":"publish","type":"post","link":"https:\/\/ideastomakemoneytoday.online\/?p=11027","title":{"rendered":"How To Run Node.js on a VPS"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<div class=\"tldr-block\" style=\"display: none;\">\n<div class=\"tldr-wrap\">\n<p class=\"wp-block-paragraph\">Working Node.js on a VPS means putting in the present Node.js LTS (24.x \u201cKrypton\u201d as of Might 2026) on a Linux server you management, then working your app behind a course of supervisor and a reverse proxy with HTTPS. You get a single always-on field that handles long-lived connections, background jobs, and heavy compute with out per-function billing or chilly begins.\u00a0<\/p>\n<p class=\"wp-block-paragraph\"><strong>Goal setup:<\/strong> Ubuntu 24.04 LTS + Node 24 by way of NodeSource or nvm + PM2 (or systemd) + NGINX + Let\u2019s Encrypt.<\/p>\n<\/p><\/div><\/div>\n<p class=\"wp-block-paragraph\">Heroku killed its free tier and bumped the ground. Vercel fees per seat and occasions out long-running jobs. Render and Railway scale worth with visitors.<\/p>\n<p class=\"wp-block-paragraph\">Open the latest invoice out of your internet hosting supplier. The Node app, a Postgres database, and a Redis cache. Three line objects, three units of overage warnings, one frantic Slack thread the day advertising lastly launches a marketing campaign.<\/p>\n<p class=\"wp-block-paragraph\">That invoice is why a variety of groups are taking one other have a look at the VPS. <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/what-is-node-js\/\">Node.js<\/a> itself doesn\u2019t <em>care<\/em> the place it runs. The one factor serverless was defending you from was discovering out what occurs after \u2018npm begin.\u2019<\/p>\n<p class=\"wp-block-paragraph\">Let\u2019s have a look at a production-setup sample for Node.js on a Linux field you management. In the event you can SSH right into a field and browse a config file, by the tip, you\u2019ll have a manufacturing stack you possibly can run for years on a few hours of upkeep a month.<\/p>\n<h2 id=\"h-when-does-running-node-js-on-a-vps-make-sense\" class=\"wp-block-heading\">When Does Working Node.js on a VPS Make Sense?<\/h2>\n<p class=\"wp-block-paragraph\">A VPS is the suitable dwelling for Node.js when you&#8217;ve gotten a long-lived course of, a stack you need to consolidate into one invoice, or a managed-runtime bill that\u2019s outgrown the comfort.<\/p>\n<p class=\"wp-block-paragraph\"><strong>Broadly talking, there are three good matches:<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Lengthy-lived processes:<\/strong> WebSocket servers, queue employees, cron schedulers, MCP servers. Something that has to <em>keep<\/em> working and listening. Most serverless platforms nonetheless optimize round short-lived execution and request lifecycles. A Node course of on a VPS simply sits there.<\/li>\n<li><strong>Value consolidation:<\/strong> Node app, Postgres, Redis, plus a small construct employee all stay on the identical 4 GB field. One invoice line, not 4.<\/li>\n<li><strong>Apps that outgrew PaaS:<\/strong> Perform timeouts in your lengthy PDF technology job. Per-seat pricing on a staff that lastly employed a fourth engineer. A <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/www.heroku.com\/pricing\/\">Heroku<\/a> bill climbing previous $60 a month for a workload that runs fantastic on a $15 VPS.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong>And there are three <\/strong><strong><em>fallacious<\/em><\/strong><strong> matches:<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Static websites and SSG content material:<\/strong> A Subsequent.js export, an Astro construct, a Gatsby weblog. Vercel\u2019s free tier is the suitable instrument. A VPS is overkill.<\/li>\n<li><strong>Sparse, event-driven workloads: <\/strong>AWS Lambda or Cloudflare Employees value pennies for a webhook that runs ten occasions a day. A VPS prices the identical whether or not the app is busy or asleep.<\/li>\n<li><strong>Horizontally-scaled real-time apps: <\/strong>In case your WebSocket server must fan out to 100,000 concurrent connections, one VPS shouldn&#8217;t be the reply. That\u2019s a Kubernetes cluster, a distributed edge infrastructure, or a managed real-time platform.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">JavaScript is the most-used language within the <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/survey.stackoverflow.co\/2025\/technology\">2025 Stack Overflow Developer Survey<\/a>, and Node.js stays one of many default methods builders run JavaScript on the backend. That\u2019s lots of people working Node someplace. This text is for the slice of them who\u2019d be happier working it on a server they management.<\/p>\n<p class=\"wp-block-paragraph\">I\u2019ve watched groups transfer 4 manufacturing Node companies off Heroku onto a single 4 GB VPS, with the identical uptime, a 3rd of the invoice, and long-lived WebSockets that lastly labored with no workaround.<\/p>\n<p class=\"wp-block-paragraph\">The migration is usually a day of \u2018apt set up,\u2019 a \u2018pm2 begin,\u2019 and a DNS change.<\/p>\n<h2 id=\"h-what-vps-specs-does-node-js-actually-need\" class=\"wp-block-heading\">What VPS Specs Does Node.js Truly Want?<\/h2>\n<p class=\"wp-block-paragraph\">Node.js itself is light-weight. A minimal Categorical server can idle nicely below 100 MB of resident reminiscence. The \u201cNode solely wants 1 GB\u201d recommendation you\u2019ll nonetheless discover on older blogs is technically true and virtually ineffective. By the point you\u2019ve added Postgres, Redis, logs, and a deployment course of that isn\u2019t held along with hope, you\u2019re already pushing previous that on a quiet day.<\/p>\n<p class=\"wp-block-paragraph\">Reasonable sizing for widespread workloads:<\/p>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th><strong>Workload<\/strong><\/th>\n<th><strong>RAM<\/strong><\/th>\n<th><strong>vCPU<\/strong><\/th>\n<th><strong>Storage<\/strong><\/th>\n<th><strong>Notes<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Small Categorical API, no DB on the field<\/td>\n<td>2 GB<\/td>\n<td>1-2<\/td>\n<td>40 GB NVMe<\/td>\n<td>Reasonable flooring for one manufacturing app<\/td>\n<\/tr>\n<tr>\n<td>Node API + Postgres + Redis on one field<\/td>\n<td>4 GB<\/td>\n<td>2<\/td>\n<td>80 GB NVMe<\/td>\n<td>The candy spot; most groups land right here<\/td>\n<\/tr>\n<tr>\n<td>SSR-heavy app (Subsequent.js, Nuxt, Remix)<\/td>\n<td>8 GB<\/td>\n<td>4<\/td>\n<td>80 GB NVMe<\/td>\n<td>SSR rendering and construct pipelines are the place the reminiscence goes<\/td>\n<\/tr>\n<tr>\n<td>Actual-time\/WebSocket app, reasonable scale<\/td>\n<td>8 GB<\/td>\n<td>4<\/td>\n<td>80 GB NVMe<\/td>\n<td>Each persistent connection consumes reminiscence<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"wp-block-paragraph\">A number of specifics to pin down earlier than you provision:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>NVMe storage issues greater than uncooked disk dimension: <\/strong>Fashionable Node apps contact 1000&#8217;s of small information throughout installs, builds, and startup. Gradual disks make dependency installs, chilly boots, and SSR rebuilds noticeably worse.<\/li>\n<li><strong>KVM virtualization, not OpenVZ:<\/strong> Older OpenVZ-based plans share a kernel with the host, which might imply outdated kernel variations and occasional compatibility complications with newer runtimes. Most respected VPS suppliers are KVM-only now, nevertheless it\u2019s nonetheless value checking.<\/li>\n<li><strong>Swap area:<\/strong> Allow 1-2 GB of swap on smaller containers. Node\u2019s V8 heap can swing arduous throughout rubbish assortment. With out swap, a transient spike kills the method. I\u2019ve watched a 4 GB field OOM throughout a routine deploy as a result of somebody had disabled swap considering it was a Docker-era anachronism.<\/li>\n<li><strong>Bandwidth:<\/strong> Most fashionable VPS plans embrace 1-4 TB of month-to-month bandwidth, sufficient for nearly every thing in need of video internet hosting. <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/self-managed-vps\/\">Self-Managed VPS plans<\/a> embrace unmetered bandwidth, one fewer line on the capacity-planning spreadsheet.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">A 4 GB VPS runs round $15 a month at market price. That\u2019s 50 cents a day, or roughly one airport espresso each two weeks. In comparison with paying individually for app runtimes, managed Postgres, and Redis on a PaaS, the economics flip surprisingly quick.<\/p>\n<h2 id=\"h-which-node-js-version-should-you-install\" class=\"wp-block-heading\">Which Node.js Model Ought to You Set up?<\/h2>\n<p class=\"wp-block-paragraph\">Set up <strong>Node.js 24 (codename Krypton)<\/strong>. It\u2019s the present Lively LTS launch, promoted in October 2025 and supported by way of April 2028 based on the official <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/nodejs.org\/en\/about\/previous-releases\">Node.js launch schedule<\/a>.<\/p>\n<p class=\"wp-block-paragraph\">A variety of tutorials nonetheless level folks at Node 22. These guides haven\u2019t been up to date. In the event you\u2019re beginning a brand new deployment at present, pin your CI picture and your VPS to Node 24.x.<\/p>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th><strong>Model<\/strong><\/th>\n<th><strong>Codename<\/strong><\/th>\n<th><strong>Standing<\/strong><\/th>\n<th><strong>EOL<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Node.js 26.x<\/td>\n<td>(none)<\/td>\n<td>Present<\/td>\n<td>Promotes to LTS in late 2026<\/td>\n<\/tr>\n<tr>\n<td>Node.js 24.x<\/td>\n<td>Krypton<\/td>\n<td>Lively LTS<\/td>\n<td>April 2028<\/td>\n<\/tr>\n<tr>\n<td>Node.js 22.x<\/td>\n<td>Jod<\/td>\n<td>Upkeep LTS<\/td>\n<td>April 2027<\/td>\n<\/tr>\n<tr>\n<td>Node.js 20.x<\/td>\n<td>Iron<\/td>\n<td>Finish-of-life |<\/td>\n<td>Reached EOL April 30, 2026. Don&#8217;t use.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"wp-block-paragraph\">A number of guidelines of thumb:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Don\u2019t run Present (non-LTS) releases in manufacturing: <\/strong>Node 26 exists for testing future compatibility and new runtime options, not for the app your income will depend on.<\/li>\n<li><strong>Node 22 is the fallback possibility if a important dependency nonetheless hasn\u2019t caught up with Node 24 compatibility: <\/strong>Many of the ecosystem stabilized inside a number of months of the LTS promotion.<\/li>\n<li><strong>Pin your Node model in all places: <\/strong>Your CI picture, Dockerfile, .nvmrc, and manufacturing VPS ought to all agree. \u201cWorks on my machine\u201d will get costly quick as soon as native modules enter the chat.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">&#x1f914;<a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/bun-vs-node\/\"><strong>Contemplating Bun<\/strong><\/a><strong>?<\/strong> It\u2019s quicker on some workloads and genuinely spectacular, however the ecosystem remains to be smaller, and the manufacturing observe file is shorter than Node\u2019s. For many groups, boring wins.<\/p>\n<p class=\"wp-block-paragraph\">NodeSource, which maintains the apt and yum repositories many manufacturing groups set up Node from, highlights enhancements within the 24.x line, beginning with a more recent V8 engine. Node 24 additionally ships now-mature tooling like built-in node \u2013watch and a secure native check runner (node: check), each of which stabilized within the 20\u201322 strains and carry ahead right here. None of it&#8217;s flashy. It simply removes somewhat operational friction each month.<\/p>\n<h2 id=\"h-how-do-you-install-node-js-on-a-vps\" class=\"wp-block-heading\">How Do You Set up Node.js on a VPS?<\/h2>\n<p class=\"wp-block-paragraph\">You&#8217;ve gotten two life like set up paths. Decide primarily based on whether or not the server runs one Node app or a number of.<\/p>\n<h3 id=\"h-nodesource-for-a-single-app-server\" class=\"wp-block-heading\">NodeSource for a Single-App Server<\/h3>\n<p class=\"wp-block-paragraph\">That is the only manufacturing path. One setup script and one <strong><code>apt set up<\/code><\/strong> get you the present Node 24 LTS line as a system bundle, and future safety updates move by way of regular bundle upgrades.<\/p>\n<p class=\"wp-block-paragraph\">On Ubuntu or Debian:<\/p>\n<pre class=\"wp-block-code\"><code>curl -fsSL https:\/\/deb.nodesource.com\/setup_24.x | bash -\napt set up -y nodejs<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Confirm the set up:<\/p>\n<pre class=\"wp-block-code\"><code>node -v\nnpm -v<\/code><\/pre>\n<figure class=\"wp-block-image size-full\"><\/figure>\n<p class=\"wp-block-paragraph\">It is best to see a Node 24.x launch.<\/p>\n<p class=\"wp-block-paragraph\">RHEL-family distro directions (yum\/dnf) stay within the official NodeSource distributions repository.<\/p>\n<h3 id=\"h-nvm-for-per-project-version-switching\" class=\"wp-block-heading\">nvm for Per-Venture Model Switching<\/h3>\n<p class=\"wp-block-paragraph\"><a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/github.com\/nvm-sh\/nvm\">nvm<\/a> (Node Model Supervisor) installs Node into your house listing and lets totally different initiatives run totally different Node variations. Helpful when you host a number of apps on the identical server or don\u2019t have sudo entry.<\/p>\n<p class=\"wp-block-paragraph\">Run this as your app person, not root:<\/p>\n<pre class=\"wp-block-code\"><code>curl -o- https:\/\/uncooked.githubusercontent.com\/nvm-sh\/nvm\/v0.40.5\/set up.sh | bash<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Reload your shell, then set up Node 24:<\/p>\n<pre class=\"wp-block-code\"><code>nvm set up 24\nnvm use 24\nnvm alias default 24<\/code><\/pre>\n<p class=\"wp-block-paragraph\"><strong>&#x1f449;One vital rule: <\/strong>Don\u2019t use <code>sudo \u2018npm set up -g\u2019<\/code> for utility dependencies.<\/p>\n<p class=\"wp-block-paragraph\">World installs are normally reserved for machine-level CLI instruments like pm2, typescript, or nodemon. Your app dependencies belong in bundle.json and ought to be put in from the mission listing with npm ci.<\/p>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th><strong>NodeSource<\/strong><\/th>\n<th><strong>nvm<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>One Node model per server<\/td>\n<td>A number of Node variations per server<\/td>\n<\/tr>\n<tr>\n<td>Put in system-wide, runs as any person<\/td>\n<td>Put in per person<\/td>\n<\/tr>\n<tr>\n<td>Auto-updates with <code>\u2018apt\u2019<\/code><\/td>\n<td>Managed manually<\/td>\n<\/tr>\n<tr>\n<td>Requires <code>sudo<\/code><\/td>\n<td>No <code>sudo<\/code> required<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"wp-block-paragraph\">In the event you\u2019re not sure, begin with NodeSource. Most single-purpose manufacturing servers don\u2019t want per-project Node model switching.<\/p>\n<p class=\"wp-block-paragraph\">&#x1f449;<strong>DreamHost Self-Managed VPS customers: <\/strong>The Node app obtainable at provisioning ships with Node 22 LTS \u2014 nonetheless supported by way of April 2027. To run Node 24, use the NodeSource or nvm steps above after provisioning.<\/p>\n<h2 id=\"h-should-you-use-pm2-or-systemd-to-keep-your-app-running\" class=\"wp-block-heading\">Ought to You Use PM2 or systemd to Hold Your App Working?<\/h2>\n<p class=\"wp-block-paragraph\">Both one works. The sincere reply is whichever your staff is snug with. PM2 is the developer-friendly path. systemd is the Unix-native path. Each resolve the identical three issues: restart on crash, begin at boot, and swish shutdown on \u2018SIGTERM.\u2019<\/p>\n<p class=\"wp-block-paragraph\">In the event you\u2019re beginning contemporary, right here\u2019s tips on how to decide:<\/p>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th\/>\n<th><strong>PM2<\/strong><\/th>\n<th><strong>systemd<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Setup time<\/td>\n<td>3 minutes<\/td>\n<td>10 minutes<\/td>\n<\/tr>\n<tr>\n<td>Cluster mode (multi-core)<\/td>\n<td>In-built<\/td>\n<td>Not inbuilt (begin N items)<\/td>\n<\/tr>\n<tr>\n<td>Log rotation<\/td>\n<td>Module: <code>\u2018pm2-logrotate\u2019<\/code><\/td>\n<td>In-built by way of <code>\u2018journalctl\u2019<\/code><\/td>\n<\/tr>\n<tr>\n<td>Zero-downtime reload<\/td>\n<td><code>\u2018pm2 reload\u2019<\/code><\/td>\n<td>Normally dealt with manually with rolling restarts or a number of items<\/td>\n<\/tr>\n<tr>\n<td>Reminiscence overhead (daemon)<\/td>\n<td>Small daemon overhead<\/td>\n<td>None (no further daemon)<\/td>\n<\/tr>\n<tr>\n<td>Greatest for<\/td>\n<td>Single-box, JS-shop, quick iteration<\/td>\n<td>Multi-app containers, ops-team consolation<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"wp-block-paragraph\">The <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/pm2.keymetrics.io\/docs\/usage\/quick-start\/\">PM2 fast begin<\/a> is precisely that, fast:<\/p>\n<pre class=\"wp-block-code\"><code>npm set up -g pm2\npm2 begin app.js --name api\npm2 startup    # prints the systemd startup command to run\npm2 save       # saves the present course of record<\/code><\/pre>\n<p class=\"wp-block-paragraph\">PM2 then turns into the one factor you discuss to: \u2018<code>pm2 logs<\/code>,\u2019 \u2018<code>pm2 reload api<\/code>,\u2019 \u2018<code>pm2 monit<\/code>.\u2019<\/p>\n<p class=\"wp-block-paragraph\"><strong>&#x1f449;Additionally value realizing:<\/strong> \u2018<code>pm2 startup<\/code>\u2019 writes a systemd unit, so the PM2 setup <em>really<\/em> makes use of systemd below the hood.<\/p>\n<p class=\"wp-block-paragraph\">A minimal systemd unit for direct Node administration at \u2018\/and many others\/systemd\/system\/api.service\u2019:<\/p>\n<p class=\"wp-block-paragraph\"><code>[Unit]<br \/>Description=My Node API<br \/>After=community.goal<\/code><\/p>\n<p class=\"wp-block-paragraph\"><code>[Service]<br \/>Sort=easy<br \/>Consumer=app<br \/>WorkingDirectory=\/var\/www\/api<br \/>ExecStart=\/usr\/bin\/node server.js<br \/>Restart=on-failure<br \/>RestartSec=5<br \/>Surroundings=NODE_ENV=manufacturing<br \/>StandardOutput=journal<br \/>StandardError=journal<\/code><\/p>\n<p class=\"wp-block-paragraph\"><code>[Install]<br \/>WantedBy=multi-user.goal<\/code><br \/>Then \u2018<code>systemctl allow --now api<\/code>.\u2019 Logs stay in \u2018<code>journalctl -u api -f<\/code>.\u2019<\/p>\n<p class=\"wp-block-paragraph\">In the event you\u2019re already working PM2 and it\u2019s working, don\u2019t migrate to systemd simply because somebody on Hacker Information mentioned so. The PM2 daemon\u2019s reminiscence isn\u2019t why you\u2019d migrate away from it.<\/p>\n<p class=\"wp-block-paragraph\">Migrate when you&#8217;ve gotten an actual motive, like working half a dozen Node processes the place each megabyte counts, or delivery into an ops atmosphere the place each different service is a systemd unit, and PM2 stands out because the odd one.<\/p>\n<h2 id=\"h-how-do-you-put-nginx-or-caddy-in-front-of-your-node-app\" class=\"wp-block-heading\">How Do You Put NGINX (or Caddy) in Entrance of Your Node App?<\/h2>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1099\" src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node.webp\" alt=\"NGINX acts as reverse proxy between client requests and Node.js app backend.\" class=\"wp-image-83812 lazyload\" 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\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/1099;\"\/><\/figure>\n<p class=\"wp-block-paragraph\">You need a reverse proxy in entrance of Node for 5 causes: HTTPS termination, gzip\/brotli compression, static asset serving, working a number of apps on the identical field, and simpler price limiting. Node <em>can<\/em> do all of those. NGINX and Caddy do them higher, and so they don\u2019t take your occasion loop down when one thing misbehaves.<\/p>\n<p class=\"wp-block-paragraph\">Decide NGINX if anybody in your staff already is aware of it. Decide Caddy if you need <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/ultimate-guide-ssl-tls\/\">HTTPS<\/a> in three strains of config and also you\u2019re fantastic with a smaller advanced-configuration ecosystem.<\/p>\n<h3 id=\"h-minimal-nginx-config\" class=\"wp-block-heading\">Minimal NGINX Config<\/h3>\n<p class=\"wp-block-paragraph\">Put this proxy block in <strong>\/and many others\/nginx\/sites-available\/api<\/strong>, symlink to <strong><code>sites-enabled<\/code><\/strong>, then <strong><code>nginx -t &amp;&amp; systemctl reload nginx<\/code><\/strong>.<\/p>\n<pre class=\"wp-block-code\"><code>server {\n    pay attention 80;\n    server_name api.instance.com;\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Improve $http_upgrade;\n        proxy_set_header Connection 'improve';\n        proxy_set_header Host $host;\n        proxy_set_header X-Actual-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<p class=\"wp-block-paragraph\">The \u2018Improve\u2019 and \u2018Connection\u2019 headers are the WebSocket-support strains. <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/nginx.org\/en\/docs\/http\/websocket.html\">NGINX\u2019s personal docs name out<\/a> that Improve is a hop-by-hop header, so it wants specific dealing with when proxying WebSocket visitors.<\/p>\n<p class=\"wp-block-paragraph\">Go away them in in case your app makes use of WebSockets now, or would possibly later. Socket.IO, GraphQL subscriptions over WebSockets, and a shocking variety of \u201ccommon\u201d real-time options rely upon that improve handshake.<\/p>\n<p class=\"wp-block-paragraph\">The only most typical manufacturing bug I see in Node setups is a Socket.IO server behind <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/216431827-Nginx-overview\">NGINX<\/a> with out these two strains. Connections fail intermittently, devs blame Socket.IO, and the precise drawback is normally proxy config.<\/p>\n<h3 id=\"h-minimal-caddyfile\" class=\"wp-block-heading\">Minimal Caddyfile<\/h3>\n<p class=\"wp-block-paragraph\">The <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/caddyserver.com\/docs\/quick-starts\/reverse-proxy\">Caddy reverse proxy quickstart<\/a> model of the identical factor:<\/p>\n<pre class=\"wp-block-code\"><code>api.instance.com {\n    reverse_proxy 127.0.0.1:3000\n}<\/code><\/pre>\n<p class=\"wp-block-paragraph\">That\u2019s the whole file. So long as the area factors to the server and ports 80\/443 are reachable, Caddy provisions and renews HTTPS robotically. Caddy\u2019s docs say <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/caddyserver.com\/docs\/automatic-https\">automated HTTPS provisions<\/a> TLS certificates for websites and retains them renewed; its reverse proxy quickstart additionally notes HTTPS is automated when Caddy is aware of the hostname.<\/p>\n<h3 id=\"h-bind-node-to-localhost-not-0-0-0-0\" class=\"wp-block-heading\">Bind Node to localhost, Not 0.0.0.0<\/h3>\n<p class=\"wp-block-paragraph\">No matter proxy you decide, configure your Node app to pay attention on 127.0.0.1:3000, not 0.0.0.0:3000. The one factor that ought to face the general public web on a Node field is the proxy. Pair this with UFW, Ubuntu\u2019s widespread firewall frontend, to disclaim every thing besides ports 22, 80, and 443.<\/p>\n<pre class=\"wp-block-code\"><code>ufw default deny incoming\nufw enable 22\/tcp\nufw enable 80\/tcp\nufw enable 443\/tcp\nufw allow<\/code><\/pre>\n<p class=\"wp-block-paragraph\">If SSH runs on a customized port, enable that port earlier than enabling UFW.<\/p>\n<p class=\"wp-block-paragraph\">Bind to localhost from day one. The assembly the place somebody admits \u201cthe app was uncovered as a result of Node certain to 0.0.0.0\u201d shouldn&#8217;t be a gathering you need to have.<\/p>\n<h2 id=\"h-how-do-you-set-up-https-for-your-node-js-app\" class=\"wp-block-heading\">How Do You Set Up HTTPS for Your Node.js App?<\/h2>\n<p class=\"wp-block-paragraph\">Use <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/216539558-Let-s-Encrypt-SSL-certificate-overview\">Let\u2019s Encrypt<\/a>. It\u2019s free, automated, and trusted by each browser. There are two paths, relying on which proxy you picked.<\/p>\n<h3 id=\"h-nginx-certbot\" class=\"wp-block-heading\">NGINX + Certbot<\/h3>\n<p class=\"wp-block-paragraph\">Level an A file at your VPS IP and watch for DNS to propagate.<\/p>\n<p class=\"wp-block-paragraph\">Set up Certbot:<\/p>\n<pre class=\"wp-block-code\"><code>apt set up certbot python3-certbot-nginx<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Run:<\/p>\n<pre class=\"wp-block-code\"><code>certbot --nginx -d api.instance.com<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Certbot updates your NGINX config and reloads the server robotically.<\/p>\n<p class=\"wp-block-paragraph\">On fashionable Ubuntu releases, a systemd timer put in by the Certbot bundle handles renewal robotically.<\/p>\n<p class=\"wp-block-paragraph\">Open <strong>https:\/\/api.instance.com<\/strong> and ensure the lock icon.<\/p>\n<p class=\"wp-block-paragraph\">The <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/certbot.eff.org\/instructions?ws=nginx&amp;os=snap\">official Certbot docs<\/a> additionally cowl the snap-based set up path in case your distro bundle is outdated.<\/p>\n<h3 id=\"h-caddy\" class=\"wp-block-heading\">Caddy<\/h3>\n<p class=\"wp-block-paragraph\">Add the area to the Caddyfile (the instance above already has it), then restart Caddy. So long as the area resolves accurately and ports 80\/443 are reachable, the certificates provisions robotically on first begin. There\u2019s no Certbot.<\/p>\n<p class=\"wp-block-paragraph\"><strong>Don\u2019t terminate TLS in Node itself for manufacturing.<\/strong><\/p>\n<p class=\"wp-block-paragraph\">Node\u2019s https module works completely nicely, however reverse proxies like NGINX and Caddy are purpose-built for TLS termination. They offer you OCSP stapling, fashionable cipher defaults, automated certificates renewal, HTTP\/2 help, and \u2014 in Caddy\u2019s case \u2014 HTTP\/3 help out of the field.<\/p>\n<p class=\"wp-block-paragraph\">May you deal with all of that immediately in Node? Positive. You\u2019d simply be rebuilding infrastructure that your proxy already solves extraordinarily nicely.<\/p>\n<h2 id=\"h-what-does-a-production-ready-node-js-setup-actually-look-like\" class=\"wp-block-heading\">What Does a Manufacturing-Prepared Node.js Setup Truly Look Like?<\/h2>\n<p class=\"wp-block-paragraph\">Eight issues chew folks in manufacturing. Most of them aren\u2019t in set up tutorials as a result of they don\u2019t match the \u201cset up Node, run app\u201d arc. They\u2019re the distinction between an app that survives month two and one which doesn\u2019t.<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>NODE_ENV=manufacturing:<\/strong> The only most-missed step. In lots of Node frameworks and libraries, it disables dev-only habits and allows manufacturing optimizations. Categorical, for instance, caches compiled view templates and returns terser errors in manufacturing \u2014 its personal docs cite as much as a 3x efficiency enchancment. Set the \u2018env var\u2019 in all places.<\/li>\n<li><strong>Sleek shutdown:<\/strong> When your VPS reboots or PM2 sends \u2018SIGTERM,\u2019 your app has a number of seconds to empty in-flight requests, shut database connections, and exit cleanly. Wire up a \u2018course of.on(\u2018SIGTERM\u2019, \u2026)\u2019 handler. PM2\u2019s default shutdown timing will depend on configuration and atmosphere, so don\u2019t assume you\u2019ll at all times have a lot time to wash up.\u00a0<\/li>\n<li><strong>Log rotation:<\/strong> PM2\u2019s \u2018pm2-logrotate\u2019 module handles this for PM2. The systemd journal handles it for direct systemd items. With out rotation, your logs eat the disk in 1 \/ 4 of the time you\u2019d count on.<\/li>\n<li><strong>.env self-discipline:<\/strong> By no means commit secrets and techniques, by no means log them. Use \u2018dotenv\u2019 for native dev. In manufacturing, set env vars by way of your systemd unit\u2019s \u2018Surroundings=\u2019 or your PM2 ecosystem file. The day you \u2018console.log(course of.env)\u2019 by chance is the day you rotate each credential.<\/li>\n<li><strong>A reverse proxy in entrance of Node: <\/strong>Bind Node to localhost; let NGINX or Caddy face the general public web.<\/li>\n<li><strong>A firewall:<\/strong> UFW deny every thing besides 22, 80, 443. Transferring SSH away from port 22 gained\u2019t cease a decided attacker, nevertheless it dramatically cuts down on automated brute-force noise and junk auth logs.<\/li>\n<li><strong>Monitoring:<\/strong> A healthcheck endpoint your monitoring instrument hits each minute. PM2 has built-in fundamentals. For something severe, run Prometheus and Grafana, or use a hosted uptime service like <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/betterstack.com\/\">Higher Stack<\/a> or <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/uptimerobot.com\/\">UptimeRobot<\/a>. You need to know your app is down <em>earlier than<\/em> a buyer tells you.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">Upkeep estimate for the stack above: one to 3 hours a month.<\/p>\n<p class=\"wp-block-paragraph\">Apt updates, occasional dependency bumps, and a quarterly have a look at log quantity. That\u2019s the commerce for the fee and management wins.<\/p>\n<h2 id=\"h-when-is-a-vps-the-wrong-choice-for-node-js\" class=\"wp-block-heading\">When Is a VPS the Flawed Alternative for Node.js?<\/h2>\n<p class=\"wp-block-paragraph\">A VPS is the fallacious name when your workload is constructed for one thing else. Be sincere about which facet you\u2019re on earlier than you provision.<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Static websites and SSG content material:<\/strong> Subsequent.js export, Astro, Gatsby, and an Eleventy weblog. Platforms like Vercel, Netlify, or Cloudflare Pages offer you globally cached static internet hosting, Git-based deploys, and automated rebuilds out of the field. A VPS is normally pointless infrastructure for purely static content material.<\/li>\n<li><strong>Sparse, event-driven workloads: <\/strong>Cloudflare Employees and AWS Lambda are cheap for webhooks working ten occasions per day.\u00a0<\/li>\n<li><strong>Actual-time apps that want 100,000+ concurrent connections:<\/strong> One VPS doesn\u2019t horizontally scale. You\u2019ll want orchestration (Kubernetes, ECS, Nomad) or a managed real-time platform like Ably or Pusher.<\/li>\n<li><strong>Compliance-heavy regulated workloads:<\/strong> HIPAA, PCI-DSS Degree 1, FedRAMP. A managed PaaS with built-in compliance certifications saves audit ache. Self-hosting compliance on a VPS is a multi-quarter mission you in all probability don\u2019t need.<\/li>\n<li><strong>No <\/strong><a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/linux-distros\/\"><strong>Linux<\/strong><\/a><strong> consolation \u2014 and no urge for food to construct it: <\/strong>Platforms like Render, Railway, and DigitalOcean App Platform sit someplace between uncooked VPS internet hosting and absolutely managed PaaS. Instruments like Dokploy add Heroku-style deployment workflows on prime of your personal VPS infrastructure. You continue to get a variety of the fee and management advantages with no need to grow to be deeply aware of iptables, systemd internals, or reverse-proxy debugging at 1 a.m.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">There\u2019s no disgrace in any of these solutions. The very best technical determination is the one which matches your workload.<\/p>\n<h2 id=\"h-picking-your-node-stack-and-moving-in\" class=\"wp-block-heading\">Choosing Your Node Stack and Transferring In<\/h2>\n<p class=\"wp-block-paragraph\">Open that internet hosting bill yet another time.<\/p>\n<p class=\"wp-block-paragraph\">You\u2019re about to exchange a shocking quantity of it with a single VPS invoice.<\/p>\n<p class=\"wp-block-paragraph\"><strong>&#x1f449;The stack:<\/strong> Ubuntu 24.04 LTS, Node 24, PM2 (or systemd), NGINX (or Caddy), Let\u2019s Encrypt by way of Certbot (or Caddy\u2019s built-in).<\/p>\n<p class=\"wp-block-paragraph\">Spin up the smallest VPS plan that hits the RAM you sized for, set up Node, run your app on \u2018127.0.0.1,\u2019 level NGINX at it, and swap your DNS.<\/p>\n<p class=\"wp-block-paragraph\">If the app survives a deploy, a reboot, and an in a single day run with out drama, you\u2019re many of the method there.<\/p>\n<p class=\"wp-block-paragraph\">The remaining is upkeep. An hour or two a month, the occasional \u2018apt improve\u2019 window, a quarterly dependency bump. That\u2019s the deal you made whenever you traded a per-seat bill for a flat one, and DreamHost\u2019s Self-Managed VPS Stack 4 is the place you can begin.<\/p>\n<div class=\"article-cta-shared article-cta-small article-cta--product\">\n<div class=\"tr-img-wrap-outer jsLoading\"><img decoding=\"async\" class=\"js-img-lazy \" 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<p> <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\" class=\"link-top\" target=\"_blank\" rel=\"noopener noreferrer\"> <span>VPS<\/span> <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> <\/a> <\/p>\n<div class=\"content-btm\">\n<h2 class=\"h2--md\"> Personal Your Total Stack. Apps, AI, Databases, and Extra. <\/h2>\n<p class=\"p--md\"> Hold each credential and dialog on a server you management, with NVMe pace and unmetered bandwidth inbuilt. <\/p>\n<p> <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\" class=\"btn btn--white-outline btn--sm btn--round\" target=\"_blank\" rel=\"noopener noreferrer\"> Discover VPS Internet hosting Plans <\/a> <\/div><\/div>\n<h2 id=\"h-frequently-asked-questions-about-running-node-js-on-a-vps\" class=\"wp-block-heading\">Incessantly Requested Questions About Working Node.js on a VPS<\/h2>\n<h3 id=\"h-can-i-run-node-js-on-any-vps\" class=\"wp-block-heading\">Can I run Node.js on any VPS?<\/h3>\n<p class=\"wp-block-paragraph\">Most fashionable VPS plans run Node.js fantastic. Fashionable KVM-based VPS plans with a 64-bit Linux distro are the most secure default for present Node.js releases.<\/p>\n<p class=\"wp-block-paragraph\">Older OpenVZ-based plans typically have kernel restrictions that break newer Node variations. In the event you\u2019re choosing between suppliers, ask whether or not they\u2019re KVM-based.<\/p>\n<h3 id=\"h-how-much-ram-does-node-js-need-on-a-vps\" class=\"wp-block-heading\">How a lot RAM does Node.js want on a VPS?<\/h3>\n<p class=\"wp-block-paragraph\">A minimal Categorical server idles nicely below 100 MB, however a practical manufacturing app with middleware, logging, and a connection pool sometimes runs within the 150-300 MB vary.<\/p>\n<p class=\"wp-block-paragraph\">The life like minimal for one manufacturing app is 2 GB; the candy spot for a Node + Postgres + Redis stack is 4 GB. <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/self-managed-vps\/\">DreamHost\u2019s Self-Managed VPS<\/a> Stack 4 (4 GB) handles most manufacturing Node workloads. Bounce to Stack 8 (8 GB) for SSR-heavy or real-time apps.<\/p>\n<h3 id=\"h-what-s-the-current-node-js-lts-version\" class=\"wp-block-heading\">What\u2019s the present Node.js LTS model?<\/h3>\n<p class=\"wp-block-paragraph\">The present Lively LTS is Node.js 24.x (\u201cKrypton\u201d), promoted on October 28, 2025, and supported by way of April 2028. Node.js 22.x (\u201cJod\u201d) is in Upkeep LTS by way of April 2027 if a dependency forces backward compatibility. <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/nodejs.org\/en\/blog\/release\/v26.0.0\">Node.js 26 launched on Might 5, 2026<\/a>, as Present and can be promoted to LTS in October 2026.<\/p>\n<p class=\"wp-block-paragraph\">Most manufacturing groups keep on with LTS releases until they particularly want newer runtime options.<\/p>\n<h3 id=\"h-do-i-need-pm2-if-i-have-systemd\" class=\"wp-block-heading\">Do I want PM2 if I&#8217;ve systemd?<\/h3>\n<p class=\"wp-block-paragraph\">No, you don\u2019t want each. PM2 and systemd resolve the identical drawback: holding your Node app working by way of crashes and reboots. Many Node-focused groups decide PM2 for built-in clustering, log administration, and reload tooling.<\/p>\n<p class=\"wp-block-paragraph\">Groups already working systemd items for every thing else decide systemd.<\/p>\n<h3 id=\"h-why-put-nginx-in-front-of-node-js\" class=\"wp-block-heading\">Why put NGINX in entrance of Node.js?<\/h3>\n<p class=\"wp-block-paragraph\">NGINX (or Caddy) in entrance of Node.js centralizes TLS termination, compression, static asset serving, and price limiting in software program designed particularly for proxying and internet serving.<\/p>\n<p class=\"wp-block-paragraph\">It additionally permits you to run a number of Node apps on the identical VPS with out port conflicts. In manufacturing, Node listens on localhost; NGINX faces the general public web.<\/p>\n<h3 id=\"h-is-node-js-on-a-vps-cheaper-than-heroku-or-vercel\" class=\"wp-block-heading\">Is Node.js on a VPS cheaper than Heroku or Vercel?<\/h3>\n<p class=\"wp-block-paragraph\">Sure, usually. A 4 GB VPS generally lands someplace within the $15-$25\/month vary at market price and might consolidate app runtime, database, and cache prices which can be billed individually on many PaaS platforms.<\/p>\n<p class=\"wp-block-paragraph\">Vercel Professional pricing is seat-based, and serverless platforms nonetheless impose execution-duration limits relying on runtime and plan.<\/p>\n<p class=\"wp-block-paragraph\">The commerce is that you simply deal with operations your self, about one to 3 hours a month.<\/p>\n<h3 id=\"h-can-i-run-multiple-node-apps-on-one-vps\" class=\"wp-block-heading\">Can I run a number of Node apps on one VPS?<\/h3>\n<p class=\"wp-block-paragraph\">Sure, and it\u2019s the commonest motive groups transfer from PaaS to a VPS. Run every app by itself inside port (3000, 3001, 3002) and route visitors with NGINX server blocks by hostname. PM2 manages all of them as separate processes; systemd makes use of one unit file per app.<\/p>\n<p class=\"wp-block-paragraph\">A 4 GB VPS can usually deal with a number of light-weight Node companies alongside a small database workload.<\/p>\n<h3 id=\"h-can-i-run-node-js-on-dreamhost-shared-hosting\" class=\"wp-block-heading\">Can I run Node.js on DreamHost shared internet hosting?<\/h3>\n<p class=\"wp-block-paragraph\">No. Node.js wants persistent processes, root-level bundle installs, and direct port binding, none of which shared internet hosting gives. <a rel=\"nofollow\" target=\"_blank\" target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/self-managed-vps\/\">DreamHost\u2019s Self-Managed VPS plans<\/a> (Stack 4 and up) match Node workloads with full root entry, NVMe storage, and unmetered bandwidth.<\/p>\n<div class=\"like-unlike-post\">\n<h5> Did you get pleasure from this text? <\/h5>\n<p> <button type=\"button\" class=\"like-button\" data-post-id=\"83809\" aria-label=\"Like this post\"> <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" stroke-width=\"0\" stroke=\"var(--c-brand)\" viewbox=\"0 0 28 28.1\" height=\"48px\" width=\"48px\" fill=\"var(--c-brand)\"> <path d=\"M27.2,15.6c.5-.7.8-1.6.8-2.7,0-2.1-1.8-4-4-4h-3.8c.5-.9,1.1-2.1,1.1-3.8C21.3,1.9,20,0,16.8,0,15.2,0,14.6,2.1,14.2,3.7c-.2,1-.4,1.9-.9,2.4-1.3,1.3-3.3,4.4-4.4,5.1-.1.1-.3.1-.4.1-.3-.5-.8-.8-1.4-.8H1.8C.8,10.5,0,11.3,0,12.3v14C0,27.3.8,28.1,1.8,28.1h5.2c1,0,1.8-.8,1.8-1.8v-.5c1.8,0,5.5,2.2,9.7,2.2h2.2c3.2,0,5-2,4.9-4.9.8-1,1.2-2.4,1-3.7.7-1,.9-2.6.6-3.8ZM1.8,26.2v-14h5.2v14H1.8ZM25,15.1c.9.6.9,3.3-.3,3.9.7,1.2.1,2.9-.8,3.4.5,2.9-1,3.9-3.1,3.9h-2.2c-4,0-7.4-2.2-9.7-2.2v-11.2c2.1,0,4-3.7,5.8-5.6,1.7-1.7,1.1-4.5,2.2-5.6,2.8,0,2.8,1.9,2.8,3.3,0,2.3-1.7,3.3-1.7,5.6h6.1c1.2,0,2.2,1.1,2.2,2.2,0,1.2-.5,2.1-1.3,2.3h0ZM5.7,23.6c0,.7-.6,1.3-1.3,1.3s-1.3-.6-1.3-1.3.6-1.3,1.3-1.3,1.3.6,1.3,1.3Z\"\/> <path id=\"post-liked\" d=\"M27.2,15.6c.5-.7.8-1.6.8-2.7,0-2.1-1.8-4-4-4h-3.8c.5-.9,1.1-2.1,1.1-3.8C21.3,1.9,20,0,16.8,0,15.2,0,14.6,2.1,14.2,3.7c-.2,1-.4,1.9-.9,2.4-1.3,1.3-3.3,4.4-4.4,5.1-.1.1-.3.1-.4.1-.3-.5-.8-.8-1.4-.8H1.8C.8,10.5,0,11.3,0,12.3v14C0,27.3.8,28.1,1.8,28.1h5.2c1,0,1.8-.8,1.8-1.8v-.5c1.8,0,5.5,2.2,9.7,2.2h2.2c3.2,0,5-2,4.9-4.9.8-1,1.2-2.4,1-3.7.7-1,.9-2.6.6-3.8ZM5.7,23.6c0,.7-.6,1.3-1.3,1.3s-1.3-.6-1.3-1.3.6-1.3,1.3-1.3,1.3.6,1.3,1.3Z\"\/> <\/svg> <\/button> <\/div>\n<div class=\"author-box\">\n<p class=\"author-bio p--sm\"> Dallas Kashuba co-founded DreamHost whereas attending Harvey Mudd Faculty and has spent almost three a long time constructing infrastructure at scale. In the present day he serves as an advisor, board member, and investor for varied tech startups, with a constant give attention to person privateness, open supply, and knowledge portability. When he isn&#8217;t fascinated with the Open Internet, he is in all probability making music. <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/x.com\/dallas\">Observe Dallas on X<\/a>. <\/p>\n<\/p><\/div><\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Working Node.js on a VPS means putting in the present Node.js LTS (24.x \u201cKrypton\u201d as of Might 2026) on a Linux server you management, then working your app behind a course of supervisor and a reverse proxy with HTTPS. You get a single always-on field that handles long-lived connections, background jobs, and heavy compute with [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":11029,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp","fifu_image_alt":"","footnotes":""},"categories":[42],"tags":[3913,1007,77],"class_list":["post-11027","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oline-business","tag-node-js","tag-run","tag-vps"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How To Run Node.js on a VPS - ideastomakemoneytoday<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ideastomakemoneytoday.online\/?p=11027\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Run Node.js on a VPS - ideastomakemoneytoday\" \/>\n<meta property=\"og:description\" content=\"Working Node.js on a VPS means putting in the present Node.js LTS (24.x \u201cKrypton\u201d as of Might 2026) on a Linux server you management, then working your app behind a course of supervisor and a reverse proxy with HTTPS. You get a single always-on field that handles long-lived connections, background jobs, and heavy compute with [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ideastomakemoneytoday.online\/?p=11027\" \/>\n<meta property=\"og:site_name\" content=\"ideastomakemoneytoday\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-30T13:30:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-30T13:30:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp\" \/>\n<meta name=\"author\" content=\"g6pm6\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"g6pm6\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027\"},\"author\":{\"name\":\"g6pm6\",\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/#\\\/schema\\\/person\\\/eb9631f61bc5ab134298c1c4481b0cce\"},\"headline\":\"How To Run Node.js on a VPS\",\"datePublished\":\"2026-06-30T13:30:40+00:00\",\"dateModified\":\"2026-06-30T13:30:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027\"},\"wordCount\":3943,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i3.wp.com\\\/www.dreamhost.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp?ssl=1\",\"keywords\":[\"Node.js\",\"Run\",\"VPS\"],\"articleSection\":[\"Oline Business\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027\",\"url\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027\",\"name\":\"How To Run Node.js on a VPS - ideastomakemoneytoday\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i3.wp.com\\\/www.dreamhost.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp?ssl=1\",\"datePublished\":\"2026-06-30T13:30:40+00:00\",\"dateModified\":\"2026-06-30T13:30:42+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/#\\\/schema\\\/person\\\/eb9631f61bc5ab134298c1c4481b0cce\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027#primaryimage\",\"url\":\"https:\\\/\\\/i3.wp.com\\\/www.dreamhost.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp?ssl=1\",\"contentUrl\":\"https:\\\/\\\/i3.wp.com\\\/www.dreamhost.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp?ssl=1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?p=11027#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How To Run Node.js on a VPS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/#website\",\"url\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/\",\"name\":\"ideastomakemoneytoday\",\"description\":\"My WordPress Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/#\\\/schema\\\/person\\\/eb9631f61bc5ab134298c1c4481b0cce\",\"name\":\"g6pm6\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8269f4471ad6ee9d66fe62ec749f04d5e01348d5ec8dfe671fe8b3ce6b35de6f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8269f4471ad6ee9d66fe62ec749f04d5e01348d5ec8dfe671fe8b3ce6b35de6f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8269f4471ad6ee9d66fe62ec749f04d5e01348d5ec8dfe671fe8b3ce6b35de6f?s=96&d=mm&r=g\",\"caption\":\"g6pm6\"},\"sameAs\":[\"https:\\\/\\\/ideastomakemoneytoday.online\"],\"url\":\"https:\\\/\\\/ideastomakemoneytoday.online\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How To Run Node.js on a VPS - ideastomakemoneytoday","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:\/\/ideastomakemoneytoday.online\/?p=11027","og_locale":"en_US","og_type":"article","og_title":"How To Run Node.js on a VPS - ideastomakemoneytoday","og_description":"Working Node.js on a VPS means putting in the present Node.js LTS (24.x \u201cKrypton\u201d as of Might 2026) on a Linux server you management, then working your app behind a course of supervisor and a reverse proxy with HTTPS. You get a single always-on field that handles long-lived connections, background jobs, and heavy compute with [&hellip;]","og_url":"https:\/\/ideastomakemoneytoday.online\/?p=11027","og_site_name":"ideastomakemoneytoday","article_published_time":"2026-06-30T13:30:40+00:00","article_modified_time":"2026-06-30T13:30:42+00:00","og_image":[{"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp","type":"","width":"","height":""}],"author":"g6pm6","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp","twitter_misc":{"Written by":"g6pm6","Est. reading time":"21 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027#article","isPartOf":{"@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027"},"author":{"name":"g6pm6","@id":"https:\/\/ideastomakemoneytoday.online\/#\/schema\/person\/eb9631f61bc5ab134298c1c4481b0cce"},"headline":"How To Run Node.js on a VPS","datePublished":"2026-06-30T13:30:40+00:00","dateModified":"2026-06-30T13:30:42+00:00","mainEntityOfPage":{"@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027"},"wordCount":3943,"commentCount":0,"image":{"@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027#primaryimage"},"thumbnailUrl":"https:\/\/i3.wp.com\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp?ssl=1","keywords":["Node.js","Run","VPS"],"articleSection":["Oline Business"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ideastomakemoneytoday.online\/?p=11027#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027","url":"https:\/\/ideastomakemoneytoday.online\/?p=11027","name":"How To Run Node.js on a VPS - ideastomakemoneytoday","isPartOf":{"@id":"https:\/\/ideastomakemoneytoday.online\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027#primaryimage"},"image":{"@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027#primaryimage"},"thumbnailUrl":"https:\/\/i3.wp.com\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp?ssl=1","datePublished":"2026-06-30T13:30:40+00:00","dateModified":"2026-06-30T13:30:42+00:00","author":{"@id":"https:\/\/ideastomakemoneytoday.online\/#\/schema\/person\/eb9631f61bc5ab134298c1c4481b0cce"},"breadcrumb":{"@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ideastomakemoneytoday.online\/?p=11027"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027#primaryimage","url":"https:\/\/i3.wp.com\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp?ssl=1","contentUrl":"https:\/\/i3.wp.com\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1220_x_628_ogimage_bun_vs_node_js-scaled.webp?ssl=1"},{"@type":"BreadcrumbList","@id":"https:\/\/ideastomakemoneytoday.online\/?p=11027#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ideastomakemoneytoday.online\/"},{"@type":"ListItem","position":2,"name":"How To Run Node.js on a VPS"}]},{"@type":"WebSite","@id":"https:\/\/ideastomakemoneytoday.online\/#website","url":"https:\/\/ideastomakemoneytoday.online\/","name":"ideastomakemoneytoday","description":"My WordPress Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ideastomakemoneytoday.online\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ideastomakemoneytoday.online\/#\/schema\/person\/eb9631f61bc5ab134298c1c4481b0cce","name":"g6pm6","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/8269f4471ad6ee9d66fe62ec749f04d5e01348d5ec8dfe671fe8b3ce6b35de6f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8269f4471ad6ee9d66fe62ec749f04d5e01348d5ec8dfe671fe8b3ce6b35de6f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8269f4471ad6ee9d66fe62ec749f04d5e01348d5ec8dfe671fe8b3ce6b35de6f?s=96&d=mm&r=g","caption":"g6pm6"},"sameAs":["https:\/\/ideastomakemoneytoday.online"],"url":"https:\/\/ideastomakemoneytoday.online\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=\/wp\/v2\/posts\/11027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11027"}],"version-history":[{"count":1,"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=\/wp\/v2\/posts\/11027\/revisions"}],"predecessor-version":[{"id":11028,"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=\/wp\/v2\/posts\/11027\/revisions\/11028"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=\/wp\/v2\/media\/11029"}],"wp:attachment":[{"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ideastomakemoneytoday.online\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}