You don't need Kubernetes to run a production Node.js app. A simple VPS with PM2 and Nginx gets you surprisingly far.
PM2 handles process management: it restarts your app if it crashes, manages log rotation, and lets you run multiple apps on the same server. The ecosystem config file is your single source of truth for all your apps — names, ports, environment variables, all in one place.
Nginx sits in front as a reverse proxy. Each subdomain gets its own config file that proxies to a localhost port. This separation means you can run five different apps on one server, each on their own subdomain, all behind a single Nginx instance.
For SSL, Certbot with the Nginx plugin makes Let's Encrypt certificates trivial. One command per domain, automatic renewal, zero cost.
The deployment workflow I've settled on: rsync the code (excluding node_modules and databases), run npm install on the server, restart via PM2. A simple bash script wraps this into a single command. No CI/CD pipeline needed for small projects — just ./deploy.sh app-name deploy.