Node.js9 min read

Deployment with PM2 and Nginx

Deploy Node.js apps to production. Learn PM2, Nginx, and SSL.

Michael Torres
December 19, 2025
0.0k0

Deployment to Production

PM2 Process Manager

npm install -g pm2

pm2 start app.js

pm2 start app.js -i max

pm2 list
pm2 logs
pm2 monit
pm2 restart app
pm2 stop app

pm2 startup
pm2 save

Nginx Reverse Proxy

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

SSL with Let's Encrypt

sudo apt install certbot python3-certbot-nginx

sudo certbot --nginx -d example.com

sudo certbot renew --dry-run

Graceful Shutdown

const server = app.listen(3000);

process.on('SIGTERM', () => {
  console.log('SIGTERM received, closing server...');
  
  server.close(() => {
    mongoose.connection.close(false, () => {
      process.exit(0);
    });
  });
});

Key Takeaway

Use PM2 for process management. Nginx as reverse proxy. Enable SSL with Let's Encrypt. Implement graceful shutdown. Monitor logs and errors.

#Node.js#Deployment#PM2#Nginx#Production