Vercel vs VPS: Cuánto Cuesta Realmente Mantener una App Next.js en 2026
Comparo la factura real de Vercel Pro vs un VPS en Hetzner para una app Next.js con tráfico real. Incluye costes ocultos, escenarios de factura sorpresa y cuándo merece la pena cada opción.
Tabla de contenidos
Desplegué mi primera app Next.js en Vercel en 2024. git push, URL en 30 segundos, SSL automático. Mágico.
Tres meses después llegó la primera factura que no esperaba: $87. Mi app tenía 12.000 visitas al mes. ¿Cómo es posible?
Desde entonces he mantenido la misma app en Vercel Y en un VPS de Hetzner en paralelo durante 6 meses para comparar. Aquí van los números reales.
La app: Qué estoy desplegando
- Framework: Next.js 15 (App Router, Server Components)
- Base de datos: PostgreSQL en Supabase (externo)
- Auth: Auth.js con Google + GitHub
- API Routes: 15 endpoints serverless
- ISR: Páginas estáticas regeneradas cada 60s
- Tráfico: ~15.000 visitas/mes, ~45.000 page views
- Imágenes: Servidas desde Cloudflare R2
Vercel Pro: La factura desglosada
Plan Pro: $20/mes base
Lo que incluye:
| Recurso | Incluido | Mi uso real |
|---|---|---|
| Bandwidth | 1 TB | ~8 GB |
| Serverless invocaciones | 1M | ~180K |
| Edge Middleware invocaciones | 1M | ~45K |
| ISR regeneraciones | 100K | ~22K |
| Image Optimization | 5.000 | ~3.200 |
| Build minutes | 6.000 min | ~120 min |
A primera vista, todo cabe. Pero hay extras:
Los costes ocultos
Image Optimization: Las 5.000 imágenes optimizadas del plan Pro se refieren a imágenes únicas procesadas, no a veces servidas. Con un blog que tiene 30 posts con 3 imágenes cada uno = 90 imágenes únicas × varios tamaños (srcset) = ~450 imágenes. Bien.
Pero si usas next/image con imágenes de usuario (avatares, uploads), cada imagen nueva cuenta. Con 2.000 usuarios subiendo fotos de perfil… llegas rápido a 5.000.
Serverless Function Duration: El plan Pro incluye 1.000 GB-horas. Cada invocación × su duración × su memoria. Si tienes una API route que tarda 3 segundos (porque llama a una IA), eso come rápido:
180.000 invocaciones × 0.5s promedio × 1GB memoria = 25 GB-horas
(bien, dentro del límite)
Pero si una función tarda 3s (llamada a OpenAI):
50.000 invocaciones × 3s × 1GB = 41.6 GB-horas
(todavía bien, pero se nota)
Mi factura real de Vercel en 6 meses:
| Mes | Base | Extras | Total |
|---|---|---|---|
| 1 | $20 | $0 | $20 |
| 2 | $20 | $0 | $20 |
| 3 | $20 | $12 (imágenes) | $32 |
| 4 | $20 | $8 | $28 |
| 5 | $20 | $15 | $35 |
| 6 | $20 | $22 (pico tráfico) | $42 |
| Total | $177 | ||
| Media | $29.50/mes |
El escenario de pesadilla: La factura sorpresa
Un post de mi blog se compartió en Hacker News. En 24 horas:
- 45.000 visitas (vs las 500/día normales)
- 890.000 serverless invocations
- 95 GB de bandwidth
Con el plan Pro, la factura de ese mes: $87. No fue dramático porque el post no siguió viral, pero si hubiera sido una semana entera, habría sido $200+.
Vercel tiene un “Spend Limit” que puedes configurar para que tu app deje de funcionar si llegas a un límite. Pero tu app deja de funcionar. Si es un SaaS de pago, eso no es aceptable.
VPS (Hetzner): La factura desglosada
Setup
| Recurso | Especificaciones | Precio |
|---|---|---|
| VPS CX22 | 2 vCPU, 4 GB RAM, 40 GB SSD | 4,50€/mes |
| IPv4 dedicada | (incluida) | 0€ |
| Backups automáticos | 20% del precio del VPS | 0,90€/mes |
| Total | 5,40€/mes (~$5.80) |
Sí. $5.80 al mes. Independientemente del tráfico.
Lo que tuve que configurar
# 1. Ubuntu 24.04 + Docker
apt update && apt install docker.io docker-compose-v2 nginx certbot
# 2. Dockerfile para Next.js
# (Next.js tiene un Dockerfile oficial en su repo)
# 3. Nginx como reverse proxy
server {
listen 443 ssl http2;
server_name miapp.com;
ssl_certificate /etc/letsencrypt/live/miapp.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/miapp.com/privkey.pem;
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_cache_bypass $http_upgrade;
}
}
# 4. Certbot para SSL automático
certbot --nginx -d miapp.com
# 5. GitHub Actions para deploy automático
# (git push → build → docker push → restart en el VPS)
Tiempo de setup inicial: ~3 horas la primera vez. Después tengo un script que lo replica en 15 minutos.
Mi factura real del VPS en 6 meses
| Mes | VPS | Extras | Total |
|---|---|---|---|
| 1-6 | 5,40€ | 0€ | 5,40€ |
| Total | 32,40€ (~$35) | ||
| Media | $5.80/mes |
Cuando el post se viralizó en HN, ¿qué pasó con el VPS? Nada. La CPU subió al 60%, Nginx sirvió páginas cacheadas, y la factura fue… $5.80. Como siempre.
Comparativa directa
| Aspecto | Vercel Pro | VPS Hetzner |
|---|---|---|
| Precio base | $20/mes | ~$5.80/mes |
| Precio real (mi caso) | ~$29.50/mes | ~$5.80/mes |
| Setup | 0 minutos | 3 horas |
| Deploy | git push | git push (con CI/CD) |
| SSL | Automático | Certbot (automático tras setup) |
| CDN | Incluido (Edge Network) | Necesitas Cloudflare (gratis) |
| Escalado | Automático | Manual (resize VPS) |
| Serverless Functions | Nativas | No (usas Node.js normal) |
| Image Optimization | Incluida | Necesitas sharp + cache |
| Factura sorpresa | Posible | Imposible |
| Mantenimiento | 0 | ~1h/mes (updates) |
| ISR/SSR | Nativo | Funciona con next start |
| Monitoring | Dashboard incluido | Necesitas Uptime Kuma/similar |
Cuándo elegir Vercel
- Equipo sin DevOps: Si nadie en tu equipo sabe configurar un servidor, Vercel vale la pena
- Preview Deployments: Cada PR genera una URL de preview → genial para equipos
- Edge Functions: Si necesitas lógica en el edge (geolocalización, A/B testing)
- Presupuesto > $30/mes es aceptable: Para empresas que facturan, $30/mes es nada
- MVP que necesitas YA: Deploy en 30 segundos vs 3 horas de setup
Cuándo elegir un VPS
- Presupuesto ajustado: $5.80 vs $30/mes es una diferencia del 80%
- Tráfico impredecible: Un VPS no te penaliza por ser viral
- Control total: Logs, SSH, cron jobs, lo que necesites
- Multi-app: En un VPS de $5.80 puedo correr 3-4 apps a la vez
- Aprendizaje: Montar un servidor te enseña cosas que Vercel te oculta
Mi setup actual (lo mejor de ambos mundos)
Blog/Portfolio (este sitio) → Netlify (gratis, estático)
SaaS frontend (Next.js) → VPS Hetzner ($5.80/mes)
SaaS API (NestJS) → Mismo VPS
Base de datos → Supabase ($25/mes)
CDN/Caché → Cloudflare (gratis)
CI/CD → GitHub Actions (gratis)
Monitoring → Uptime Kuma (self-hosted en el mismo VPS)
Total: ~$31/mes para un stack completo de producción. Con Vercel sería ~$55/mes para lo mismo.
Si quieres configurar el deploy automático con GitHub Actions, lee mi guía de deploy gratis.
El elefante en la habitación: Next.js sin Vercel
Next.js es propiedad de Vercel. Las features más nuevas (Partial Prerendering, Server Actions optimizados) funcionan mejor en Vercel. En un VPS con next start, todo funciona, pero sin las optimizaciones de edge.
Alternativas si esto te preocupa:
- Astro: Lo uso para este blog. Genera HTML estático, funciona en cualquier hosting
- Remix: Funciona en cualquier servidor Node.js sin preferencia por un hosting
- SvelteKit: Idem, adapter para cualquier plataforma
Si estás empezando un proyecto nuevo y no quieres depender de Vercel, considera estas opciones. Si ya tienes una app Next.js, funciona perfectamente en un VPS — solo te pierdes las optimizaciones de edge.
Artículos relacionados
- Docker para developers: Guía práctica — lo que necesitas para el VPS
- Deploy gratis con GitHub Actions — CI/CD para tu VPS
- Supabase vs Firebase en producción — la base de datos que va con ambos
- Cómo hice mi portfolio con Vite y Tailwind — un ejemplo de hosting estático gratis