Deployment with PM2 and Nginx
Deploy Node.js apps to production. Learn PM2, Nginx, and SSL.
Deployment to Production
PM2 Process Manager
```bash 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
```nginx 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; } } ```
```bash sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx ```
SSL with Let's Encrypt
```bash sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
sudo certbot renew --dry-run ```
Graceful Shutdown
```javascript 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.