Deploying Next.js to Vercel with Preview Deployments: A Step‑by‑Step Guide
Deploying Next.js to Vercel with Preview Deployments
Introduction
Next.js es un framework de React potente que simplifica el desarrollo de aplicaciones web modernas. Cuando se trata de llevar una aplicación del entorno de desarrollo a internet, Vercel se ha convertido en una plataforma popular gracias a su integración nativa con Next.js, despliegues instantáneos y un sistema robusto de despliegues previos (también conocidos como PR previews).
Este artículo te guiará paso a paso a través del proceso completo: desde configurar un nuevo proyecto Next.js hasta conectarlo a Vercel, crear despliegues previos para cada rama y automatizarlo todo con GitHub Actions. Cada comando y bloque de configuración se muestra junto con la salida esperada, para que puedas seguir con confianza y saber exactamente qué esperar.
A quién va dirigido este artículo
- Desarrolladores frontend que ya trabajan con Next.js y quieren llevar sus aplicaciones a producción.
- Equipos que utilizan Git y CI/CD y necesitan pruebas visibles antes de fusionar código.
- Ingenieros de DevOps o responsables de infraestructura que quieren estandarizar el flujo de despliegue en Vercel.
Al finalizar, sabrás cómo:
- Conectar un repositorio local a Vercel usando la CLI.
- Crear un despliegue previo automáticamente con
vercel --pre. - Configurar
vercel.jsonpara mantener la producción y los entornos previos separados. - Escribir un flujo de trabajo de GitHub Actions que dispare despliegues en cada
pusha una rama. - Evitar errores comunes como builds fallidos, problemas con variables de entorno o configuraciones incorrectas.
- Obtener un despliegue previo utilizable para cada solicitud de extracción, con un dominio predecible.
1. Requisitos previos
Antes de empezar, asegúrate de tener lo siguiente:
- Node.js ≥ 18 (incluye npm o yarn).
- Una cuenta en GitHub (o cualquier otro servicio de git remoto).
- Una cuenta en Vercel (puedes registrarte en vercel.com).
- El CLI de Vercel instalado globalmente (
npm i -g vercel).
node -v
npm -v
vercel --versionSalida esperada (ejemplo):
v14.15.4
9.6.3
v33.3.2Si algún comando falla, verifica tu instalación de Node o actualiza el CLI con npm i -g vercel@latest.
2. Creación de un proyecto Next.js de ejemplo
Puedes clonar el esqueleto de un proyecto de Next.js (la plantilla “with-typescript” incluye todo lo necesario) o crear uno nuevo con create-next-app. La plantilla que usaremos es mínima, solo para demostración.
npx create-next-app@latest preview-demo --typescript --eslint --app --tailwind --import-alias "@/*"Salida esperada (e interactions):
¿Prefieres usar TypeScript? (Y/n) n
¿Prefieres usar ESLint? (Y/n) y
¿Prefieres usar Tailwind CSS? (Y/n) y
¿Prefieres usar `appDir` y React 18? (Y/n) y
¿Prefieres usar la opción de importación con alias? (Y/n) y
Creando un nuevo proyecto en /path/to/preview-demo.
Instalando dependencias...Después de la instalación, navega al directorio:
cd preview-demoAbre el proyecto en tu editor. La estructura será algo como:
tree -L 2Salida esperada (poda para brevedad):
preview-demo
├── .eslintrc.json
├── .gitignore
├── next.config.js
├── package.json
├── pnpm-lock.yaml
├── public/
│ └── favicon.ico
├── src/
│ ├── app/
│ │ ├── layout.tsx
│ │ ├── page.tsx
│ │ └── about/
│ │ └── page.tsx
│ └── components/
│ └── ui/
│ └── card.tsx
└── tsconfig.jsonPara propósitos de este tutorial, solo necesitamos un par de páginas y un componente UI simple. Si quieres copiar el código exacto, puedes inspeccionar el repositorio generado más adelante.
3. Primer despliegue en Vercel (producción)
3.1 Iniciar sesión en la CLI de Vercel
vercel loginSe abrirá un navegador; inicia sesión en tu cuenta de Vercel. Si estás usando un token de GitHub Actions, puedes omitir este paso.
3.2 Desplegar desde el directorio raíz
vercel --prodSe te preguntará:
- ¿Cuál es tu proyecto de Now? (por defecto, toma el nombre del directorio).
- ¿Cuál es tu email de despliegue? (tu email de Vercel).
- ¿Quieres desplegar en
production(prod)? (confirmar).
Salida esperada (interactiva, simulada):
✔ Hablando con el equipo de Vercel...
¿Cual es el nombre de tu proyecto? preview-demo
¿Cual es tu email de despliegue? desarrollador@ejemplo.com
¿Quieres desplegar en producción? (Y/n) y
¡Desplegando... ¡Hecho! ¡Puedes encontrar tu despliegue aquí: https://preview-demo.vercel.appEl comando compila la aplicación (next build), ejecuta next export (o la exportación nativa de serverless de Next.js) y te da una URL de producción.
3.3 Verificar el despliegue
curl -I https://preview-demo.vercel.appSalida esperada:
HTTP/2 200
Content-Type: text/html; charset=utf-8¡Excelente! El despliegue en producción está activo.
4. Introducción a los despliegues previos
4.1 ¿Qué es un despliegue previo?
Un despliegue previo es una instancia efímera de tu aplicación alojada en Vercel para una rama o una solicitud de extracción específica. Te permite probar el código antes de fusionarlo en main/master. La URL sigue un patrón predecible:
https://<nombre-proyecto>-<hash-de-la-rama>-vercel.appEjemplo: una rama llamada feature/user-list podría obtener https://preview-demo-feature-user-list-abcd1234.vercel.app.
4.2 Habilitar despliegues previos automáticamente
Vercel activa los despliegues previos automáticamente para todas las ramas de un proyecto cuando usas el CLI. Después del primer despliegue, edita vercel.json para ser explícito:
{
"version": 2,
"builds": [
{
"src": "package.json",
"use": "@vercel/next",
"config": { "zeroConfig": true }
}
],
"routes": [
{
"src": "/api/(.*)",
"dest": "/.vercel/functions/api/$1"
}
],
"rewrites": [
{
"source": "/(.*)",
"destination": "/.vercel/functions/render/$1"
}
],
"preview": {
"enabled": true,
"auto": true
}
}El campo preview.enabled activa el sistema de vistas previas globalmente; preview.auto indica a Vercel que cree automáticamente una nueva vista previa para cada rama.
4.3 Creación manual de un despliegue previo
Supongamos que ya estás en una rama (git checkout feature/user-list) y quieres un despliegue previo inmediato sin esperar una CI:
vercel --preSalida esperada:
✔ Hablando con el equipo de Vercel...
¿Cual es el nombre de tu proyecto? preview-demo
¿Quieres crear un despliegue previo? (Y/n) y
¡Desplegando con vistas previas... ¡Hecho! ¡Puedes encontrar tu despliegue aquí: https://preview-demo-feature-user-list-xyz789.vercel.appLa URL (https://preview-demo-feature-user-list-xyz789.vercel.app) apunta ahora a esa rama. Puedes compartirla con tu equipo para pruebas.
4.4 Prueba del despliegue previo
curl -I https://preview-demo-feature-user-list-xyz789.vercel.appSalida esperada:
HTTP/2 200
Content-Type: text/html; charset=utf-8Si usas el enrutamiento basado en archivos de Next.js, la página principal debe mostrar el título de app/page.tsx. Puedes verificar el HTML real:
curl -s https://preview-demo-feature-user-list-xyz789.vercel.app | grep "<title>"Salida esperada:
<title>preview-demo</title>5. Automatización con GitHub Actions
5.1 Crear el flujo de trabajo (.github/workflows/vercel.yml)
Crea el directorio .github/workflows si no existe.
mkdir -p .github/workflowsEdita el archivo vercel.yml:
name: Despliegue en Vercel
on:
push:
branches:
- main
- develop
pull_request:
types: [opened, synchronize, reopened]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Obtener código
uses: actions/checkout@v4
- name: Configurar Node
uses: actions/setup-node@v4
with:
node-version: 18
cache: 'npm'
- name: Instalar dependencias
run: npm ci
- name: Desplegar en producción (rama main)
if: github.ref == 'refs/heads/main'
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
run: |
npx vercel --prod --token ${{ secrets.VERCEL_TOKEN }}
- name: Desplegar vista previa (otras ramas)
if: github.ref != 'refs/heads/main'
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
run: |
npx vercel --pre --token ${{ secrets.VERCEL_TOKEN }}Salida esperada durante la ejecución de la acción:
Clonando repositorio...
Instalando dependencias...
Resolviendo versiones...
Desplegando en Vercel (vista previa)... ¡Hecho! https://preview-demo-<branch-hash>-vercel.appEl workflow usa variables secretas de GitHub:
VERCEL_TOKEN– token de acceso personal de Vercel.VERCEL_ORG_ID– ID de la organización de Vercel.VERCEL_PROJECT_ID– ID del proyecto dentro de la organización.
Estos IDs se pueden obtener desde la interfaz de usuario de Vercel → Ajustes del proyecto → “Integrar”. No los expongas nunca públicamente.
5.2 Resultados esperados para cada evento
| Evento | Acción | URL resultante |
|---|---|---|
push a main |
vercel --prod |
https://preview-demo.vercel.app |
push a develop |
vercel --pre |
https://preview-demo-develop-abc123.vercel.app |
pull_request (rama feature) |
vercel --pre |
https://preview-demo-feature-login-xyz789.vercel.app |
6. Mejores prácticas
Mantén limpias las variables de entorno
Usavercel env lspara listarlas,vercel env addpara agregarlas de forma segura, y elimina cualquier clave secreta del historial de git (git filter-repoogit filter-branch).Usa un archivo
.gitignoreadecuado
Además de los valores por defecto, ignora:.vercel *.log .env.local .env.testSepara configuraciones de producción y previas
El archivovercel.jsonanterior ya aísla las rutas. Si necesitas diferentesheadersoredirectspara vistas previas, puedes usarroutesconhandle: 'pre'.Cachea la compilación
Usa las acciones de Caché de GitHub (actions/cache) para mantener el directorionode_modulesy la compilación.nextpara reducir el tiempo de ejecución.Usa un nombre de dominio personalizado
Una vez que estés contento con el despliegue previo, asigna un subdominio (vercel.appo un dominio personalizado) usando la interfaz de usuario de Vercel.Evita “No se encontró salida de compilación”
Asegúrate de quenext buildse ejecute correctamente localmente (npm run build). Si tu aplicación usa imágenes estáticas (next export) ooutput: 'export'ennext.config.js, verifica queVERCEL. Por lo general, sigue los pasos descritos en la documentación de Vercel.
7. Problemas comunes y cómo solucionarlos
| Síntoma | Causa probable | Solución |
|---|---|---|
Error: No se encontró salida de compilación |
next build falló o output: 'export' no configurado |
Ejecuta npm run build localmente; verifica que next.config.js tenga output: 'export' si es necesario. |
Forbidden: No tienes permiso para acceder a esta vista previa |
La vista previa no fue creada para la rama o el token es incorrecto | Ejecuta vercel link para volver a vincular el proyecto; asegúrate que VERCEL_TOKEN tenga acceso a la organización. |
404 en la vista previa |
vercel.json mal configurado o routes no coincidiendo con API |
Verifica los patrones src/dest; usa vercel dev localmente para depurar. |
Varias vistas previas apuntan a la misma rama |
Múltiples despliegues en la misma rama sin limpiar primero | Elimina las vistas previas antiguas con vercel rm <deployment_id> o modifica el flujo de trabajo para limpiar vistas previas anteriores. |
7.1 Depuración con vercel dev
Si necesitas probar el comportamiento localmente antes de un despliegue, ejecuta:
vercel devSalida esperada:
► Listening on http://localhost:3000
► Build completed (duración Xms)Puedes acceder a http://localhost:3000 para ver la aplicación como Vercel la vería.
8. Conclusión
Revisemos los puntos clave:
- Configuración inicial – Instala Node, el CLI de Vercel e inicia sesión.
- Primer despliegue en producción –
vercel --prodproporciona una URL pública instantly. - Concepto de despliegue previo – Las vistas previas son URLs temporales y compartibles para ramas específicas.
- Creación manual –
vercel --preen cualquier rama. - Automatización – Un simple workflow de GitHub Actions maneja tanto
main(producción) como otras ramas (vista previa). - Mejores prácticas – Usa variables de entorno seguras, un
.gitignoreadecuado y unvercel.jsonlimpio. - Solución de problemas – Depura con
vercel dev, verifica los mensajes de error de compilación y limpia vistas previas antiguas si es necesario.
Con estos pasos, tu equipo puede tener confianza de que cada cambio se prueba en un entorno real antes de fusionarlo. La combinación de despliegues previos automáticos con CI/CD hace que el proceso sea prácticamente sin esfuerzo y mantenible.
Próximos pasos
- Asignar dominios personalizados: En la interfaz de Vercel, agrega
app.example.comy configura los registros DNS. - Monitorear el rendimiento: Conecta tu proyecto a Vercel Analytics (
@vercel/analytics) para obtener métricas en tiempo real. - Escalar globalmente: Vercel usa CDN; los despliegues previos ya se benefician de ello, pero puedes especificar
overridesenvercel.jsonpara regiones específicas si lo necesitas. - Flujos de ramas protegidas: Implementa una política de ramas protegidas en GitHub + require approval en Vercel para controlar quién puede fusionar código.
Al perfeccionar este flujo de trabajo, obtendrás un pipeline de CI/CD rápido y confiable que mantendrá a tu aplicación Next.js siempre en su mejor versión.
“El mejor código no se escribe solo; se implementa, prueba y mejora continuamente.” – equipo de Vercel
DUGLAS MORENO
Comentarios (0)
Sé el primero en comentar.