Deploy en Vercel

Vercel es la plataforma creada por el equipo de NextJS. Es la forma más fácil y rápida de desplegar aplicaciones NextJS.

¿Por qué Vercel?

Zero-config - Funciona sin configuración ✅ Deploy automático - Push a Git = deploy automático ✅ Preview deployments - Cada PR tiene su preview ✅ Edge Network - CDN global incluido ✅ Analytics gratuito - Métricas de performance ✅ Optimizado para NextJS - Hecho por el mismo equipo

Método 1: Deploy desde Git (Recomendado)

Paso 1: Sube tu código a Git

Si aún no tienes tu proyecto en Git:

git init
git add .
git commit -m "Initial commit"

# Conecta con GitHub
git remote add origin https://github.com/tu-usuario/tu-proyecto.git
git push -u origin main

Paso 2: Conecta con Vercel

  1. Ve a vercel.com
  2. Click en "Sign Up" o "Log In"
  3. Conecta con GitHub, GitLab o Bitbucket
  4. Autoriza a Vercel

Paso 3: Importa tu proyecto

  1. Click en "Add New" → "Project"
  2. Selecciona tu repositorio
  3. Click en "Import"

Vercel detecta automáticamente:

  • Que es un proyecto NextJS
  • El comando de build (npm run build)
  • El output directory (.next)

Paso 4: Configura (opcional)

Por defecto funciona sin configuración, pero puedes ajustar:

Framework Preset: Next.js (auto-detectado) Root Directory: ./ (si tu app está en subcarpeta, cámbialo) Build Command: npm run build Output Directory: .next

Paso 5: Deploy

  1. Click en "Deploy"
  2. Espera ~2 minutos
  3. ¡Listo! Tu app está en https://tu-proyecto.vercel.app
💡
Deploy automático

Cada vez que hagas push a tu rama principal (main/master), Vercel desplegará automáticamente. No necesitas hacer nada más.

Método 2: Deploy con CLI

Instalar CLI

npm install -g vercel

Login

vercel login

Te pedirá que confirmes desde tu email.

Deploy

# Desde la carpeta de tu proyecto
vercel

# Primera vez: responde las preguntas
# Set up and deploy? [Y/n]: Y
# Which scope? [tu-usuario]
# Link to existing project? [y/N]: N
# What's your project's name? [nombre-carpeta]
# In which directory is your code? [./]
# Auto-detected Project Settings (Next.js)
# Deploy? [Y/n]: Y

Deploy a producción

vercel --prod

Variables de entorno

Desde el dashboard

  1. Ve a tu proyecto en Vercel
  2. Settings → Environment Variables
  3. Agrega tus variables:
Name: DATABASE_URL
Value: postgresql://...
Environment: Production, Preview, Development
⚠️
Variables públicas

Variables con NEXT_PUBLIC_ se incluyen en el bundle del cliente. Úsalas solo para valores públicos como URLs de API.

Variables sin prefijo son privadas y solo existen en el servidor.

Desde CLI

# Agregar variable
vercel env add DATABASE_URL

# Selecciona ambiente: Production, Preview, Development

# Ver variables
vercel env ls

# Eliminar variable
vercel env rm DATABASE_URL

Desde archivo .env

# .env.local para desarrollo local
DATABASE_URL="postgresql://localhost/midb"
NEXT_PUBLIC_API_URL="http://localhost:3000"

# Las variables de producción las configuras en Vercel

Preview Deployments

Cada pull request obtiene su propio deployment preview:

Cómo funciona

  1. Creas una branch: git checkout -b nueva-feature
  2. Haces cambios y push: git push origin nueva-feature
  3. Creas un Pull Request en GitHub
  4. Vercel despliega automáticamente un preview
  5. Obtienes URL única: https://tu-proyecto-abc123.vercel.app
  6. Pruebas cambios antes de mergear
  7. Merge a main → Deploy automático a producción

Comentario en PR:

✅ Deployment
🔍 Inspect: https://vercel.com/...
✅ Preview: https://tu-proyecto-abc123.vercel.app

Dominio personalizado

Agregar dominio

  1. Settings → Domains
  2. Agrega tu dominio: mitienda.com
  3. Click en "Add"

Configurar DNS

Vercel te dará instrucciones específicas:

Opción A: Nameservers (recomendado)

ns1.vercel-dns.com
ns2.vercel-dns.com

Ve a tu registrador de dominios (GoDaddy, Namecheap, etc) y cambia los nameservers.

Opción B: A Record

Type: A
Name: @
Value: 76.76.21.21

Opción C: CNAME

Type: CNAME  
Name: www
Value: cname.vercel-dns.com

Verificación

Vercel verifica automáticamente. Puede tomar hasta 48 horas, pero usualmente es instantáneo.

Certificado SSL

Vercel provisiona SSL automáticamente con Let's Encrypt. No necesitas hacer nada.

Configuración avanzada

Build & Development Settings

# Vercel detecta automáticamente, pero puedes override:

Build Command: npm run build
Output Directory: .next
Install Command: npm install
Development Command: npm run dev

Root Directory

Si tu app está en una subcarpeta:

Root Directory: apps/web

Node.js Version

# En package.json
{
  "engines": {
    "node": ">=18.0.0"
  }
}

Environment Variables por deployment

# Production
DATABASE_URL=postgresql://prod...

# Preview
DATABASE_URL=postgresql://staging...

# Development (local)
DATABASE_URL=postgresql://localhost...

Funciones Serverless

Vercel convierte tus API Routes y Server Components en funciones serverless automáticamente.

Limits

Hobby (Gratis):

  • Timeout: 10 segundos
  • Memoria: 1024 MB
  • Tamaño de función: 250 MB

Pro ($20/mes):

  • Timeout: 60 segundos
  • Memoria: 3008 MB
  • Tamaño de función: 250 MB

Configurar timeout

// app/api/long-task/route.ts
export const maxDuration = 60 // Segundos (solo en Pro)

export async function GET() {
  // Tarea que toma tiempo
  await longRunningTask()
  return Response.json({ ok: true })
}

Edge Functions

Para latencia ultra-baja:

// app/api/edge/route.ts
export const runtime = 'edge'

export async function GET() {
  return Response.json({ 
    message: 'Esta función corre en el edge, cerca del usuario' 
  })
}

Edge vs Serverless:

EdgeServerless
Latencia< 50ms100-300ms
LímitesEstrictosFlexibles
Node APIsLimitadosCompletos
Use caseAPIs simplesLógica compleja

Monitoreo

Speed Insights

// app/layout.tsx
import { SpeedInsights } from '@vercel/speed-insights/next'

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        {children}
        <SpeedInsights />
      </body>
    </html>
  )
}

Ve métricas en: Dashboard → Speed Insights

Analytics

import { Analytics } from '@vercel/analytics/react'

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        {children}
        <Analytics />
      </body>
    </html>
  )
}

Ve datos en: Dashboard → Analytics

Logs

# Ver logs en tiempo real
vercel logs [deployment-url]

# Ver logs de producción
vercel logs --prod

O desde dashboard: Deployments → [click en deployment] → View Function Logs

Rollback

Si un deploy tiene problemas:

Desde dashboard

  1. Ve a Deployments
  2. Encuentra el deployment anterior que funcionaba
  3. Click en "⋯" → Promote to Production

Desde CLI

# Lista deployments
vercel ls

# Promover deployment anterior
vercel promote [deployment-url]

Redirecciones y Rewrites

En next.config.js

// next.config.js
module.exports = {
  async redirects() {
    return [
      {
        source: '/old-blog/:slug',
        destination: '/blog/:slug',
        permanent: true, // 301
      },
      {
        source: '/tienda',
        destination: '/productos',
        permanent: false, // 302
      },
    ]
  },
  
  async rewrites() {
    return [
      {
        source: '/api/old/:path*',
        destination: '/api/new/:path*',
      },
    ]
  },
}

Con vercel.json

{
  "redirects": [
    {
      "source": "/old-page",
      "destination": "/new-page",
      "permanent": true
    }
  ],
  "rewrites": [
    {
      "source": "/blog/:slug",
      "destination": "/news/:slug"
    }
  ]
}

Protección de branches

Vercel Deployment Protection

Settings → Deployment Protection

Opciones:

  • Password Protection
  • Trusted IPs only
  • Vercel Authentication (requiere login)

Útil para:

  • Proteger previews
  • Staging environments
  • Internal tools

Integrations

Vercel se integra con:

Bases de datos

  • Vercel Postgres (incluido)
  • Vercel KV (Redis)
  • PlanetScale
  • MongoDB Atlas
  • Supabase

CMS

  • Sanity
  • Contentful
  • Strapi
  • WordPress

Monitoring

  • Sentry
  • LogRocket
  • Datadog

Ve a: Dashboard → Integrations

Colaboración en equipo

Invitar miembros

  1. Settings → Members
  2. Invite Member
  3. Asigna rol:
    • Owner: Control total
    • Member: Deploy y configuración
    • Viewer: Solo ver

Proteger producción

Settings → Git

  • Production Branch: main
  • Preview Deployments: Todas las branches

Solo main despliega a producción, el resto son previews.

Costos

Hobby (Gratis)

Incluye:

  • Deployments ilimitados
  • 100 GB bandwidth
  • Serverless Functions
  • Edge Network
  • SSL automático
  • Preview deployments

Límites:

  • 1 usuario
  • Sin protección de password
  • Sin analytics avanzado

Pro ($20/mes por usuario)

Todo de Hobby +

  • Múltiples usuarios
  • 1 TB bandwidth
  • Password protection
  • Analytics avanzado
  • Priority support
  • Function timeout: 60s

Enterprise (Custom)

Todo de Pro +

  • SLA 99.99%
  • Soporte dedicado
  • SSO/SAML
  • Advanced security

Troubleshooting

Build falla

# Error: ENOENT: no such file
→ Verifica paths relativos, usa path.join()

# Error: Module not found
→ npm install esa dependencia

# Error: Out of memory
→ Reduce bundle size o upgrade a Pro

404 en producción

# Verifica que la página existe
# Revisa redirects en next.config.js
# Limpia cache: Settings → Data Cache → Purge

Variables de entorno no funcionan

# Verifica que están en Settings → Environment Variables
# Redeploy después de agregar variables
# Variables con NEXT_PUBLIC_ para cliente

Función timeout

# Hobby: máximo 10s
# Pro: máximo 60s
# Optimiza la función o divide en partes

Mejores prácticas

1. Usa preview deployments

Prueba cambios antes de mergear:

# Crea branch
git checkout -b feature

# Push y crea PR
git push origin feature

# Vercel crea preview automáticamente
# Prueba en URL de preview
# Merge cuando esté listo

2. Configura protección

# Protege previews con password
Settings → Deployment Protection → Password

3. Monitorea performance

# Instala Speed Insights
# Revisa métricas semanalmente
# Optimiza páginas lentas

4. Automatiza con Git

# main → Producción
# develop → Staging (preview protegido)
# feature/* → Previews temporales

5. Usa Analytics

# Identifica páginas más visitadas
# Optimiza las que tienen más tráfico
# Detecta errores con logs

Resumen

Deploy en Vercel:

  1. Conecta repositorio Git
  2. Vercel detecta NextJS automáticamente
  3. Configura variables de entorno
  4. Deploy con un click
  5. Cada push = deploy automático

Características principales:

  • Zero-config
  • Preview deployments por PR
  • SSL automático
  • Edge Network global
  • Analytics incluido

Costos:

  • Gratis para proyectos personales
  • $20/mes para equipos
  • Escala según uso

Próximo: Static Exports para sitios sin servidor