Not every project needs Kubernetes. For early-stage products, a well-configured single VPS handles surprising traffic. We deploy multiple production apps this way — Errandoo, NCHRecruitPro, LeadsNeoForge, and ForgeCadNeo.
Docker Compose Stack
Each project gets a Docker Compose file with health checks and resource limits. The web frontend runs with 512MB memory limit, the API gets 2GB, PostgreSQL runs separately, and Valkey (Redis-compatible) handles caching with 256MB.
Nginx Configuration
Nginx handles SSL termination via Let's Encrypt with auto-renewal, gzip compression for text and JSON, rate limiting at 10 requests per second per IP with burst allowance, and WebSocket proxy headers for Socket.IO connections. Security headers (X-Frame-Options, Content-Security-Policy) are set at the Nginx level.
Monitoring Stack
Loki with Promtail aggregates logs from all containers. Grafana provides dashboards for request rates, error rates, and response times. Uptime Kuma checks all endpoints every 60 seconds. A Telegram bot sends alerts when anything goes down.
Cost Comparison
A 4GB RAM / 2 vCPU VPS costs approximately $12/month and handles 10,000+ daily users. The equivalent setup on managed services (Vercel Pro + managed database + managed Redis + monitoring SaaS) would cost $150-200+/month.
When to Scale Beyond a Single VPS
Move to a multi-server setup when you need geographic distribution, when a single database can't handle write throughput, or when your team needs independent deployment pipelines. Until then, a single VPS is simpler, cheaper, and easier to debug.