DEV Community

Vikas Sahu
Vikas Sahu

Posted on Edited on

How to Deploy Node.js Apps with Zero Downtime using Nginx & PM2

Deploying a production Node.js application can sometimes feel like walking through a minefield. Between unhandled exceptions crashing your server, unsecured SSH ports, and blocked traffic ports, getting things live smoothly is a rite of passage.

In this guide, we are breaking down how to set up a robust, production-grade Ubuntu VPS with zero downtime.

1. Server Hardening & Secure Access

Before running any Node code, lock down your VPS:

  • Disable root password login and set up SSH key-based authentication.
  • Configure ufw (Uncomplicated Firewall) to allow only essential ports (22 for SSH, 80 for HTTP, and 443 for HTTPS).

2. Managing Processes with PM2 Cluster Mode

Never run your Node app using raw node app.js in production. Use PM2 to manage processes, enable automatic restarts on failure, and leverage multi-core CPUs using Cluster Mode:

pm2 start server.js -i max --name "production-app"
pm2 save
pm2 startup
Enter fullscreen mode Exit fullscreen mode

Want the Complete, Step-by-Step Blueprint?

If you want to skip the trial-and-error and get the complete production setup scripts, configuration templates, and server hardening checklists, check out my comprehensive guide:

👉 Get the High-Performance Node.js & Nginx VPS Deployment Guide

Top comments (0)