Infrastructure
Replacing Vercel with Bare-Metal Debian and nginx
Vercel and Netlify built a generation of developers who never had to touch a Linux box. The pricing model worked when sites were small. At any meaningful scale, the costs and the lock-in start to matter. Here is what running production traffic on bare-metal Debian plus nginx actually looks like in 2026, with real numbers from a 130-site portfolio.
Vercel pricing reality check
Vercel's free tier covers personal projects. The Pro tier starts at $20 per user per month and scales by team size and bandwidth. Once you cross any of: 1 TB bandwidth, 100k invocations, or basic feature gates, the bill compounds.
For a five-site studio shipping 50 GB per month each, you are paying $20 per user per month plus bandwidth overage. Add Edge Function invocations and the monthly invoice settles in the $80-$200 range for a single developer.
A single $30 Debian VPS runs the same five sites at any bandwidth without changing the bill.
What you actually need
The setup is unromantic. A Debian VPS (Hetzner, Vultr, Linode, DigitalOcean), nginx, Let's Encrypt for SSL, BIND or external DNS, and an rsync deploy step. That is the entire stack.
# nginx vhost for a Next.js static export
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/example.com;
index index.html;
# Static export: serve /path/index.html for /path/ requests
location / {
try_files $uri $uri/index.html $uri/ =404;
}
# Long cache for hashed assets, short cache for HTML
location /_next/static/ {
expires 365d;
add_header Cache-Control "public, immutable";
}
location ~* \.html$ {
expires 5m;
add_header Cache-Control "public, must-revalidate";
}
}
Performance comparison
Side-by-side PSI runs on the same Next.js 14 site, deployed to (a) Vercel Pro and (b) bare-metal Debian + nginx in the US Central region:
| Metric | Vercel Pro | Debian + nginx |
|---|---|---|
| TTFB | 180-280ms | 90-180ms |
| LCP mobile | 2.4-3.1s | 2.1-2.9s |
| CLS | 0.00-0.05 | 0.00-0.05 |
| PSI performance score | 88-94 | 90-97 |
Bare-metal usually wins TTFB because the request hits one server, not an edge function that warms up a Node container on each cold start. For static content, the edge layer adds latency rather than removing it. For SSR with real compute work per request, the Vercel edge is genuinely fast; the comparison flips.
The lock-in cost nobody talks about
Vercel-specific primitives (Edge Functions, Image Optimization, Middleware in the platform-specific shape, ISR with their cache invalidation API) only run on Vercel. The moment you depend on one, your site cannot migrate without a rewrite.
On bare-metal, the same Next.js build artifact (the static export from next build with output: 'export') runs anywhere a webroot can be served from. The platform is interchangeable. The site is portable.
When Vercel is the right answer
This is not an anti-Vercel piece. Vercel makes sense when:
- You actually need SSR per request (real personalization, real auth state, real database lookups on every page)
- You have no Linux administrator on the team and are unwilling to learn
- You are pre-product-market-fit and your time is better spent on the product than the deploy pipeline
- You are running ISR on a content-driven site where the cache invalidation timing matters per page
For everyone else, bare-metal is the cleaner answer.
Operational reality
Running bare-metal is not free. You will spend time on:
- OS patching (monthly, 30 minutes if you batch)
- Certificate renewals (auto via certbot, but verify quarterly)
- Log rotation and disk monitoring
- Backup strategy (rsync to a secondary box is the cheap path)
- Occasional rebuild when you outgrow the current VPS class
The ThatDevPro pattern is to run one beefy VPS (4 vCPU, 16 GB RAM) serving 100+ sites via nginx vhosts. Backup runs nightly to a $5 storage VPS at a different provider. Total cost: about $35 per month for the whole portfolio.
If you want this
The studio runs managed bare-metal hosting as part of every engagement. Or read the tutorials for the patterns: nginx config, certbot automation, rsync deploy, and the monitoring stack.