Alojar Next.js en tu propio servidor con despliegue en cada git push
La forma corta de alojar Next.js en tu propio servidor es instalar un panel de despliegue como Coolify y conectar tu repositorio de GitHub. A partir de ahí, cada git push compila la aplicación y pone la versión nueva en producción por HTTPS. Según la documentación de Next.js, todas las funciones están disponibles cuando despliegas con un servidor Node.js o un contenedor Docker, así que no dependes de ninguna plataforma especial.
¿Qué funciones están disponibles en tu propio servidor?
La tabla de la documentación oficial es corta: un servidor Node.js y Docker admiten todas las funciones, y la exportación estática es limitada. En un solo servidor, en la práctica esto significa:
- Los componentes de servidor, las rutas de API y las respuestas en streaming funcionan con
next start. next/imageno necesita configuración adicional, y las imágenes se procesan en el servidor.- El almacenamiento en caché y la regeneración estática incremental (ISR) funcionan por sí solos en un único servidor con un disco persistente. Si ejecutas varias copias, tienes que compartir la caché entre ellas.
- La recomendación oficial es poner un proxy inverso delante en lugar de exponer Next.js directamente. Coolify trae Traefik para esto, y Traefik también consigue el certificado.
¿Qué potencia debe tener el servidor?
Lo que decide cuánta memoria necesitas es la compilación, no la aplicación en marcha. next build alcanza un pico, y la aplicación necesita mucho menos una vez en marcha. Coolify también consume memoria. Estos son los valores que medimos en servidores reales:
| Tamaño | Proyecto pequeño | Proyecto con muchos paquetes |
|---|---|---|
| 2 GB, 1 vCPU | 350 s, 1,4 GB de memoria y 0,5 GB de swap | La compilación se quedó sin memoria |
| 4 GB, 2 vCPU | 213 s, 2,2 GB de memoria y 0,2 GB de swap | 223 s, 3,5 GB de memoria y 0,9 GB de swap |
El proyecto pequeño fue la aplicación Next.js de ejemplo de Coolify. El más grande era una aplicación de chat con IA escrita con Next.js 16 y unos 85 paquetes, y con 2 GB se quedó sin memoria durante la comprobación de TypeScript. El servidor tenía 2 GB de swap, y las cifras muestran el punto más alto. El uso de disco tras la primera compilación fue de 13-18 GB. Son mediciones nuestras y tu proyecto será distinto. Si una compilación falla por falta de memoria, amplía primero y, si puedes, reduce más adelante.
Paso a paso
1. Conecta el repositorio
Inicia sesión en Coolify, abre tu proyecto en la página Projects y pulsa New resource. Para un repositorio público, elige Public Git Repository, introduce la dirección y pulsa Check repository.
2. Añade una clave si el repositorio es privado
En el menú de la izquierda, ve a Private Keys dentro de Keys & Tokens y crea una clave con Generate ED25519. Añade la clave pública en Deploy keys, en la página Settings del repositorio en GitHub. Después usa New resource, elige Private Git Repository (with Deploy Key) e introduce [email protected]:user/project.git. Deja Build pack en Railpack, que reconoce Next.js, y el puerto se queda en 3000. Coolify marca Railpack como beta, así que elige tu propio Dockerfile si te da problemas.
3. Introduce las variables de entorno
En la página Environment Variables, cambia a Developer view y pega el contenido de tu archivo .env. Aquí importa un detalle: las variables cuyo nombre empieza por NEXT_PUBLIC_ se escriben en el código durante la compilación. Cuando cambies una, pulsa Redeploy: el panel detecta que cambió un ajuste de compilación y compila de nuevo. Nunca pongas ese prefijo a una clave que el navegador no deba ver.
4. Conecta tu dominio
Crea un registro A en tu proveedor de dominio que apunte a la dirección IP del servidor. En Coolify, ve a la página Domains, pulsa Add domain, elige https como protocolo, introduce tu dominio, guarda y publica de nuevo. El certificado se solicita y se renueva automáticamente. Los puertos 80 y 443 deben estar abiertos.
5. Publica
Pulsa Deploy. La página Deployments muestra el registro de compilación en directo. Cuando termina la compilación, el contenedor antiguo sigue sirviendo hasta que el nuevo está listo.
¿Cómo se convierte git push en una publicación?
En cada push, GitHub envía al panel una solicitud firmada. El panel verifica la firma y vuelve a compilar la aplicación de esa rama, y una solicitud con una firma incorrecta se rechaza. Así lo configuras:
- En la página Webhooks de la aplicación, copia la Webhook URL de la sección de GitHub, introduce un valor aleatorio de al menos 16 caracteres en Webhook secret y guarda.
- En GitHub, abre Settings del repositorio, ve a Webhooks y pulsa Add webhook.
- Pon la dirección en Payload URL y el mismo valor en Secret. Establece Content type en
application/jsony deja push como único evento.
Para probarlo:
git commit --allow-empty -m "deploy test"
git push
La compilación nueva aparece en la página Deployments. En el proyecto de ejemplo pequeño, un commit nuevo salió en producción en 41 segundos gracias a la caché de compilación. GitHub debe poder llegar a la dirección del panel, y como el panel se instala con una dirección HTTPS pública, no hace falta nada más.
Errores comunes
| Síntoma | Causa | Solución |
|---|---|---|
La compilación termina con Killed o heap out of memory | No hay suficiente memoria | Amplía el servidor |
Un valor nuevo de NEXT_PUBLIC_ no aparece | El valor queda fijado en la compilación | Usa Redeploy |
| La compilación falla por una variable que falta | El código lee la variable durante la compilación | Añádela en el panel y mantenla disponible en el momento de la compilación |
| No llega ningún certificado | El registro A es incorrecto o no se ha propagado | Comprueba el registro y publica de nuevo cuando se haya propagado |
| Un error 502 en el sitio en producción | La aplicación escucha en otro puerto | Corrige el puerto en la página General |
Con la opción Next.js de Seturack, Coolify llega instalado: el servidor local está validado, el asistente de bienvenida ya está resuelto y el panel se abre por HTTPS. La dirección y la contraseña aparecen en tu panel, y empiezas conectando GitHub. Tienes acceso root y, si lo prefieres, puedes gestionarlo todo desde el panel. La copia de seguridad diaria está incluida en el precio y el tráfico es ilimitado. Fijas el tamaño con controles deslizantes en la página de VPS para Next.js.
Comentarios0
Todavía no hay comentarios
Sea la primera persona en compartir su opinión.
Inicie sesión o regístrese para dejar un comentario.