I run 4 live projects on a single VPS. Here’s exactly what I use and what it costs.
The Problem
You built an amazing side project. Now you need to deploy it.
Options:
→ Heroku: Free tier gone, cheapest $5+/mo per app 😬
→ Vercel: Great for frontend, limited backend ⚠️
→ AWS Free Tier: Complex, easy to overspend 💸
→ Shared hosting: Slow, outdated stacks 🐌
What I actually use for my projects:
→ 1 VPS + free tiers = everything running for ~$5/mo total 🎉
Enter fullscreen mode
Exit fullscreen mode
My Setup at a Glance
Project
Tech Stack
Hosting
Cost
AgentVote (main site)
Node.js + Nginx
VPS (port 3000)
Included
CryptoSignal
Node.js + SQLite
Same VPS (port 3001)
Included
Hugo Blog
Static HTML
Same VPS (Nginx)
Included
Text Formatter
Node.js
Same VPS (port 3099)
Included
Total: $5/month for the VPS. Everything else is free.
Option 1: VPS (What I Use)
Why a VPS?
✅ Full root access — install anything
✅ Run multiple projects on one server
✅ Fixed monthly cost regardless of traffic
✅ Learn DevOps skills that transfer to any job
✅ Complete control over your stack
❌ You manage security updates yourself
❌ No auto-scaling (but side projects don’t need it)
Enter fullscreen mode
Exit fullscreen mode
What to Look For
# Minimum specs for most side projects:
CPU: 1-2 cores
RAM: 1-2 GB (Node.js apps are light)
Storage: 25-50 GB SSD
Bandwidth: 1-2 TB/month (plenty for small projects)
OS: Ubuntu 22.04 or 24.04 LTS
Price: $3-6/month
Enter fullscreen mode
Exit fullscreen mode
VPS Providers I’ve Used
DigitalOcean — My Recommendation
Basic droplet: $4/month (512MB RAM, 1 vCPU)
Standard droplet: $6/month (1GB RAM, 1 vCPU)
Pros: Simple dashboard, great docs, massive tutorial library
Cons: No free tier
If you sign up through my referral link, you get $100 in credits over 60 days
Hetzner Cloud (Europe-based, excellent value)
CX22: €3.29/month (~$3.50) — 2 vCPU, 2GB RAM, 40GB SSD
Pros: Best price-to-performance ratio
Cons: Support is Germany-timezone
Vultr
Starting at $2.50/month (512MB RAM)
Many global locations
Good if you need servers close to your users
Linode (Akamai)
Starting at $5/month
Reliable, been around forever
Good documentation
My Nginx Config (Running 4 Apps on One Server)
# /etc/nginx/sites-available/myserver
# Each app on its own port, one domain
server {
listen 80;
server_name agentvote.cc;
# Main app
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
}
# CryptoSignal sub-path
location /signal/ {
proxy_pass http://127.0.0.1:3001/;
proxy_set_header Host $host;
}
# Blog (static files)
location /blog {
alias /root/data/disk/projects/alexchen-blog/public;
index index.html;
try_files $uri $uri/ /blog/index.html =404;
}
# Text formatter tool
location /format {
return 301 /format/;
}
location /format/ {
proxy_pass http://127.0.0.1:3099/;
}
}
Enter fullscreen mode
Exit fullscreen mode
SSL with Let’s Encrypt (Free)
# Install certbot
apt install certbot python3-certbot-nginx -y
# Get certificate (free, auto-renews!)
certbot –nginx -d agentvote.cc -d blog.agentvote.cc
# Done! HTTPS enabled, auto-renewal before expiry
Enter fullscreen mode
Exit fullscreen mode
Process Management (Keep Apps Running)
# Option A: PM2 (simplest)
npm install -g pm2
pm2 start “node server.js” –name “app1”
pm2 start “node server.js” –name “signal”
pm2 startup # Auto-start on boot
pm2 save # Save process list
# Option B: systemd (no extra deps)
# /etc/systemd/system/app1.service
(Unit)
Description=App1
After=network.target
(Service)
Type=simple
User=root
WorkingDirectory=/root/data/disk/projects/app
ExecStart=/root/.nvm/current/bin/node server.js
Restart=always
RestartSec=10
(Install)
WantedBy=multi-user.target
systemctl enable app1 # Enable on boot
systemctl start app1 # Start now
journalctl -u app1 -f # View logs
Enter fullscreen mode
Exit fullscreen mode
Option 2: Free/PaaS Tiers (Great for Startups)
Vercel — Best for Frontend
Free: 100GB bandwidth, 100 serverless function invocations/day
Perfect for: React/Next.js/Vue/Svelte static sites & SSR
My blog’s frontend could run here free
Deploy: connect GitHub repo → auto-deploy on push
Railway — Easiest Backend Hosting
Free tier: $5 credit/month (enough for small hobby apps)
One-click deploy from GitHub
Auto-scales (but watch the costs!)
Great for: APIs, bots, background workers
Render — Heroku Alternative
Free tier: Web service (sleeps after 15min inactivity)
Databases: Free PostgreSQL (up to 90 days trial)
Great for: Quick prototypes, demos
Fly.io — Edge Deployment
Free allowance: 3 shared-cpu VMs × 256MB RAM
Deploy Docker containers globally
Great for: Low-latency global apps
Glitch — For Learning/Experiments
Completely free for public projects
Live editing in browser
Great for: Prototypes, learning, hackathon projects
Option 3: Hybrid Approach (Smartest)
Static sites → Vercel free tier (fast CDN, zero config)
API servers → Your VPS ($5/mo, full control)
Databases → SQLite on VPS (free) or Supabase free tier
Background jobs → Vercel Cron or your VPS
Files → Cloudflare R2 (S3-compatible, 10GB free)
Email → Resend (3000 emails/month free)
Result: Nearly free infrastructure that scales when needed.
Enter fullscreen mode
Exit fullscreen mode
My Monthly Cost Breakdown
Item
Cost
Notes
VPS (Hetzner/DigitalOcean)
$3.50-$5.00
Runs all my apps
Domain name (.cc)
~$8/year
~$0.67/month
Let’s Encrypt SSL
$0
Free, auto-renewing
Cloudflare DNS/CDN
$0
Free tier covers my needs
Total
~$5.67/month
For 4+ projects
How to Get Started (Step by Step)
Week 1: Get One App Running
1. Sign up for (DigitalOcean)(https://www.digitalocean.com/) (or Hetzner)
2. Create a droplet/server (Ubuntu 22.04, $4-6/mo plan)
3. SSH into your server
4. Install Node.js: curl -fsSL https://fnm.vercel.app | sh
5. Clone your project: git clone your-repo
6. npm install && npm run build
7. Start it: node server.js (or npm start)
8. Install Nginx: apt install nginx
9. Point domain to server IP
10. Set up SSL: certbot –nginx -d yourdomain.com
Enter fullscreen mode
Exit fullscreen mode
Week 2: Add Monitoring
# Uptime monitoring (free)
# UptimeRobot or Uptime.kuma (self-hosted)
# Error tracking
# Sentry (free tier for
# Log management
# journalctl -u your-app (built-in with systemd)
# Or Loki/Grafana (self-hosted free)
Enter fullscreen mode
Exit fullscreen mode
Week 3: Optimize
# Add rate limiting to Nginx
# Set up automated backups
# Configure log rotation
# Add health check endpoints
# Monitor resource usage
Enter fullscreen mode
Exit fullscreen mode
What About When You Scale?
Don’t optimize prematurely!
My rule of thumb:
Enter fullscreen mode
Exit fullscreen mode
What’s your current hosting setup? Are you overpaying?
Follow @armorbreak for more practical DevOps content.
Resources mentioned:



